エンジニアの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/
学習をおこなうまでに次のステップを踏んでいます。
- Wikipediaのデータのダウンロード
- Wikipediaデータから文章の抽出
- Mecabによる文章の形態素解析、クレンジング
- fastTextによる学習
fastTextの学習時のパラメータは、単語のベクトルの次元を200、epochを10とし、ほかはデフォルトパラメータを使用しています。
fastTextによる未知語の類似語検索
未知語に対する類似語を学習データに含まれる単語から探してみます。
まずは機械学習でお馴染みの”勾配降下法”で検索した結果です。下のテーブルには”勾配降下法”に近い順に上位5つの単語が示されています。
単語 | 類似度 |
---|---|
確率的勾配降下法 | 0.894 |
最急降下法 | 0.796 |
無限降下法 | 0.784 |
ガウス=マルコフの定理 | 0.759 |
ブッフベルガーアルゴリズム | 0.757 |
この結果をみると、未知語に対する検索がなかなか上手くできていることがわかります。4番目も5番目も数学の話となっています。
次に”電子制御工学”という単語を与えてみます。
単語 | 類似度 |
---|---|
制御工学 | 0.837 |
電磁波工学 | 0.780 |
プロセスシステム工学 | 0.765 |
反応工学 | 0.765 |
マイクロ波工学 | 0.765 |
“工学”という単語が強く影響してきていることがわかります。反応工学以外は電子制御寄りの感じも受けます。
最後に”LU分解”という単語で検索してみます。
単語 | 類似度 |
---|---|
オルセリン酸 | 0.652 |
ジホスホシチジル | 0.651 |
オキソコハク | 0.650 |
デヒドロキナ | 0.650 |
オキソフラン | 0.649 |
残念ながら、似ている単語は特にないという結果になりました(ちなみにQR分解や特異値分解という単語が学習データに存在します)。また、類似度は最大でも0.65程度なので、”勾配降下法”や”電子制御工学”の場合よりも小さくなっています。
良くない結果の原因として、”分解”という単語の影響が小さく、一方であまり意味を持っていない”L”や”U”のアルファベットの影響が強く出てしまったことが考えられます。
終わりに
今回はfastTextで未知語に対する類似語の検索を試してみました。
どういう意味で類似であって欲しいかというところにも依りますが、未知語に類似した単語を検索するという手法は役に立つ場面が色々考えられるのではないでしょうか。