FastTextは、FacebookのAI Research(FAIR)チームが2016年に公開した、オープンソースのテキスト分類および単語ベクトル学習ライブラリである。従来のWord2Vecなどと異なり、単語を文字n-gram(サブワード情報)の集合として表現することで、未知語や形態的に豊かな言語に対しても頑健なベクトル表現を生成できる点が特徴である。軽量で高速な学習推論が可能なため、大規模テキストデータ分類タスクや類似度計算に広く利用されている。

1.1 開発の経緯

FastTextは、Facebookが自然言語処理効率化と精度向上を目的として開発した。2015年頃に登場したWord2Vecが単語レベルの分散表現焦点を当てていたのに対し、FastTextは文字レベルの情報を組み込むことで、特に形態的変化の多い言語(例:フィンランド語、トルコ語)や新語・未知語への対応を強化した。FAIRチームのMikolovらが中心となり、2016年に論文「Enriching Word Vectors with Subword Information」で発表され、同時にオープンソースとして公開された。

1.2 Word2Vecとの比較

Word2Vecは単語を最小単位としてベクトル化するが、FastTextは各単語を文字n-gramの集合として分解する。これにより、Word2Vecでは未知語に対して適切なベクトルを生成できないのに対し、FastTextはサブワード情報から未知語のベクトルを合成できる。また、学習速度はWord2Vecと同程度に高速でありながら、分類精度や形態的類似性の捉え方で優位性を示す。ただし、Word2Vecに比べてメモリ使用量が増加する傾向がある。

FastTextの中核技術は、サブワード情報の導入と効率的な学習アルゴリズムにある。

2.1 サブワード情報(文字n-gram)

FastTextは単語を文字n-gram(部分文字列)の集合として扱う。例えば「apple」という単語の場合、3-gramなら「app」「ppl」「ple」などが抽出される。これにより単語内部の形態的なパターンを学習する。

2.1.1 単語ベクトルの構成方法

各文字n-gramに対応するベクトルを学習し、単語全体のベクトルはその単語に含まれるすべての文字n-gramベクトルの平均として計算される。単語そのもののベクトルも別途学習され、これらを統合することで最終的な単語ベクトルを得る。

2.1.2 未知語への対応

未知語が入力された場合、その単語に含まれる文字n-gramベクトルを平均することで未知語のベクトルを合成する。これにより、学習データに存在しない単語でも、形態的に類似した既知語の情報を活用したベクトル表現が可能となる。

2.2 階層的ソフトマックスとネガティブサンプリング

学習の効率化のために、FastTextは階層的ソフトマックスとネガティブサンプリングという2つの手法を採用する。階層的ソフトマックスは二分木を用いて出力クラス数を対数オーダーに削減する。ネガティブサンプリングは、正例と少数の負例だけをサンプリングして更新することで計算量を低減する。これらにより、大規模語彙や多クラス分類でも高速な学習が実現される。

2.3 テキスト分類のモデルアーキテクチャ

FastTextのテキスト分類モデルは、単語ベクトルの平均を特徴量として線形分類器に入力するシンプルな構造を持つ。

2.3.1 線形分類器とソフトマックス

入力テキストに含まれる全単語のベクトル(またはサブワードベクトル)の平均を計算し、その平均ベクトルをソフトマックス分類器で各クラスにマッピングする。隠れ層を持たないため、深層学習モデルよりも計算コストが極めて低い。

2.3.2 特徴量の高速計算

特徴量の平均化は、単語ベクトルの加算と除算のみで実現される。また文字n-gramを事前にハッシュ関数でID化することで、メモリ消費を抑えつつ高速なルックアップを可能にしている。

FastTextは主に単語ベクトル学習とテキスト分類の2つの機能を提供する。

3.1 単語ベクトルの学習と生成

テキストコーパスから単語ベクトルを学習する機能を持つ。学習済みモデルは、類似語検索や単語間の意味的関係の分析に利用できる。

3.1.1 事前学習済みモデル(例:crawl-300d-2M)

Facebookは、Common Crawlなどの大規模コーパスから学習した事前学習済みモデルを公開している。代表的なものにcrawl-300d-2M(300次元、200万語彙)があり、多言語対応版も提供されている。これらをダウンロードしてすぐに利用可能である。

3.2 テキスト分類

教師あり・教師なしの両方でテキスト分類が行える。

3.2.1 教師あり分類

ラベル付きデータを用いて、ニュース記事のカテゴリ分類や感情分析などのタスクを高速に学習する。線形モデルであるため、ディープラーニング手法に比べて訓練時間が短い。

3.2.2 教師なし分類(クラスタリング)

学習した単語ベクトルやテキストベクトルに対して、k-meansなどのクラスタリング手法を適用することで、ラベルなしデータの分類が可能である。

3.3 類似度計算と意味検索

単語や文書のベクトル間のコサイン類似度を計算することで、意味的に類似したテキストの検索や、質問応答システムでのレトリーバルに利用される。高速な推論が可能なため、大規模なコーパスにも適用できる。

FastTextは、その高速性と精度のバランスで広く評価されている。

4.1 ベンチマークテスト

公式のベンチマークでは、テキスト分類タスクにおいて、Word2Vecの平均ベクトルを特徴量とした線形分類器や、当時の深層学習モデル(CNN、LSTMなど)と比較されている。

4.1.1 分類精度と速度の比較(Word2Vec、ディープラーニング手法との比較)

多くのデータセットで、FastTextの分類精度は深層学習モデルに数%の差で迫りながら、学習時間は数十分の一から数百分の一に抑えられる。Word2Vecベースの分類と比較しても、サブワード情報の恩恵により特に形態的に複雑な言語で高い精度を示す。

4.2 多言語対応の優位性

サブワード情報の導入により、日本語、中国語のような表意文字や、アラビア語、トルコ語のような膠着語においても、未知語への対応や形態素解析なしでの処理が可能となる。事前学習済みモデルも157言語に対応しており、多言語自然言語処理のタスクで広く利用されている。

FastTextはC++で実装され、Pythonバインディングも提供されている。

5.1 インストール手順

5.1.1 ソースコードからのビルド

公式GitHubリポジトリからソースコードをクローンし、makeコマンドでビルドする。C++11以上のコンパイラとmakeが必要であり、LinuxおよびmacOSでの動作が推奨される。

5.1.2 pipによるインストール(Pythonバインディング)

Python環境ではpip install fasttextでインストールできる。C++のビルドが自動で行われるため、ユーザーは手軽に利用開始できる。

5.2 基本的な使い方

5.2.1 単語ベクトルの学習コマンド例

C++のコマンドラインから./fasttext skipgram -input data.txt -output modelと実行すると、skip-gramモデルで単語ベクトルを学習できる。Pythonではmodel = fasttext.train_unsupervised('data.txt')で同様の処理が可能である。

5.2.2 テキスト分類の訓練と予測

教師あり学習では、__label__クラス名 テキストの形式のデータを用意し、./fasttext supervised -input train.txt -output modelで学習する。予測は./fasttext predict model.bin test.txtで行う。

5.3 パラメータチューニング

5.3.1 学習率、次元数、n-gram範囲の調整

主なパラメータとして、学習率(lr, デフォルト0.1)、ベクトルの次元数(dim, デフォルト100)、n-gramの最小・最大長(minn/maxn, デフォルトはそれぞれ3,6)が挙げられる。タスクに応じてこれらの値を調整することで、精度と速度のバランスを最適化できる。

FastTextには以下のような制限が存在する。

6.1 文脈情報の欠如

単語ベクトルは文脈を考慮せず、単語の出現位置や周辺単語の影響を直接モデル化しない。そのため、多義語の区別や文脈依存の意味理解には不向きであり、BERTなどのTransformerモデルに性能で劣る場合がある。

6.2 メモリ使用量と次元のトレードオフ

サブワード情報を保持するため、同じ語彙数のWord2Vecと比較してメモリ消費量が大きくなる。特にn-gramの範囲を広げると指数関数的にメモリが増加するため、次元数とn-gram範囲の選択には注意が必要である。

FastTextは、その後も様々な派生ライブラリや応用事例を生み出している。

7.1 類似ライブラリ(StarSpace、StarSpaceなど)

Facebookが公開したStarSpaceは、テキストに限らずグラフやマルチモーダルデータにも適用可能な汎用埋め込み学習ライブラリであり、FastTextの拡張版とも位置づけられる。また、同じFAIRチームが開発したLASERやMUSEなども、多言語埋め込みの分野でFastTextの考え方を発展させている。

7.2 産業応用事例(レコメンド、スパム検出)

FastTextの高速性と軽量性を活かし、大規模なレコメンデーションシステムでのアイテム類似度計算や、リアルタイムスパム検出フィルターに組み込まれている。また、ソーシャルメディア上の投稿分類やニュース記事のトピック自動付与など、実用的な自然言語処理システムの基盤として広く採用されている。