【Python】fastTextをWindows環境で使いたい!(dll版)

fastTextを是非使ってみたい!と思い、やってみたのですがインストールになかなか苦労しました。
公式と少し異なる方法で、dll化して解決できました。
こんな方法もあるよ、ということでTipsを残したいと思います。
同じハマり方をした方の助けになれば幸いです。

少しfastTextについて補足したいと思います。
fastTextはFacebook AI Researchが開発した高速で効果的なテキスト分類や単語埋め込みツールです。
テキスト処理のための強力なツールで、単語や文章をベクトル化してコンピュータが理解しやすくします。
特筆すべきは、未知の単語にも対応できる点です。
また、多言語のテキストにも適用可能で、学習が迅速です。
FastTextは簡単にモデル構築ができ、テキスト分類や類似性検出などに優れています。
自然言語処理に興味のある方に、使いやすく効果的なツールです。

インストール、記事作成にあたり、下記サイトを参考にさせて頂きました。
先人の皆様に感謝申し上げます。

Qiita
Windows10でfastTextを使うためにやったことメモ - Qiita はじめにwindows10でfastTextを使用するため環境を整えようとしたところ、いろいろエラーが出て、いくつかの記事をはしごしました。まとまった記事があっても良いな~と思...

上記サイトの方法がおそらくスタンダードな解決方法です。
GitHubなどに記載の公式方法に則っています。

しかし、私の環境ではどうしてもインストールできませんでした。
モデル作成に利用できるwikiextractorに関してもなのですが、fastTextはあまりwindowsと相性が良くありません。
導入に手こずる方が多いようです。

私も導入にガッツリ引っかかったのですが、
別の方法として、ソースからビルドしてdllを作成することで解決できました。
fasttextの利用時は、同じ階層にdllを置いてインポートします。
環境はWindows10です。プロキシ制限が掛かってGitHubが使えない環境でも対応可です。

やること
・c++ビルドツールのインストール
・githubからfasttextを入手
・cmakeのインストール
・ビルド
・fasttext-wheelのインストール
・fasttext.dllを使って実行

それでは順に見ていきましょう!

目次

c++ビルドツールのインストール

ビルドするために、c++ビルドツールをインストールします。
インストーラからC++ビルドツールを選択してインストールします。
次に環境パスを設定します。

Microsoft C++ Build Tools
https://visualstudio.microsoft.com/visual-cpp-build-tools/

インストール方法、および環境パスの設定方法は、次のサイトが参考になります。

Qiita
Windows10でfastTextを使うためにやったことメモ - Qiita はじめにwindows10でfastTextを使用するため環境を整えようとしたところ、いろいろエラーが出て、いくつかの記事をはしごしました。まとまった記事があっても良いな~と思...

GitHubからfastTextを入手

GitHubからfastTextを入手します。
作業ディレクトリを用意し、fastTextのソースをダウンロードします。
次のどちらの方法でも大丈夫です。
・git clone
・zipファイルをダウンロードして解凍

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

git cloneの例を示します。
Developper Command Prompt for VS 2019から作業フォルダへ移動し、次を実行します。

git clone https://github.com/facebookresearch/fastText.git
cd fasttext

zipファイルの場合は解凍したフォルダに移動しておきます。

cd (解凍したフォルダ名)

ここで、公式の方法では次を実行します。

pip install .

ところが、私の環境では次のエラーになりました。

C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x86\\cl.exe' failed with exit code 2
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for fasttext
  Running setup.py clean for fasttext
Failed to build fasttext
ERROR: Could not build wheels for fasttext, which is required to install pyproject.toml-based projects


参考サイトを見て、ビルドツールをインストールし、環境パスも通っています。
しかし、ビルドツールエラーになる。pybind11をインストールしても解決せず。
困った。。。

ということで、別の方法からアプローチします。

cmakeのインストール

追加のビルドツールとして、cmakeをインストールします。
公式サイトからインストーラをダウンロードして実行します。

cmakeの公式サイト
https://cmake.org/

こちらのサイトを参考にしてインストールします。

次の作業からは、
Developper Command Prompt for VS 2019から実行します。
標準のコマンドプロンプトだと最後のビルドがうまくいきません。

ビルド

ここまでのビルドツールのインストール、ソースのダウンロードがうまくいっていれば、
ビルドが実行できるようになっています。
ダウンロードしたソースのディレクトリに移動して、ビルドしましょう!

mkdir build
cd build
cmake ..
cmake --build . --config Release


まず、「build」という名前のディレクトリを作成します。
その後、作成したディレクトリに移動します。
次に、CMakeというビルドツールを使用して、プロジェクトのビルド設定を行います。
「cmake ..」は、親ディレクトリにあるCMakeLists.txtという設定ファイルを基にビルド設定を生成します。
最後に、「cmake –build . –config Release」は、ビルドプロセスを実行します。
プロジェクトのコードをコンパイルし、実行可能なプログラムを生成します。

次のフォルダにdllファイルが生成されます。

build
|+fasttext.dll

実行環境によっては、こちらにあるかもしれません。

build
|+Release
    |+fasttext.dll

これでソースからdllをビルドすることができました。
実行まであと少しです!

fasttext-wheelのインストール

fasttextは何せWindowsではちょっと使いづらくなっています。
そこで対策が色々作られています。

fasttext-wheelもそのひとつです。
Facebookが開発した自然言語処理ライブラリであるfastTextのPythonバインディングの一つです。
PythonプログラムからfastTextの機能を簡単に利用できるようにするためのパッケージであり、
ユーザーが簡単にfastTextを導入して活用することができます。
テキスト分類、単語埋め込み、テキストクラスタリングなどのタスクに応用され、
テキストデータの特徴表現を効果的に扱う際の強力なツールとして広く利用されています。

こちらのインストールはいつもどおりです。

pip install fasttext-wheel

これでいよいよ準備が整いました!

fasttext.dllを使って実行

さっそく作成したfasttext.dllを使ってみましょう!
下記のサイトから「wiki.ja.zip」をダウンロードし、解凍した「wiki.ja.bin」を使います。

fastText wiki
https://fasttext.cc/docs/en/pretrained-vectors.html

ファイル構成はこのようになります。
実行したいpythonプログラムと同じ階層にdllと学習済みモデルを配置します。

fasttext
|+ fasttext.dll
|+ wiki.ja.bin
|+ sample.py

次のサンプルコードを実行してみましょう!

import fasttext

# 学習済みのFastTextモデルをロード
model = fasttext.load_model('wiki.ja.bin')

# 連想したい2つの単語
keyword = "ブログ"

word_vector = model.get_word_vector(keyword)
similar_words = model.get_nearest_neighbors(keyword, 10)

# 結果を表示
print(f'"{keyword}"に類似した単語:')
for w in similar_words:
    print(f'- {w[1]} (類似度: {w[0]:.4f})')

実行結果がこのようになります。
無事、dllからimportされました。
「ニュース」から類似する単語を推定するとこんな感じです。

こちらの記事を参考に日本語wikiからモデル作成してみました。
次のようになりました。

ものづくりのブログ
fasttext で Wikipedia の情報を学習させみて、今年1年を振り返る中で浮かんだ言葉の類似語を探してみる(N... 2020年もあともう少し、 今年は世界中が大変な1年でした。今年は新型コロナウィルスとかあつもりとかアマビエとか鬼滅の刃とかいろいろあるけど、 これらの言葉がどんな言...

結構、結果が変わりますね!
FNNが消えたあたり、日本語wikiベースっぽさを感じます。
ここまでできていれば、後はモデル如何で希望する単語推定ができるようになるのではと思います。

少なくとも、これで無事にWindows10環境でソースからビルドしてdllを作成し、fasttextの利用が可能になりました。
モデルの違いが面白く、試し甲斐がありそうですね!

今回は以上となります。
この記事がお役に立てれば幸いです。

それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次