株式会社ユーザベースでUB Researchを担当している高山です。
ユーザベースでは2023年7月からStudio Ousia社と業務提携して、自然言語処理の研究開発に取り組んでいます。今回はその取り組みの一つとして作った言語モデルについて書いていきます。
概要
経済情報を扱う製品群を開発するユーザベースでは、「企業」という情報を扱うことが非常に多くあります。
今回は、ユーザベースの保有する経済情報のデータを学習に利用し、企業エンティティに特化したエンコーダーモデル Uzabase Business Knowledge Encoder based on LUKE (UBKE-LUKE) を作成しました。
こちらはStudio Ousia社が開発している知識強化言語モデルLUKEをベースに共同で開発してきた成果となります。
課題の背景
まず、UBKE-LUKE開発の動機となった、ユーザベース内でこれまで扱われてきた課題の例をいくつか挙げてみます。
企業タグを付与
「スピーダ 経済情報リサーチ」において、以前からニュースデータと企業の自動紐付けをおこなっています。
企業の分類
様々な企業を、自社で定義する「業界」や「トレンド」に分類するニーズが多くあります。
類似企業提案
「スピーダ 顧客企業データハブ」では、営業先候補となる類似企業を提示する機能を提供しています。
企業名の名寄せ
こちらも「スピーダ 顧客企業データハブ」で、曖昧さを含む企業名を与えると正式名称を提示する機能があります。
例えば「ユーザベース」や「Uzabase」を与えると「株式会社ユーザベース」を返してくれる機能です。
その他
他にも社内の課題には以下のような特徴があります。
- 国内の上場企業はもちろんのこと、非上場企業だったり海外の企業も同様のタグ付けをする必要がある
- 企業名や企業に関する情報は毎日のように変わり得るため、低コストで新しいエンティティの追加が実現できることが望ましい
- 「企業」「業界」「トレンド」に限らず様々な種類のエンティティ間の自動紐付けがおこなわれている
ユーザベースとStudio Ousia社で兼ねてから知識強化言語モデルLUKEの応用に取り組んできましたが、以上のような課題を全般的に解決できる一つのアプローチとしてLUKEを改良することを考えました。
モデルの機能
今回は2種類のデータセットを使ってUBKE-LUKEを作成しました。一つは社内のデータを使って学習したもの(社内版と呼びます)で、もう一つは一般的なデータを使って学習したもの(公開版と呼びます)です。
公開版はあくまで機能制限版のデモという位置づけではありますが、非営利目的での利用に限定したライセンスで公開しています。
https://huggingface.co/uzabase/UBKE-LUKE
リポジトリのREADMEにサンプルコードは記載してありますので、ここではモデルの入出力の実例をいくつか列挙してみます。
1. テキストの企業タグ付け
例1:企業名が出てくるケース
入力 船井電機の原田義昭会長は、東京地裁へ民事再生法の適用を申請しました。同社は10月に裁判所から破産手続きの開始決定を受けており、会長は11月に即時抗告を申し立て。 出力(公開版) 船井電機・ホールディングス株式会社 1.889819622039795 セイノーホールディングス 1.6689746379852295 東洋電機 1.6580915451049805 横河電機 1.6363317966461182 船井総研ホールディングス 1.6185271739959717 出力(社内版) 船井電機・ホールディングス株式会社 2.1236658096313477 NECキャピタルソリューション 2.1007046699523926 ニチコン 1.9801467657089233 伊藤忠商事 1.95940363407135 イビデン 1.9173974990844727
例2:企業名は出てこないが製品名が出てくるケース
入力 レクサスは主に北米の高級車マーケットにおいて、一定の地位を築いた。 出力(公開版) トヨタ自動車 2.225526809692383 KLASS 2.080902099609375 三和エナジー 1.9187912940979004 大阪トヨペット 1.81948983669281 ソフト99コーポレーション 1.8133546113967896 出力(社内版) トヨタ自動車 3.426560163497925 大阪トヨペット 2.873119354248047 動力 2.703040838241577 マツダ 2.578676462173462 善都 2.5034127235412598
例3:複数の企業が略称で出てくるケース
入力 住商がヨーカ堂や国内セブン事業を創業家と買い、海外(特に米国)を銀行団+伊藤忠といったのが、資金量や独禁法なども含めてありうると思う。 出力(公開版) 伊藤忠商事 2.257183313369751 兼松 1.7772554159164429 住友商事 1.7195665836334229 伊藤園 1.690760612487793 ホームプロ 1.6588122844696045 相可フードネット 1.6559562683105469 味の素 1.6185739040374756 丸紅 1.6178269386291504 出力(社内版) 伊藤忠商事 1.970255970954895 みずほフィナンシャルグループ 1.864036202430725 セブン&アイ・ホールディングス 1.7235901355743408 三井物産 1.6827155351638794 イトーヨーカ堂 1.6623611450195312 丸紅 1.6534956693649292 三井住友フィナンシャルグループ 1.5968483686447144 住友商事 1.584254503250122
2. 名寄せ
次は文章ではなく企業名の略称を単語として入力した場合を見てみます。
例1:東電→東京電力
入力 東電 出力(公開版) 東鉄工業 1.800653338432312 ハイメディック 1.7301298379898071 東日本旅客鉄道 1.7076520919799805 トーエネック 1.6951096057891846 四電工 1.683356761932373 出力(社内版) 東京電力ホールディングス 1.900646686553955 九電工 1.6967113018035889 トーエネック 1.677696943283081 四電工 1.6550781726837158 山本製粉 1.386504054069519
例2:(NEC→日本電気)
入力 NEC 出力(公開版) ブロードリーフ 1.5757800340652466 スター精密 1.4245541095733643 プロトコーポレーション 1.4149832725524902 北川工業 1.4022595882415771 ランドキャリー 1.379115104675293 出力(社内版) 日本電気 1.942685604095459 古野電気 1.7802051305770874 ブロードリーフ 1.7497410774230957 沖縄セルラー電話 1.7365115880966187 NECモバイルコミュニケーションズ 1.6789274215698242
例3:名称変更(Chatwork→Kubell)
入力 Chatwork 出力(公開版) kubell 2.0852675437927246 ブロードリーフ 1.60276198387146 クリヤマホールディングス 1.574510097503662 ワァークスジャパン 1.3637871742248535 システムインテグレータ 1.3246115446090698 出力(社内版) kubell 3.315568447113037 ネットワークバリューコンポネンツ 2.666713237762451 ネクストウェア 2.5325429439544678 ピーエーワークス 2.36822772026062 テンキー 2.32912015914917
3. 企業検索(retrieval)
曖昧なキーワードによって企業を検索するような例を見てみます。
例1:業界名
入力 家電量販店 出力(公開版) 廣瀬無線電機 1.5994884967803955 滝野川自動車 1.4755053520202637 アプライド 1.4465911388397217 ひらせいホームセンター 1.3979506492614746 株式会社北越ケーズ 1.3972055912017822 出力(社内版) エディオン 1.5374788045883179 コジマ 1.4786356687545776 ビックカメラ 1.3815630674362183 パナソニック ホールディングス 1.3557965755462646 島忠 1.3515362739562988 コメリ 1.2173724174499512 ヤマダホールディングス 1.1596741676330566
例2:製品種別
入力 清涼飲料水 出力(公開版) えひめ飲料 1.7598999738693237 アサヒ飲料販売 1.730248212814331 JR東日本ウォータービジネス 1.695734977722168 ヨギー 1.6908044815063477 JUNS 1.6774768829345703 出力(社内版) サントリーフーズ 2.788938045501709 サッポロ飲料株式会社 2.2995669841766357 木村飲料 2.2513232231140137 アサヒ飲料 2.190692663192749 日本コカ・コーラ 2.1829280853271484
4. 類似企業
次はモデルの入出力ではなく、モデルから埋め込み表現を取り出して、ある企業の近傍の企業を見てみます。エンティティの埋め込み表現には業種や類似業態の情報があらわされているのがわかります。
例1:「トヨタ自動車」の近傍
公開版 (3999, 'スズキ', 0.043615730354616744), (10141, '日産自動車', 0.04445604531744607), (1198, 'いすゞ自動車', 0.04469884759745568), (10722, '東芝', 0.04477533428413949), (10194, '日野自動車', 0.04532918638355454), 社内版 (3999, 'スズキ', 0.04195564147073583), (10141, '日産自動車', 0.04264829383180313), (10194, '日野自動車', 0.043210013515167844), (1198, 'いすゞ自動車', 0.04336055477517675), (6239, 'マツダ', 0.04427947402280097)
例2:「セブン&アイ・ホールディングス」の近傍
公開版 (2123, 'イトーヨーカ堂', 0.044174066152322666), (2332, 'エイチ・ツー・オー\u3000リテイリング', 0.04549758696543904), (7343, '三越伊勢丹ホールディングス', 0.0455640350635349), (9203, '山崎製パン', 0.046889574675276435), (3144, 'グリコ乳業', 0.04697297342653428), 社内版 (2123, 'イトーヨーカ堂', 0.042820004465340844), (2332, 'エイチ・ツー・オー\u3000リテイリング', 0.04418480623704113), (7343, '三越伊勢丹ホールディングス', 0.04495656932573411), (9203, '山崎製パン', 0.045703924871233426), (4204, 'セブン銀行', 0.04593271648076325),
5. 四則演算(おまけ)
実用性は無さそうですが、Word2Vecのように、ある業界の主要企業の埋め込み表現から、業界情報の埋め込み表現を加減することで、他業界への自然な類推ができたりします。
「東京電力」-「電気」+「ガス」 出力(公開版) 三菱瓦斯化学 2.6165223121643066 西部ガスホールディングス 2.2432920932769775 北陸瓦斯 2.2368619441986084 JUNS 2.232947587966919 旭川ガス 2.19374942779541 出力(社内版) 東京瓦斯 2.570021390914917 西部ガスホールディングス 2.3130297660827637 三菱瓦斯化学 2.2668349742889404 東京電力ホールディングス 2.2553305625915527 センチュリオン 2.0996577739715576
以上のような色々な使い方ができるため、先行事例にCompany2VecやStock2Vecなど複数が存在しますが、それらの発展型となるようなモデルと言えるかと思います。
- How LinkedIn Economic Graph Bonds Information and Product: Applications in LinkedIn Salary (2018)
- Introducing Company2Vec - Helping company analysis with machine learning (2020) ブログとGitHub
- Learning Company Embeddings from Annual Reports for Fine-grained Industry Characterization (2020)
- Company2Vec -- German Company Embeddings based on Corporate Websites (2023)
- AI at Dealfront: Company2Vec - The Company Whisperer (2023)
- Enhancing Stock2vec: Company Embedding Method Using Search Volume Intensity Exposures (2024)
モデルの詳細
モデルの学習に利用したデータは以下のようになります。
- 公開版
- Wikipedia日本語版の企業ページと企業ページにリンクしている文章: 約2万社分、6万文章
- 有価証券報告書: 約4000社分
- 無料で収集可能な経済ニュース記事のうち、企業名を紐付けた記事: 約1900文章
- 社内版
- Wikipedia日本語版の企業ページと企業ページにリンクしている文章
- 有価証券報告書
- データパートナーから購入したニュース記事
- スピーダのアナリストによる業界レポート、トレンドレポート
- 自社組成している企業特色文や企業概要文
- 自社組成している企業のニュースリリース
- 商用LLMによって生成した企業に関する文章
オリジナルのLUKEはWikipediaのデータのみを用いて学習されています。Wikipediaでは、とある見出し(主題)について説明を記載した説明文と、文章中の特定の部分が別の見出しへのリンク(言及)となっている言及文という形でデータの形が統一されています。
今回用意したデータでは、1つの企業に対して説明文に相当する文章が多くあったり(有価証券報告書とニュースリリースと業界レポート等)、複数の企業について書かれた文章を「複数の主題がある文章」として扱う必要がありました。そのため、オリジナルのLUKEから以下のような変更を加えました。
- 文章の
[CLS]
トークンから文章の主題となるエンティティを推測する学習タスクを追加 - なおかつ、複数の主題を持つ文章を扱えるように学習タスクを変更
- Wikipediaではない文章も教師データにできるように教師データ生成処理を変更
モデルのリポジトリにはこの変更に関するソースコードは含んでいませんが、何らかの形で公開できれば良いと考えています。
今後の発展
最後に、本研究の今後の発展について書いていきます。
今回作成したモデルでは企業エンティティのみしか扱うことができませんが、様々なエンティティの種類を同時に扱うことができるモデルを作成することを想定しています。
ユーザベースでは「企業」「業界」「トレンド」「スタートアップ企業に付与するタグ」「技術タグ」など、さまざまなエンティティを扱っており、これらのエンティティを繋げて経済情報を整理することがサービスの根幹になっているためです。
「課題の背景」に記載した、学習済みモデルに対して新しいエンティティを追加することや、多言語化についても今回の延長で対応できると考えています。
もしUBKE-LUKEの活用に興味をお持ちの方は ub-research@uzabase.com までご連絡ください。