fastText (G検定)

fastText

1. 定義と概要

fastText とは、2016年にFacebook AI Research(現Meta AI)のピオトル・ボヤノフスキ(Piotr Bojanowski)らが発表した自然言語処理(コンピュータに人間の言葉を扱わせる技術分野)の手法です。Facebook AI Research(現Meta AI)は、フェイスブック社のAI研究部門です。オープンソースのライブラリ(プログラムから呼び出して使える機能をまとめたソフトウェア部品群)として提供されています。

主眼は、単語の分散表現(単語の意味を数百次元程度の数値ベクトルで表す表現方法)を学習する点にあります。word2vec(単語をベクトルとして学習する代表的な自然言語処理の手法)を提案したトマス・ミコロフ(Tomas Mikolov)も、開発チームに名を連ねています。

最大の特徴は、単語をそのまま一つの単位として扱うのではなく、単語を構成する部分文字列であるサブワード(文字レベルのn-gram。単語をさらに細かく分けた文字の並び)に分解する点です。サブワードのそれぞれにベクトルを与えたうえで合計し、単語全体のベクトルを作ります。

従来のword2vecは、学習データに出現した単語ごとに一つのベクトルを割り当てる方式でした。このため、学習時に出現しなかった単語にはベクトルを与える手段がありませんでした。こうした単語を未知語(OOV)と呼びます。Out-of-Vocabulary の略で、学習に使ったデータに含まれておらずベクトルを持たない単語を指します。

また「go」と「goes」のように語形が変化した単語同士の関係も、別々の単語として扱われるために捉えにくいという弱点もありました。fastText は単語をサブワードに分解して学習することでこれらの弱点に応え、未知語であっても既知のサブワードの組み合わせからベクトルを合成できるようにしました。

2. 試験対策ポイント

まず整理しておきたいのは、fastText の中心的な特徴である、単語を文字レベルのn-gram、いわゆるサブワードに分解して学習する仕組みです。単語全体のベクトルは、サブワードごとのベクトルを合計して求められます。この仕組みにより、学習データに存在しない未知語であっても、既知のサブワードの組み合わせからベクトルを合成できる関係にあります。

なお、文字レベルのn-gram そのものの一般的な仕組み(nの値ごとの特徴など)は別のテーマとして扱われるため、本記事では fastText がそれを応用して未知語対応を実現した点にとどめます。

あわせて整理しておきたいのが、活用(単語の語尾が文法的な役割に応じて変化すること。走る・走った等)が多い言語での強みです。英語のgo・goes・going、日本語の走る・走ったのように語形が変化した単語同士は、共通する部分文字列であるサブワードを共有します。

そのため fastText は、語形が異なっていても意味的な関連を捉えやすいという特性を持ちます。この特性は、学習時に出現しなかった語形にも応用が利く点で、未知語への強さと表裏一体の関係にあります。

fastText は、word2vecの開発者であるトマス・ミコロフが開発チームに名を連ねる後継的な手法として位置づけられています。学習が高速である点も特徴の一つです。単語のベクトル化にとどまらず、文章をあらかじめ決めたカテゴリに自動的に振り分けるタスク(テキスト分類)にも使えます。ライブラリとして提供されている点も、あわせて整理しておきたいところです。

3. 関連概念との比較・相違点

word2vecとの最大の違いは、未知語を扱えるかどうかにあります。ベクトルを何の単位で学習するかという点まで含めて並べると、次のように整理できます。

観点 word2vec fastText
ベクトルを学習する単位 学習データに出現した単語ごと 単語を分解したサブワードごと
単語ベクトルの作り方 単語に一つのベクトルを割り当てる サブワードのベクトルを合計して作る
未知語への対応 学習データに無い単語にはベクトルを与えられない 既知のサブワードの組み合わせから合成できる
文脈による変化 固定のベクトルで変化しない 固定のベクトルで変化しない

表の最後の行が示すとおり、いずれの手法も一つの単語、あるいはサブワードごとに固定のベクトルを持ちます。文脈に応じてベクトルの中身が変化するわけではないという点は、両者に共通する性質です。

fastText と ELMo(文脈に応じて単語のベクトルを動的に変化させる手法)は、いずれもword2vecの限界を補う手法です。fastText が未知語への対応を担うのに対し、ELMo は多義語への対応を担うという役割分担の関係にあります。

4. ビジネス・実務での活用シナリオ

検索エンジンやEC(電子商取引)サイトでは、商品名の活用形の違いや、学習データに無かった新語・固有名詞を含む検索クエリへの対応に fastText が使われます。「軽い」と「軽く」のように語形が異なる語でもサブワードを共有するため、単語ベクトルを合成すると検索意図をつかみやすいというわけです。学習し直さなくても新語をある程度扱える性質は、日々新しい商品名やキーワードが生まれる検索・EC領域にとって、運用の手間を抑える効果を持ちます。

多言語対応サービスの分野でも fastText は活用されています。フィンランド語やトルコ語、日本語のように活用語尾の変化が多い言語であっても、語形変化を横断して単語の関連性を捉えやすいためです。Facebook は157言語分の学習済みベクトルを公開しており、個別の言語ごとに一から学習しなくても、幅広い言語に対応した分散表現を利用できる環境が整っています。

テキスト分類やカスタマーサポートの分野では、fastText がライブラリとして備える高速なテキスト分類機能が使われます。問い合わせ文をあらかじめ決めたカテゴリに自動的に振り分けたり、商品レビューの感情を判定したりする用途で、大量のテキストを短時間で仕分けられる点が、人手による一次対応の負担を軽くする効果につながります。

5. 要点まとめ

  • fastText は、2016年にFacebook AI Research(現Meta AI)が発表した単語の分散表現を学習する手法・ライブラリで、word2vecの開発者トマス・ミコロフも開発チームに名を連ねています。
  • 単語を文字レベルのn-gram、すなわちサブワードに分解し、単語ベクトルをサブワードベクトルの合計として求めることで、word2vecでは扱えなかった未知語(OOV)にもベクトルを与えられます。
  • 活用語尾の変化が多い言語に強く、学習が高速なうえ、単語のベクトル化だけでなくテキスト分類タスクにも使えるライブラリとして提供されています。

6. 確認問題

問1fastText は、単語を文字レベルのn-gram(サブワード)に分解し、それぞれのベクトルを合計して単語全体のベクトルを作る手法である。

解答・解説をみる

○ 正しい

サブワードに分解してベクトルを合成する仕組みは、fastText の中心的な特徴です。単語をそのまま一つの単位として扱うword2vecとの最大の違いにあたります。

問2fastText は単語をサブワードに分解する仕組みにより、学習データに存在しなかった未知語(OOV)に対してもベクトルを合成できる。

解答・解説をみる

○ 正しい

未知語であっても、それを構成する既知のサブワードの組み合わせからベクトルを合成できます。未知語を扱えないword2vecとの違いになる点です。

問3fastText はword2vecとは別の開発元によって独立に開発された手法であり、word2vecの開発者は関わっていない。

解答・解説をみる

× 誤り

正しくは、fastText はFacebook AI Research が発表した手法で、word2vecの開発者であるトマス・ミコロフ(Tomas Mikolov)も開発チームに名を連ねています。無関係な独立手法ではなく、word2vecの限界をサブワードで補う後継的な位置づけにあります。