post Image
fastTextのための前処理と使い方

はじめに

Facebookが開発したfastText。
今までの自然言語ツールよりも高速で学習や分類をするらしいです。(この記事は速度比較ではありません)
以前は単語極性辞書を使って、文に含まれている単語を辞書と照らし合わせ、そのスコアの平均を出すという手法でやってみたことがあります。しかしこの方法だと「①この商品は値段が高い」と「②この商品は精度が高い」が同じようなスコアになってしまう可能性があります。
(①は値段が高いためネガティブな発言であるのに対し、②は精度が高いのでポジティブな発言)
fastTextはこれとは異なる手法であり、気になったので使ってみました。
今回は、分類です。
テキストの分類ができると、レビューの解析や、メールの仕分けなどが行えます。

実行環境

  • PCスペック
    • OS : Ubuntu 16.04
    • CPU : core i7 7700
    • GPU : GeForce GTX 1080
    • RAM : 32GB
  • ソフトウェアバージョン
    • python(Anaconda) => 3.6.1
    • fasttext => 0.8.3
    • pyknp => 0.3

用意するもの

  • 教師データ
  • 分類したいデータ

前処理

fastTextは以下のようなフォーマットでなければ読み込んでくれません。
__label__*, 今日 は 良い 天気 です 。
※「*」にはクラスナンバーを入れてください。

つまり、もしポジティブとネガティブの二値分類をしたい場合は、__label__1,__label__2,の二種類が必要になります。

私はまずそれぞれのファイルを作成し、最後に1つにまとめました。
では早速、用意した教師データを上記のフォーマットにしましょう。

手順① 形態素解析(分かち書き)

今回は形態素解析ツールはJUMAN++を使用します。
この他にもMeCabなどがよく使われています。

wakati.py
def make_wakati():
    morps = pyknp.Jumanpp().analysis(sentence).mrph_list()
    wakatis = [m.midasi for m in morps]
    return " ".join(wakatis)

上記で分かち書きしたものをファイル出力しておきましょう。

手順② ラベル付け

分かち書きした文の頭に__label__*,を追加します。
※「*」には適切な数値を入れてください。

sed -i -e "s/^/__label__*,/" ファイル名 

手順③ ファイルを1つにまとめる

__label__1,__label__2,が文頭に書かれたそれぞれのファイルを1つにまとめます。
ファイル名はmodel.txtとしました。

cat ファイル1 ファイル2 > model.txt

前処理は終了です!

fastTextの使い方

学習(model生成)

先ほど作成したmodel.txtをfastTextに学習させましょう。
学習は簡単でsupervisedで読み込むだけ。
以下のコードで出力されるのはmodel.binです。

model.py
import fastText as ft
ft.supervised('model.txt', 'model')    

分類

classifier.py
def predict(wakati):
    classifier = ft.load_model('model.bin')
    estimate = classifier.predict_proba([wakati], k=2)
    print(estimate)

感想

以上で簡単に分類ができます。
今回はデータがある前提で書きましたが、教師データを集める場合は、
TwitterAPIなどを利用するとすぐに集まりそうな気がします。
注意点として、Twitterで取得した場合、キレイな文章でないことが多いと思います。(文末に「。」がなかったり、正確な日本語になっていない)
形態素解析をする際に、記号などが含まれているとうまくいかないので、予め日本語のみを抽出するか、スペースや記号等を削除する必要がありますね。

ありがとうございました。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。