電脳ミツバチのコンピュータ広報室

銀座の屋上菜園を耕しています。コンピュータ畑も耕します。

Facebookの公開した人工知能fastTextを試してみた

スポンサーリンク

みなさんこんにちは。最近はセキュリティコンテストCTFにはまっていて国内外の様々なコンテストに手あたり次第参戦しています。団体戦だと大体上位6%〜10%、個人だと上位10%くらいの成績です。

 

さて、2016/8/18にfacebookが新しい人工知能のfastTextを公開したのでとりあえず触ってみました。なんでも今まで5日かかっていた言語処理が10秒で終わるそうです。

jp.techcrunch.com

 

fastTextとは何ぞ?fastTextで出来ること 

主に2つあります。

  • 単語をベクトル表現にする

  • テキストのクラス分け

の2つです。

テキストのクラス分けは何となく意味が分かるかもしれませんが単語のベクトル表現とはなんぞや?となりますよね。単語をベクトル(数字の組み合わせ)で表すことによってコンピュータがこういう意味なんだなということを把握するために使います。

こうすると何が嬉しいのかというと

「王様」- 「男」+ 「女」= 「女王」

「パリ」- 「フランス」+ 「日本」= 「東京」

などの計算ができるようになります。

詳しくは下記リンクをご覧ください。

deepage.net

単語のベクトル表現例

 f:id:computermonkey:20160913221700j:image

 

今流行りのディープラーニングはベクトルで計算して分類しますので単語がベクトルで表せると都合がよいのです。出来たものをディープラーニングでクラス分けします。

 

流れとしてはベクトル化→分類→推薦といった手順になります。ベクトルが似てるものを分類して商品を推薦するといった形ですね。

もともと人工知能fastTextはfacebookがニュースフィードからスパムを分類するために作ったともいわれます。

 

 具体的に見てみましょう。

 

まずはgithubから該当ソースを落としてビルドします。OSはUbuntu推奨です。30Gくらいあったほうが良いです。

f:id:computermonkey:20160913175611j:image

f:id:computermonkey:20160913175625j:image

f:id:computermonkey:20160913175644j:image

# apt-get update

# apt-get install git g++ make python

# git clone https://github.com/facebookresearch/fastText.git

# cd fastText

# make

 

ビルドができたら「fasttext」というシェルが出来てますね。このひとがいろいろやってくれます。

f:id:computermonkey:20160913181815j:image 

 

 

  • 単語のベクトル化 

 

では最初に単語をベクトル表現してみましょう。適当にMensa InternationalのwikipediaをコピペしたものをUTF-8でテキストにしてmensainternational.txtとして保存しました。

 

 

では辞書ファイルに保存しましょう。

 

./fasttext skipgram -input mensainternational.txt -output mensa

 

これでmensa.binというファイルが出来ました。skipgramというのは単語をベクトルに変える時の最新のアーキテクチャのことです。ご興味ある方は下記を参照してください。

【論文シリーズ】CBOWとSkip-gramについて - Qiita

 

 

そして下記のコードを打つと、

 

 ./fasttext print-vectors mensa.bin < mensainternational.txt

 

こんな感じでコンピュータが認識します。

 f:id:computermonkey:20160913221759j:image

 

 

最初からフェースブックが用意してくれている単語のベクタ表現群は下記のコマンドでもらえます。

 

(なお、シェルの実行にはnumpyが必要なのでない場合は

apt-get install python-numpy

でインストールしてください)

 ./word-vector-example.sh

 

と打てば勝手に大量のデータを学習してくれます。

 

 

 

  • テキストのクラス分け 

 

クラス分けのほうをやってみましょう。facebookが先に用意してくれているサンプル結果は下記のシェルからもらえます。

 

./classification-results.sh

 

yelpやyahoo_answerやamazonのレビューをクラス分けしてくれます。

amazonのレビューなんかは6割であんまりですがagnewsなんかは非常に高精度で分類できていますね。amazon review polarityは評価の平均の3を飛ばして評価が高い4,5と低評価の1,2だけを集めたものでそうすると分類精度が跳ね上がるのは面白いですね。

 f:id:computermonkey:20160913180110j:image

 

さて、ここでアマゾンのレビューを評価してもらいましょう。

単純にテキストにgreat,good,normal,badと書かれたテキストをそれぞれgreat.txt,good,txt,normal.txt,bad.txtとして保存します。

f:id:computermonkey:20160913191710j:image

f:id:computermonkey:20160913191721j:image

 

評価コマンドは下記のようになります。

 ./fasttext predict result/amazon_review_full.bin great.txt

(デフォルトではresultフォルダに結果のbinファイルが置かれる

 

f:id:computermonkey:20160913191736j:image

ちゃんと5段階で評価してくれていますね。

 

それでは実際のamazonレビューをとってきてテキストを評価してもらいましょう。

f:id:computermonkey:20160913191751j:image

f:id:computermonkey:20160913191801j:image

 

 

無事評価5のレビューで5をいただきました。

では評価2のレビューはいかがでしょうか?

 

f:id:computermonkey:20160913191808j:image

f:id:computermonkey:20160913191817j:image

 

ちゃんと評価2のクラス分けに分類できてますね。

 

 以上になります

 

これから人工知能言語学習してみようとする方には便利な道具になると思います。

今のところ大容量のテキストを分類する方は巨大なECサイトを運営しているとか限定されるかもしれません。

しかし、これからの強いAIの流れとして

画像認識処理→感情概念理解→自然言語理解→ネットの知識吸収

の順で進んでいこうとしているようですのでいづれ重要な部分を占めるようになると思います。今のうちに少し触っておくとよいかもしれません^^

 

 

 

次回はRSA暗号の解読の仕方でも書いてみましょうかね。

ではまたー^^

 

 

 

 

 

こちらの文章もおすすめです

deepage.net