INFORMATION
テクノロジ

[NLP] 日本語WikipediaからSolr用の類義語辞書を自動作成する

日本語Wikipediaなどの「辞書型コーパス」からLucene/Solr用の類義語辞書を自動作成するシステムを開発しましたので、簡単にご紹介します。

参考資料(SlideShare)

辞書型コーパスからの類義語知識の自動獲得(SlideShare)

Lucene/Solrと類義語検索

Lucene/SolrではSynonymFilterを使って類義語検索を簡単に実現することができます。たとえば次のような内容のsynonyms.txtを用意し:

自動車損害賠償責任保険, 自賠責保険
Solrのschema.xmlファイルに次のようなフィールド型を定義すれば:
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.JapaneseTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
             ignoreCase="true" expand="false" tokenizerFactory="solr.JapaneseTokenizerFactory"/>
  </analyzer>
</fieldType>
そのフィールド型を使ったフィールドにおいて、「自動車損害賠償責任保険」で検索しても「自賠責保険」で検索しても、また、検索対象の文書がどちらの用語で書かれていても、その文書をヒットさせることができます。

さらにLucene/Solrが優れているのは、これらのどんな組み合わせでもハイライトがずれないことでしょう(下図):

原型語-類義語検索とハイライト

原型語-類義語検索とハイライト

類義語検索やハイライトは確かに便利です。しかし、ユーザーにこのような便利な検索機能を提供するには、運用管理者が前述のような類義語辞書(CSVファイル)を用意しなければなりません。新しい言葉は日々生み出されているので、それに対する新しい類義語も日々生産されています。実際にシステム導入時はがんばって類義語辞書を整備したシステム担当者も、時間が経ったり、担当者が代わったりすると、類義語辞書が整備されなくなる、ということがあるようです。

そのためなんとか類義語辞書を自動的に作成できないか、という要望が出てきます。そこで今回開発したのが本稿で紹介するシステムです。このシステムを使うと、「辞書型コーパス」から類義語知識を学習し、確度の高い「原型語ー類義語」の組み合わせをCSVファイルに出力してくれます。このCSVファイルはLucene/SolrのSynonymFilterにそのまま適用できます。もちろん、プログラムが「確度が高い」と判定したものであり、ある程度の誤りは含まれてしまいます。本稿で紹介するのは日本語Wikipediaを「辞書型コーパス」に用いたものであるため、出力結果には「芸能関係」や「鉄道関係」を多く含んでいたりと、やや癖のある結果となりますが、それでも人手を大幅に削減できます。

後述するような別のコーパスを用いれば、高品質かつ特定ドメインのアプリケーションで大いに役立つCSVファイルを得ることができるでしょう。

「辞書型コーパス」とは

本稿で「辞書型コーパス」とは、「見出し語」とその「説明」からなるエントリが複数集まっているコーパスとします。電子辞書がまさにそのようなコーパスですし、身近で入手しやすいものとしては、Wikipediaがまさに辞書型コーパスです。本稿では具体例として、日本語Wikipediaを「辞書型コーパス」として用います。

システムの構成

システムの概要ですが以下のようになっています:

Solr用類義語辞書の自動作成システム

Solr用類義語辞書の自動作成システム

このシステムは、最初に辞書型コーパスのデータをLuceneのインデックスに登録しておき、次にインデックスから類義語知識を取り出す、という流れになっています。類義語知識を取り出す部分は、すべての見出し語について、以下の処理をループで実行します:

  1. 類義語候補tBの同定
  2. 見出し語tAと類義語候補tBの類似度Sの計算
  3. 類似ならCSVファイルに(tA,tB)を出力

以下これらの処理を簡単に説明します。

類義語候補tBの同定

類義語候補tBはLuceneインデックスの「説明」フィールドの名詞または複合名詞とします。そしてそれらの単語を当該見出し語tAと比較し、以下の条件にすべてあてはまった単語を類義語候補tBとして次のステップに進みます:

  • tAとtBの最初の文字が一致
  • tBがtAに完全に含まれない
  • tBを構成する文字が完全にtAに含まれ、出現順序が一致
  • tBはtAから複数の名詞を省略したものではない
  • tBはtAから最後の名詞を省略したものではない

見出し語tAと類義語候補tBの類似度Sの計算

次は、見出し語tAと類義語候補tBの類似度S(tA,tB)を計算するのですが、Sを計算する代わりに、見出し語の記事AAと類義語候補tBを使って書かれた記事の集合{AB}の類似度S*(AA,{AB})を計算することにします。そして記事の類似度はそれぞれのタームベクトルxAとxBのコサイン類似度を計算することで行います:

見出し語と類義語候補の類似度Sの計算

見出し語と類義語候補の類似度Sの計算

ただし、{AB}=ΦならS*=1とします。ここでタームベクトルxは各タームの重みwを使って次のようにします:

ここで重みwは:

類似ならCSVファイルに(tA,tB)を出力

以上より計算したS*が適当な閾値より大きいときは、見出し語tAと類義語候補tBが類似しているので、CSVファイルに(tA,tB)を出力します。

獲得した類義語知識の例

本システムにより、閾値0.002としたとき、およそ85万項目の日本語Wikipediaから約1万1千件の類義語知識が獲得できました。実際に獲得した類義語知識を以下に示します:

ドラゴンクエスト, ドラクエ
FM TOWNS, FTOWNS
フリーソフトウェア, フリーウェア
主要国首脳会議, 主要国会議
OSI参照モデル, OSIモデル
File Transfer Protocol, FTP
Objective Caml, OCaml
Domain Name System, DNS
User Datagram Protocol, UDP
スーパーマリオブラザーズ, スーマリ
スーパーファミコン, スーファミ
スラッシュドット, スラド
ワードプロセッサ, ワープロ
Read Only Memory, ROM
北海道大学, 北大
国際連合, 国連
World Wide Web, WWW
メモリースティック, メモステ
Document Object Model, DOM
Local Area Network, LAN
光磁気ディスク, 光ディスク
:

他のコーパスへの応用

本稿では日本語Wikipediaを例に取り上げ、実際に「原型語ー略語」のペアを取り出すことを試みましたが、冒頭でご説明したような「辞書型コーパス」であれば日本語Wikipediaに限らず用いることができます。具体例として、次のようなコーパスが考えられるでしょう:

  • 「現代用語の基礎知識」や「百科事典」のようなよく整備された電子辞書。
  • 「医療用語辞典」のようなドメインに特化した電子辞書があれば、特定ドメインの類義語知識が高効率/高品質に取得できるでしょう。
  • 製造業など企業内で整備している商品カタログや商品一覧データ。
  • ECサイトの「商品名」とその「説明」のデータ。
  • ECサイトの「商品名」と購入者による書き込み「コメント」欄のデータ。コメントが活発に書かれるサイトでは、購入者による「生きた」「現在進行形の」略語知識が取得できます。

検索エンジン×自然言語処理/機械学習

ロンウイットでは、お客様が検索エンジンLucene/Solrを「より便利に!」「よりかしこく!」活用し、さらには「より楽に!」運用していただけるよう、NLP(自然言語処理)やML(機械学習)の技術をLucene/Solrと組み合わせて活用する提案活動を行っています。

ご興味がございましたら、お気軽にお問い合わせください!

参考資料

これまでNLP/MLに関するコンサルティングサービスで使用した資料の一部をご紹介いたします。


KandaSearch

KandaSearch はクラウド型企業向け検索エンジンサービスです。
オープンAPIでカスタマイズが自由にできます。

  • セマンティックサーチ

    人間が理解するように検索エンジンがテキストや画像を理解して検索できます。

  • クローラー

    検索対象文書を収集するWebクローラーが使えます。

  • 簡単操作のUIと豊富なライブラリー

    検索や辞書UIに加え、定義済み専門用語辞書/類義語辞書やプラグインがあります。

  • ローコードで低コスト導入

    検索UIで使い勝手を調整した後、Webアプリケーションを自動生成できます。

セミナー

企業が検索エンジンを選定する際のポイントから、
実際の導入デモをお客様ご自身でご体験!