特定のドメインのテキストから同義語候補を取り出すために色々検証した話

こんにちは。 リサーチャーの勝又です。 私はレトリバで自然言語処理、とくに要約や文法誤り訂正に関する研究の最新動向の調査・キャッチアップなどを行っております。

今回の記事では、特定のドメインのテキストから同義語候補を取り出そうと色々試みた結果をまとめました。

特定のドメインのテキストから同義語候補を取り出したい

最近は自然言語処理の分野でも大規模ニューラルネットワークを用いた手法が話題となっています。 とくにChatGPTやそれに関連する話題は至る所で耳にします。

それはそれとして、自然言語処理の現場では同義語辞書が欲しい状況はまだまだ存在すると思います。 とくに、特定の狭いドメインのテキストの場合、既存の公開されている同義語辞書1に含まれない用語も多く存在すると考えられます。 そのため、対象のドメインに関する同義語辞書を1から作る、となっていくと思いますが、素直に行うと当然大変です。

そこで、特定のドメインのテキストから同義語候補を取り出すために色々と検証してみました。

問題設定

同義語候補の取り出し方は、用語間の類似度をもとに行います。 概要としては次の図の通りです。

同義語候補獲得手法の概要図

具体的には特定のドメインのテキストからEntity抽出器を用いてEntity集合(mention集合と呼称)を用意します。 入力としてユーザーが入力する用語termを別途用意して、mention集合をtermに対する適合度順に並べてtop-1を同義語候補として出力しました。 この適合度順に並べる処理として、分散表現による類似度または、編集距離を用いてどの手法が良さそうか検証しました。

評価について

入力termとシステムのtop-1 mentionが同義語かどうかについて、今回は人手で評価を実施しました。 その際の同義語の定義として、今回は互換性同位語性を導入しています。

互換性は、入力termとmentionが入れ替えても意味が変わらないものとしています。 たとえば、入力termがワンちゃん、top-1 mentionがで、termを含む文としてワンちゃんの散歩中です。といった場合を考えます。 この時、termとmentionを入れ替えた文犬の散歩中です。は元の文と意味が変わっていないため、互換性を満たすとしました。

同位語性は、入力termとmentionの関係が上位下位関係ではなく、共通の上位概念を持つ語(同位語)である性質としました。 たとえば、入力termが動物、top-1 mentionがで、termを含む文として動物を飼う。といった場合を考えます。 先ほどの互換性を考えてみると、termとmentionを入れ替えた文犬を飼う。が元の文と同じ意味かと言われると人によって判断が変わるかと思います(今回は同じ意味としています。)。 一方で、同位語性について考えてみると、動物は明らかに上位語下位語なので、同位語性は成り立ちません。 このように、互換性だけだと同義語かどうか判断が難しい場合について、同位語性を導入することで緩和するするように工夫しました。

今回は、互換性と同位語性のどちらも満たす場合を強い同義語、少なくともどちらか1つは満たす場合を弱い同義語としています。

分散表現獲得手法

記事冒頭に記載したとおり、今回termに対してmention集合を適合度順に並べる処理として、分散表現による類似度を用いました(比較として編集距離も実施しています)。 具体的には次の手法を試しました。

  1. fasttext2
  2. BERT3
  3. SimCSE4
  4. BLINK5
  5. LUKE6

fasttextは、単語ベースの分散表現の精度を検証する目的で検証します。 BERT、SimCSEはどちらも最近流行りの大規模事前学習済みモデルで、とくにSimCSEはBERTをもとに、より優れた効果的な分散表現を作成できます。 弊社技術ブログでも以前紹介しているので、詳しく知りたい方はこちらをご確認ください。

また、BLINKとLUKEと呼ばれるモデルも検証しました。 BLINKはZero-shot Entity Linkingで使われているモデルです。 LUKEはEntityの分散表現を効果的に作成することができるモデルです。 これらのモデルはご存じない方もいらっしゃるかと思いますので、簡潔にご紹介します。

Zero-shot Entity Linking自体は、教師Entity Linkingデータに含まれていないEntityを対象にLinkingを実施する問題設定として扱われることが多いです。 BLINK論文の著者も同様の問題設定を扱いつつ、学習データとしてWikipediaのリンク構造を利用した場合に関しても検証しています。 このWikipediaのリンク構造の利用とは、具体的にはWikipedia中のHTMLのaタグを使用してEntity-mentionペアを作成しています。

...いずれも東京の中心部である<a href="/path/to/東京都区部">東京23区</a>にある。

上記の例(こちらWikipedia記事から作成)から、東京都区部-東京23区のペアが作成できます。 このように、Wikipediaを利用することで大量の学習データを作成することができ、Zero-shot Entity Linkingに有効なモデルを作成できることが知られています。

モデル自体はシンプルで、いわゆるBERTをもとにしたBi-Encoder(Dual Encoder)でEntity-mentionペアを絞り込んだのちに、Cross-Encoderでより正確な類似度を算出する手法を用いています。 今回の検証では他のシステムとの比較のため、Bi-Encoderのみを日本語Wikipediaで学習し、termとmentionの適合度推定に使用しました。

LUKE

LUKEはBERTに対してEntityの分散表現を作成するように拡張を行ったモデルです。 Entity Linkingの部分タスクであるEntity Disambiguationで高い性能を達成したことが報告7されています。

構造としては、文脈付きのEntityベクトルを作成するような形をとっています。 今回はtermと各mentionをそれぞれベクトル化する必要があるのですが、termの方はユーザーが入力するクエリを想定しているため、termをそのまま入力しています。

検証

記事冒頭の通り、入力termに対してmention集合を適合度順に並び替え、top-1 mentionを同義語候補とする手法について検証を行いました。

実験設定

分散表現獲得手法詳細

前述した通り、今回は分散表現を利用して適合度を推定します。 その際のモデルとして、BERTをもとにしたモデル(BERT、SimCSE、BLINK)はcl-tohoku/bert-base-japanese-v2 [link]を使用しました。 また、LUKEについてはstudio-ousia/luke-japanese-base [link]を使用しました。

BERTは事前学習済みモデルをそのまま使用しています。 SimCSEはmention集合中の各mentionについてcontrastive learningを実施しています。 BLINKは前述した通り、Wikipediaをもとに作成したEntity-mentionペアで学習をしています。 また、fasttextはWikipediaを利用して学習を行いました。

データ

今回の検証では、特定のドメインのテキストとして、次のものを用意しました。

とくにAmazon Reviewとリコール文書についてはそれぞれ商品のカテゴリごとに検証を実施しています。 各テキストに対して、NERを行い、mention集合を作成しました。

入力termについては、ユーザーの入力の擬似的なものを用意しました。 具体的には、各ドメインのテキストに関連するWikipedia記事のタイトルを使用しました。 この関連するWikipedia記事の探索にはPiratla et al.11の手法を用いています。

検証の評価方法

評価については、前述の通り、termとtop-1 mentionが互換性、同位語性を満たすかを確認しました。 なお、互換性の確認の際に使用するtermを含む文は、Wikipediaの定義文を使用しました。

結果

検証結果が次の表です。 なお、斜線左側が弱い同義語のaccuracy、右側が強い同義語のaccuracyです。 各列についてもっとも良い数値を太字にしています。

同義語獲得検証の実験結果

この結果、とくに一番右の列から、BERT、SimCSE、BLINKが有効であることがわかりました。 強い同義語の場合で0.14から0.15、弱い同義語でも最大で0.21のaccracyという結果になり、まだまだ精度に課題がありそうです。

個人的にはBERTがSimCSEと同等という点が驚きました。 BERTは確かにさまざまなタスクで高い性能を達成していますが、事前学習済みモデルをそのまま分散表現作成に使用した場合、あまり効果的でないことが報告されています(SimCSEなどの多くの論文)。 一方で、今回の同義語獲得タスクではSimCSEと同程度の性能となりました。 実は、この確認のため、日本語単語類似度タスクでBERTの精度を検証したところ、そちらではあまり有効ではありませんでした(詳細は言語処理学会第29回年次大会(NLP2023)で発表予定です。)。

まとめ

今回は同義語辞書の作成を支援するため、特定のドメインのテキストデータから同義語候補を出力する方法について検証を実施しました。 単純に分散表現を利用した場合について検証したところ、BERTに関連する手法が優れた結果となりました。 しかしながら、精度としてはまだまだ課題が残っています。 また、評価についても今回はアノテーター1人で実施していて、この点でも課題が残っています。

本記事の内容はNLP2023でも発表予定です。 アノテーション、同義語獲得方法、単語類似度タスクとの違いなどをぜひ議論できればと思います。

また、本発表と直接は関係しませんが、NLP2023では弊社展示ブースも設営予定です。 弊社にご興味ある方はぜひ遊びにお越しください。


  1. 有名な日本語同義語辞書としては、日本語WordNet [link]やConceptNet [link]、Sudachi同義語辞書 [link]が知られています。
  2. Enriching Word Vectors with Subword Information. Piotr Bojanowski, Edouard Grave, Armand Joulin, Tomas Mikolov. [paper]
  3. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. [paper]
  4. SimCSE: Simple Contrastive Learning of Sentence Embeddings. Tianyu Gao, Xingcheng Yao, Danqi Chen. [paper]
  5. Scalable Zero-shot Entity Linking with Dense Entity Retrieval. Ledell Wu, Fabio Petroni, Martin Josifoski, Sebastian Riedel, Luke Zettlemoyer. [paper]
  6. LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attention. Ikuya Yamada, Akari Asai, Hiroyuki Shindo, Hideaki Takeda, Yuji Matsumoto. [paper]
  7. Global Entity Disambiguation with BERT. Ikuya Yamada, Koki Washio, Hiroyuki Shindo, Yuji Matsumoto. [paper]
  8. The Multilingual Amazon Reviews Corpus. Phillip Keung, Yichao Lu, György Szarvas, Noah A. Smith. [paper]
  9. リコール文書は、国交省消費者庁から取得しました。
  10. COVID-19日本語Twitterデータセットの「意見・感想」データを使用しています。 [link]
  11. Topic Sensitive Attention on Generic Corpora Corrects Sense Bias in Pretrained Embeddings. Vihari Piratla, Sunita Sarawagi, Soumen Chakrabarti. [paper]