単語ベクトル計算とテキスト分類ツール fastText の応用原理と実践

単語ベクトル計算とテキスト分類ツール fastText の応用原理と実践

FastTextは、Facebookが2016年にオープンソース化した単語ベクトル計算およびテキスト分類ツールです。学術的な革新性はあまりありません。ただし、その利点も非常に明白です。テキスト分類タスクでは、fastText (浅いネットワーク) は多くの場合、深層ネットワークに匹敵する精度を達成できますが、トレーニング時間は深層ネットワークよりも桁違いに高速です。標準的なマルチコア CPU では、10 億語のコーパスの単語ベクトルを 10 分でトレーニングし、30 万以上のカテゴリを持つ 50 万以上の文を 1 分で分類することが可能です。

[[218117]]

この記事では、まずsoftmax、ngramなどの予備知識を紹介し、次にword2vecの原理を簡単に紹介します。その後、fastTextの原理を説明し、kerasを使用して簡単なfastText分類器を構築します。最後に、DaguanデータでのfastTextの応用を紹介します。

1. 前提条件

(2)階層的ソフトマックス

また、標準的な Softmax 回帰では、y=j: の場合の Softmax 確率を計算するために、すべての K 確率を正規化する必要があることに気付いたかもしれません。これは、|y| が大きい場合に非常に時間がかかります。こうして、階層型ソフトマックスが誕生しました。その基本的な考え方は、フラットな標準ソフトマックスの代わりにツリーの階層構造を使用することです。これにより、計算時には、他のノードを気にすることなく、パス上のすべてのノードの確率値のみを計算する必要があります。

次の図は階層的 Softmax の例です。

(3)nグラム特徴

テキスト特徴抽出では、n-gramがよく見られます。これは言語モデルに基づいたアルゴリズムです。基本的な考え方は、バイト順でテキスト コンテンツに対してサイズ N のスライディング ウィンドウ操作を実行し、最終的に長さ N のバイト フラグメント シーケンスを形成することです。次の例を見てください。

Daguan Dataを訪問しました

対応するバイグラムの特徴は次のとおりです。私は到着します。到達します。楽観的なビュー数データデータ訪問

対応するトリグラムの特徴は次のとおりです。到着した場所、到着ポイント、ビューの数、データ、データ参照訪問

n-gram の gram は粒度に応じて意味が異なることに注意してください。文字単位または単語単位の粒度にすることができます。上記の例は文字レベルの n-gram です。単語レベルの n-gram については、次の例を参照してください。

Daguan Dataを訪問しました

対応するバイグラムの特徴は、I/come to、come to/Daguan Data、Daguan Data/visitです。

対応するトリグラムの特徴は次の通りです: I/came to/optimistic data came to/optimistic data/visit

n-gram によって生成される特徴は、テキスト特徴の候補セットにすぎません。後で、情報エントロピー、カイ二乗統計、IDF などのテキスト特徴選択方法を使用して、より重要な特徴を選別することができます。

2. ワード2ベクトル

この記事では fastText を紹介しているのではないですか? なぜ word2vec から始まるのですか? と疑問に思うかもしれません。主な理由は、word2vec の CBOW モデル アーキテクチャが fastText モデルと非常に似ていることです。したがって、Facebook のオープンソース fastText ツールは、fastText テキスト分類ツールを実装しているだけでなく、高速単語ベクトル トレーニング ツールも実装していることがわかります。

Word2vec には、skip-gram モデルと CBOW モデルの 2 つの主なモデルがあります。ここでは CBOW モデルのみを紹介します。skip-gram モデルの詳細については、Daguan の別の技術記事を参照してください: Technical Dry Goods | Word2vec の skip-gram モデルについて http://zhuanlan..com/art/201710/554674.htm

(1)モデルアーキテクチャ

CBOW モデルの基本的な考え方は、コンテキストを使用してターゲット語彙を予測することです。アーキテクチャ図は次のとおりです。

(2)前方伝播

(3)バックプロパゲーション学習重み行列

3. fastText分類

最後に、fastText の番です。ここで特に注意すべき点が 1 つあります。一般的に、fastText をテキスト分類に使用すると、単語の埋め込みも生成されます。つまり、埋め込みは fastText 分類の産物です。ただし、事前トレーニング済みの埋め込みを使用して fastText 分類モデルをトレーニングすることにした場合は別ですが、これは別の問題です。

(1)文字レベルのn-gram

Word2vec はコーパス内の各単語をアトムとして扱い、各単語のベクトルを生成します。これは、「apple」と「apples」、「optimistic data」と「optimistic」など、単語内の形態学的特徴を無視します。これら 2 つの例では、2 つの単語に共通する文字が多く、つまり内部形式が似ていますが、従来の word2vec では、このような内部単語形態学的情報は異なる ID に変換されるため失われます。

この問題を克服するために、fastText は文字レベルの n-gram を使用して単語を表します。 「リンゴ」という単語の場合、nが3であると仮定すると、そのトリグラムは

「<ap", 「app", 「ppl」、「 「ple」、「 「le」>」

このうち、< は接頭辞、> は接尾辞を表します。したがって、これらのトリグラムを使用して「apple」という単語を表すことができます。さらに、これら 5 つのトリグラムのベクトルの重ね合わせを使用して、「apple」という単語ベクトルを表すことができます。

これには 2 つの利点があります。

1. 低頻度の単語に対して生成された単語ベクトルはより良くなります。 n-gram は他の単語と共有できるからです。

2. トレーニング語彙に含まれない単語の場合でも、単語ベクトルを構築できます。文字レベルの n-gram ベクトルをスタックできます。

(2)モデルアーキテクチャ

前述したように、fastText モデル アーキテクチャは word2vec CBOW モデル アーキテクチャと非常によく似ています。以下は fastText モデルのアーキテクチャ図です。

注: このアーキテクチャ図は、単語ベクトルのトレーニング プロセスを示していません。ご覧のとおり、CBOW と同様に、fastText モデルにも入力層、隠れ層、出力層 (階層的ソフトマックス) の 3 つの層しかありません。入力はベクトルで表現された複数の単語、出力は特定のターゲット、隠れ層は複数の単語ベクトルの重ね合わせと平均です。違いは、CBOW の入力はターゲット単語のコンテキストであり、fastText の入力は複数の単語とその n-gram 特徴であり、これらを使用して単一のドキュメントを表すことです。CBOW の入力単語は onehot エンコードされ、fastText の入力特徴は埋め込まれます。CBOW の出力はターゲット単語であり、fastText の出力はドキュメントに対応するクラス ラベルです。

注目すべきは、fastText が入力時に単語の文字レベルの n-gram ベクトルを追加機能として使用し、出力時に階層型 Softmax を使用するため、モデルのトレーニング時間が大幅に短縮されることです。これら 2 つの知識ポイントについては、前の記事で説明されているため、ここでは繰り返しません。

fastText 関連の式の導出は CBOW と非常に似ているため、ここでは詳しく説明しません。

(3)核となる考え方

さて、あまり好ましくない数式の導出を脇に置いて、fastText テキスト分類の核となるアイデアは何かを考えてみましょう。

モデルの後半、つまり、隠れ層の出力から出力層の出力までをよく見ると、ソフトマックス線形マルチカテゴリ分類器であることがわかります。分類器の入力は、現在のドキュメントを表すために使用されるベクトルです。モデルの前半、つまり、入力層入力から隠れ層の出力まで、主に 1 つのことを行います。ドキュメントを表すために使用されるベクトルを生成します。それで、それはどうやって行われるのでしょうか?このドキュメントを構成するすべての単語と n-gram の単語ベクトルを重ね合わせて平均をとります。重ね合わせた単語ベクトルの背後にある考え方は、文書を単語の集合として扱う従来の bag-of-words アプローチです。

したがって、fastTextの核となる考え方は、文書全体の単語ベクトルとn-gramベクトルを重ね合わせて平均化し、文書ベクトルを取得し、その文書ベクトルを使用してソフトマックス多重分類を実行することです。これには、文字レベルの n-gram 機能の導入と階層型 Softmax 分類という 2 つの手法が含まれます。

(4)分類効果

もう 1 つの疑問は、fastText の分類効果が従来の非線形分類器の分類効果よりも劣らないことが多いのはなぜかということです。

次の 2 つのテキストがあるとします。

私はダグアンデータに来ました

私は大観情報技術に行きました

これら 2 つの段落のテキストの意味はほぼ同じです。分類する場合は、同じカテゴリに入れる必要があります。しかし、従来の分類器では、これら 2 つのテキストを表すために使用されるベクトルが大きく異なる可能性があります。従来のテキスト分類では、tfidf値など、各単語の重みを計算する必要があります。「我」と「俺」に計算されたtfidf値はまったく異なる可能性があります。他の単語は似ているため、VSM(ベクトル空間モデル)でこれら2つのテキストを表すために使用されるテキストベクトルはまったく異なる場合があります。しかし、fastText は異なります。fastText は、単語の埋め込みを重ね合わせて得られるドキュメント ベクトルを使用します。単語ベクトルの重要な特徴は、ベクトル間の距離を使用して単語間の意味的類似性を測定できることです。したがって、fastText モデルでは、これら 2 つのテキストのベクトルは非常に類似しているはずなので、同じクラスに分類される可能性が高くなります。

fastText が非常にうまく機能する理由の 1 つは、特徴として単語自体ではなく単語の埋め込みが使用されることです。もう 1 つの理由は、文字レベルの n-gram 特徴を導入することで分類効果が向上することです。

4. 手書きで素早くテキストを書く

Keras は Python で記述された高度に抽象化されたニューラル ネットワーク API であり、基礎となるレイヤーは Tensorflow、Theano、または CNTK をベースにすることができます。その利点は、ユーザーフレンドリー、モジュール式、拡張が容易であることです。そこで、以下では keras を使用して fastText のデモ バージョンを簡単に構築します。製品版の fastText については、https://github.com/facebookresearch/fastText にアクセスしてください。上記の原則を理解していれば、次のデモは非常にわかりやすくなるはずです。

タスクを簡素化するには:

  • 単語ベクトルをトレーニングするときは、通常の word2vec メソッドを使用しますが、実際の fastText では、特徴入力として文字レベルの n-gram も追加します。
  • 私たちの出力層は単純なソフトマックス分類を使用しますが、実際の fastText は階層型ソフトマックスを使用します。

まず、いくつかの定数を定義します。

  • 語彙サイズ = 2000
  • 埋め込み次元 = 100
  • 最大文字数 = 500
  • クラス番号 = 5

VOCAB_SIZE は語彙のサイズを表し、ここでは単純に 2000 に設定されています。

EMBEDDING_DIM は、埋め込み層の出力後に分散表現される各単語のベクトルの次元を表し、ここでは 100 に設定されています。たとえば、「optimistic」という単語は、[ 0.97860014, 5.93589592, 0.22342691, -3.83102846, -0.23053935, …] などの長さ 100 の実数値ベクトルで表されます。

MAX_WORDS は、ドキュメントで使用される単語の最大数を表します。ドキュメントの長さは変化する可能性があるので (つまり、単語数が変化する)、固定次元のニューラル ネットワークに入力するには、単語の最大数を設定する必要があります。このしきい値よりも単語数が少ないドキュメントについては、そのドキュメントを「未知の単語」で埋める必要があります。たとえば、語彙内のインデックス 0 の単語を「未知の単語」として設定し、しきい値未満の部分を 0 を使用して埋めることができます。

CLASS_NUM はカテゴリの数を表します。複数分類の問題の場合、ここでは単に 5 に設定されます。

モデルの構築は次の手順で行います。

  • 入力層(埋め込み層)を追加します。埋め込み層の入力はドキュメントのバッチであり、各ドキュメントは語彙インデックスのシーケンスで構成されます。たとえば、[10, 30, 80, 1000] は「昨日、Daguan Data に来ました」という短いテキストを表します。ここで、語彙内の「I」、「yesterday」、「come」、「Daguan Data」のインデックスはそれぞれ 10、30、80、1000 です。埋め込みレイヤーは、各単語を EMBEDDING_DIM 次元のベクトルにマッピングします。つまり、input_shape=(BATCH_SIZE, MAX_WORDS), output_shape=(BATCH_SIZE, MAX_WORDS, EMBEDDING_DIM);
  • 隠しレイヤー(投影レイヤー)を追加します。投影レイヤーは、ドキュメント内のすべての単語のベクトルを追加して平均化します。 keras が提供する GlobalAveragePooling1D クラスは、この関数を実装するのに役立ちます。このレイヤーの input_shape は、埋め込みレイヤーの output_shape です。このレイヤーの output_shape = (BATCH_SIZE, EMBEDDING_DIM)。
  • 出力層(ソフトマックス層)を追加します。実際の fastText レイヤーは Hierarchical Softmax です。keras は Hierarchical Softmax をネイティブにサポートしていないため、代わりにここでは Softmax が使用されます。このレイヤーは CLASS_NUM を指定します。ドキュメントの場合、出力レイヤーは CLASS_NUM 確率値を生成します。これは、ドキュメントが現在のクラスに属する可能性を表します。このレイヤーの output_shape は (BATCH_SIZE, CLASS_NUM) です。
  • 損失関数、オプティマイザータイプ、評価インデックスを指定して、モデルをコンパイルします。損失関数を前述のソフトマックス回帰の損失関数である categorical_crossentropy に設定し、オプティマイザーを確率的勾配降下法オプティマイザーを意味する SGD に設定し、評価指標として精度を選択します。

モデルにトレーニング データを入力するときは、次の操作を行う必要があります。

  • 文書を単語に分割し、語彙を構築します。語彙内の各単語は整数 (インデックス) に置き換えられ、「不明な単語」のインデックスは予約されており、0 であると想定されます。
  • Onehot クラスのラベル。テキスト データに合計 3 つのカテゴリがあり、対応するクラス ラベルが 1、2、3 であると仮定すると、これらの 3 つのクラス ラベルに対応する onehot ベクトルはそれぞれ [1, 0, 0]、[0, 1, 0]、[0, 0, 1] になります。
  • テキストのバッチの場合、各テキストは単語インデックスシーケンスに変換され、各クラスラベルは onehot ベクトルに変換されます。前の例と同様に、「昨日 Daguan Data に来ました」は [10, 30, 80, 1000] に変換される可能性があります。これはカテゴリ 1 に属し、クラス ラベルは [1, 0, 0] です。 MAX_WORDS=500 に設定しているため、この短いテキスト ベクトルには 496 個のゼロを埋め込む必要があります。つまり、[10、30、80、1000、0、0、0、…、0] となります。したがって、batch_xs の次元は (BATCH_SIZE、MAX_WORDS) であり、batch_ys の次元は (BATCH_SIZE、CLASS_NUM) です。

以下はモデルを構築するためのコードです。データ処理とモデルへのデータ供給のコードは比較的複雑なので、ここでは示しません。

5. DaguanデータにおけるfastTextの応用

fastText は、最近リリースされた単語ベクトルのトレーニングおよびテキスト分類ツールとして、Daguan で広く使用されています。主に以下の2つのシステムで使用されます。

  • 同義語マイニング。 Facebook のオープンソース fastText ツールも単語ベクトルのトレーニングを実装しています。Daguan はこれを使用して、さまざまな垂直分野のコーパスに基づいて多数の同義語をマイニングします。
  • テキスト分類システム。クラス ラベルの数とデータの量が比較的多い場合、Daguan はテキスト分類に fastText を選択して、高速なトレーニングと予測を実現し、メモリを節約します。

[この記事は51CTOコラムニスト「Daguan Data」によるオリジナル記事です。転載については51CTOコラムまでご連絡ください]

この著者の他の記事を読むにはここをクリックしてください

<<:  ハイブリッドクラウド環境でディープラーニングを取り入れたID認証はより柔軟

>>:  2018 年のエンタープライズ AI の良い点と悪い点

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

3.15を利用して、あなたの周りの偽の人工知能を数えましょう

他のインターネットの概念と同様に、AI は人気が出ると数え切れないほどの支持者を獲得しました。彼らは...

人工知能は議論の的になっています。それは人類にとって利益となるのでしょうか、それとも脅威となるのでしょうか?

人工知能はここ2年で急速に発展し、狂気のレベルにまで達しました。例えば、ロボットは人間社会の「市民」...

2018 年の AI テクノロジーのブレークスルーの完全なコレクションをご紹介します。

[[253124]] 2018 年は AI 分野にとって依然として刺激的な年です。今年はNLP研究...

単一のGPUではGPT-3をトレーニングすることはできませんが、これを使用するとハイパーパラメータを調整できます。

偉大な科学的成果は試行錯誤だけでは達成できません。たとえば、宇宙計画におけるすべての打ち上げは、空気...

ChatGPTの現在の時代では、ベクトルデータベースには大規模モデル用のスーパーブレインが搭載されています

次のような経験をしたことはありませんか。インターネットで壁紙を見て、写真に写っている雪をかぶった山や...

Hubo Technologyが「2019年グローバルフィンテックイノベーションTOP50」に選出されました

最近、世界をリードするインテリジェント金融検索エンジンであるHubo Technologyが「201...

...

企業はビッグデータ アルゴリズムを使用して効果的なリンクを構築できますか?

ビッグデータは人々にとって巨大な概念であるようです。しかし、多くの企業がすでに業務にビッグデータを活...

クラウドコンピューティング、ビッグデータ、AI の関係と違いを 1 つの記事で理解する

クラウドコンピューティング、ビッグデータ、人工知能という言葉は誰もが聞いたことがあると思いますが、こ...

...

人工知能(AI)の人間的側面を探る

新興技術である AI はこれまで多くの課題に直面しており、今後も直面し続けるでしょう。一方で、消費者...

...