fastText は単語埋め込みやテキスト分類のための定番NLPツールです。
しかし導入でハマるという声をよく聞きます。
pip install fasttext
しようとするとerror: command 'gcc' failed with exit status 1
のようなエラーを吐いてインストールに失敗する場合があります。
リポジトリをクローンしてインストールしたり conda を使うといった方法でインストール自体は可能なのですが、 poetry や requirements.txt でシンプルに管理したかったり(Dockerを使う場合は) Dockerfile にごちゃごちゃ書きたくなかったりするので、pip 一発で入れられたほうが嬉しいシーンがあります。
原因
インストールに必要な GCC のバージョンが古い(or 入っていない)ことが原因です。fastText ではビルド時に C++14 の機能を使うため、GCC 6.1 以降が必要になります。
gcc --version
で6.1 未満の場合やそもそもコマンドが見つからない場合、アップデート/インストールしましょう。
centos7 には GCC 4.x が入っていたり, MacOS は初期状態で C(++)コンパイラが無効なのでこの現象に遭遇するようです。
CentOS
centos の人は下記のコマンドでより新しい gcc が利用できます。
yum install centos-release-scl
yum install devtoolset-8
scl enable devtoolset-8 -- bash
MacOS
MacOS Mojave以降で、Cコンパイラが未インストールの場合、gcc --version
すると
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
のようなエラーが出るので、ターミナルで
xcode-select --install
をして開発者ツールをインストールし、 gcc, g++ のパスが通るようにしてください。
補足
- pip でのインストールではこのようなエラーが生じる場合があるので、リポジトリを clone してインストールする方法を推奨する記事をよく見ます。
- docker にインストールする場合にもコンパイラが必要になります。slim イメージだと gcc が入っていなかったりするので注意してください。
- 同じ現象でハマっている人をよく見るので公式ドキュメントのインストールガイドい書いておいてほしいですね......
参考
以前は そもそも pip でインストールすること自体に不具合があったようですが、こちらの方は fasttext v0.9 で修正されています。
fastTextをpipインストールしてはいけない話(2019/4/11現在、pyenv環境)
言及されている Issue
https://github.com/facebookresearch/fastText/issues/1052