orizuru

つながる.見える.わかる IoTソリュ-ション

fastTextで未知語の類似語を探してみる

約 7 分
fastTextで未知語の類似語を探してみる

エンジニアのtetsuです。

単語のベクトル表現を得る手法といえば、ニューラルネットワークを用いたWord2vecが一番有名かもしれません。ただし単純にWord2vecを用いた場合には未知語のベクトル化ができません。これに対して、fastTextを用いると未知語に対してもベクトル化が可能になります。
今回はfastTextで未知語をベクトル化し、学習データに含まれる単語の中から類似しているものを探すということを試してみます。

fastTextとは?

fastTextはFacebookによって開発されているライブラリでGitHub上でソースが公開されています。
https://github.com/facebookresearch/fastText
このfastTextは高速に単語の分散表現を得ること(単語のベクトル化)と文の分類問題を解くことが可能です。今回に関しては前者の単語の分散表現を得る部分のみを使用していきます。

fastTextにおける学習のアルゴリズムは基本的にはWord2vecと同じようなものですが、違いはサブワードを使っていることです。
例えば、ある文の中で”IoT”と”AI”という単語が近くに存在する場合に、Word2vecでは”IoT”という単語の近くには”AI”という単語が存在しやすいのだと学習していきます。
一方でfastTextの場合には”IoT”という単語ではなく、”Io”や”oT”などといったサブワードに分割して学習がおこなわれます(各サブワードに対応したベクトルの和がもともとの単語のベクトルとなります)。このようにサブワードを学習に利用し、ベクトル化できるようにしているため、学習データに存在しない未知語に対してもベクトル化をすることが可能になっています。
手法の説明には端折っている部分も多々ありますので、詳細については次を参照して下さい。
https://arxiv.org/pdf/1607.04606.pdf

fastTextでの学習

今回はWikipediaの日本語記事をfastTextの学習データとして利用しました。データは次のページからダウンロードしています。
https://dumps.wikimedia.org/jawiki/20180620/

学習をおこなうまでに次のステップを踏んでいます。

  1. Wikipediaのデータのダウンロード
  2. Wikipediaデータから文章の抽出
  3. Mecabによる文章の形態素解析、クレンジング
  4. fastTextによる学習

fastTextの学習時のパラメータは、単語のベクトルの次元を200、epochを10とし、ほかはデフォルトパラメータを使用しています。

fastTextによる未知語の類似語検索

未知語に対する類似語を学習データに含まれる単語から探してみます。
まずは機械学習でお馴染みの”勾配降下法”で検索した結果です。下のテーブルには”勾配降下法”に近い順に上位5つの単語が示されています。

ここをタップして表示Close
単語 類似度
確率的勾配降下法 0.894
最急降下法 0.796
無限降下法 0.784
ガウス=マルコフの定理 0.759
ブッフベルガーアルゴリズム 0.757

この結果をみると、未知語に対する検索がなかなか上手くできていることがわかります。4番目も5番目も数学の話となっています。
次に”電子制御工学”という単語を与えてみます。

ここをタップして表示Close
単語 類似度
制御工学 0.837
電磁波工学 0.780
プロセスシステム工学 0.765
反応工学 0.765
マイクロ波工学 0.765

“工学”という単語が強く影響してきていることがわかります。反応工学以外は電子制御寄りの感じも受けます。
最後に”LU分解”という単語で検索してみます。

ここをタップして表示Close
単語 類似度
オルセリン酸 0.652
ジホスホシチジル 0.651
オキソコハク 0.650
デヒドロキナ 0.650
オキソフラン 0.649

残念ながら、似ている単語は特にないという結果になりました(ちなみにQR分解や特異値分解という単語が学習データに存在します)。また、類似度は最大でも0.65程度なので、”勾配降下法”や”電子制御工学”の場合よりも小さくなっています。
良くない結果の原因として、”分解”という単語の影響が小さく、一方であまり意味を持っていない”L”や”U”のアルファベットの影響が強く出てしまったことが考えられます。

終わりに

今回はfastTextで未知語に対する類似語の検索を試してみました。
どういう意味で類似であって欲しいかというところにも依りますが、未知語に類似した単語を検索するという手法は役に立つ場面が色々考えられるのではないでしょうか。

Leave A Reply

*
*
* (公開されません)