誰でも簡単に自然言語処理ができるfastTextとは?「Mac」-「Apple」+「Microsoft」= ?言葉の足し算できますか?

「Mac」-「Apple」+「Microsoft」= ?

このような言葉の足し算をコンピューター上でできますか?私たち人間がこのような問題を考えるときは、なぞなぞを考える要領で考えれば解くことができます。

しかし、この問題をコンピューターに解かせようとした時、どのようにすればいいのか戸惑ってしまう方も多いのではないでしょうか。そんな人にオススメなのが「Facebook AI Research」というFacebookの人工知能研究所が開発した「fastText」です。

「fastText」を用いれば、誰でも簡単に自然言語処理ができるため、今回はこちらをご紹介します。


fastTextとは

「fastText」とは2016年にFacebookが公開した自然言語処理ライブラリです。自然言語処理とは、人間が日常的に使っている言葉をコンピューターに処理させる一連の技術のことを指します。

fastText

「fastText」はGoogleが開発した「Word2Vec」というライブラリを基に作られており、「Word2Vec」では単語をベクトル化(数値化)することによって単語間の距離を計算し、コンピューター上での言葉の処理を可能にしています。

「fastText」もこの単語のベクトル化のアイデアを用いており、100~300次元のベクトル(100~300個の数字を並べたもの)で表現されています。そして、「fastText」はこの単語のベクトル表現の生成が高速化され、さらにはテキストの分類も高速で行えるというのが特徴です。


fastTextを実際に使ってみる

必要な手順はたったの4つです。

  1. GithubからfastTextをクローンする
  2. 学習させるテキストデータを準備
  3. テキストデータを学習させてモデルを作成
  4. 作成したモデルを活用

このたった4つのステップで「fastText」を使うことができ、自然言語処理が行えるようになります。では、1つずつ見て行きましょう。

1:GitHubからfastTextをクローンする

「fastText」は全て下記のGithubにて公開されています。

GitHub:https://github.com/facebookresearch/fastText

「fastText」の導入に必要なコマンドは以下のたったの3行のみです。

こちらを「fastText」を使用したいディレクトリで実行すれば完了です。

2:学習させるテキストデータを準備

次に「fastText」でモデルを作成するために学習させるテキストデータを準備します。テキストデータは日報やメールなど自前で準備してもいいですし、それらの用意が難しい場合には手に入りやすいデータセットとして、Wikipedia、青空文庫、Twitterなどがあります。

このようなネット上で公開されているテキストデータをデータセットとして準備するのも良いでしょう。しかし、「fastText」のホームページにはWikipediaのテキストデータと学習済みのモデルが公開されています。したがって、これを使用することにより、最も時間のかかるテキストデータの準備とそのテキストデータの学習をすることなく、「fastText」を使用することができます。

こちらのホームページから「Japanese: bin+text」を先ほど準備した「fastText」のディレクトリ内にダウンロードしましょう。今回は、こちらで公開されている日本語版Wikipediaの学習済みモデルを使用します。こちらの学習済みモデルを活用する場合は「作成したモデルを活用」までお進みください。

3:テキストデータを学習させてモデルを作成

それでは先ほど準備したテキストデータを「fastText」で学習させて、モデルを作成します。

これで準備したテキストデータを元にモデルを作成することができます。

プログラムが終了すると、保存場所で指定したディレクトリにfile.binとfile.vecの2種類のファイルができています。file.binはテキストデータを学習させて生成されたモデルになります。file.vecは学習させたテキスト内の単語をベクトル化した値が格納されています。

ここまでで自分でテキストデータを準備して、モデルを作成するまでが完了しました。後は実践するのみです。

4:作成したモデルを活用

「fastText」はさまざまな活用方法があります。

そこで、今回はベクトル表現された単語の確認、単語の足し算をご紹介します。まずはベクトル表現された単語を見てみましょう。単語のベクトル表現を見るにはprint-word-vectorsコマンドを使用します。

例として“日本”という単語で実行してみましょう。

(20個の数値しか表示していませんが、実際はさらに数字が並びます。)

以上のように数字が並びました。これが「日本」という単語を数値化してベクトル表現されたものになります。このように言葉を数字に置き換えることでコンピューターが言葉を数値として扱えるようになり、単語同士の距離を計算することで言葉の足し算などが可能になります。

では、本題の言葉の足し算をやって見ます。言葉の足し算はanalogiesコマンドを使用します。analogiesコマンドは「A+B―C」のような形で言葉の足し算を行ってくれます。

実際にタイトルにある「Mac」-「Apple」+「Microsoft」を計算してみましょう。

この計算の結果、最も答えの可能性が高い言葉として「windows」となりました。このようにして言葉を数値のベクトルとして扱うことにより数値同士の足し算引き算が可能になるため言葉同士の計算が可能となるのです。


まとめ

機械学習に注目が集まる昨今で、このような自然言語処理の技術はスパムメールや迷惑メールの分類などさまざまな所に用いられています。

人工知能や機械学習について詳しくないという方でも、簡単に自然言語処理が体験できるため、是非一度「fastText」で遊んで見てください。そして、身近に、社内にあるテキストデータを使って何かに応用してみてください。