Pythonで秒速の機械学習「FastText」を分類で簡単に使う方法


注意

僕に処理が悪いのかクソ性能です。
不均衡データ & 15項目で分類したテスト結果が以下になります。
(3572, 0.524636058230683, 0.524636058230683)

おそらく次元削減をするなど項目を減らせば飛躍的に精度が上がるかと思います。

環境構築

  • ※pipでインストールするとエラーが起こります。
    そのため、git cloneします。
git clone https://github.com/facebookresearch/fastText.git
cd fastText
make
  • ※M1チップで"make"コマンドが打つと以下のエラーが出ました。
c++ -pthread -std=c++11 -march=native -O3 -funroll-loops -DNDEBUG -c src/args.cc
clang: error: the clang compiler does not support '-march=native'

makeを実行したディレクトリにあるMakefileに入り、
-march=native を消して -mcpu=apple-m と書き換えたらうまく行きました。

データがある場合の使い方

学習するデータはこのように格納しておく

model.txt

label1 にんじんしりしり
label1 にんじんスープ
label1 にんじんチップス
import sys
import fasttext as ft

# 学習モデルを作成
model = ft.train_supervised(input="model.txt")

# モデルを保存
model.save_model("model.bin")

モデルを使ってカテゴリを予測

そうすると、モデルを使ってカテゴリを予測できるようになります。

model.predict("にんじんジュース")
(3572, 0.524636058230683, 0.524636058230683)

参考図書

Pythonの基礎が怪しい人向け

スッキリわかるPython入門

https://amzn.to/3qJWGfP

機械学習がわからない人向け

Pythonの基礎でも紹介した、スッキリわかるPython機械学習
この本で機械学習を勉強しました。

https://amzn.to/3wLswwl
scikit-learn 20本ノック (いまにゅさんの動画)
https://youtu.be/Fbynk_9TfXg
  • Kaggleで勝つ技術

https://amzn.to/3JKVccu
僕はデータの前処理や学習モデルを作っているとき、「???」となることがあった。
そのとき読んでクリアできた。