単語をベクトルに変換する
1. 概要
数学は機械学習の分野のいたるところにあります。入力データと出力データは数学的なエンティティであり、学習および予測するアルゴリズムでもあります。
しかし、単語などの言語エンティティを処理する必要がある場合はどうなりますか? それらを数学的表現としてどのようにモデル化できますか? 答えは、それらをベクトルに変換することです。
このチュートリアルでは、単語をベクトルとして表現するための主な手法と、各方法の長所と短所を学習するため、実際にそれらをいつ適用するかがわかります。
2. ワンホットベクター
2.1. 説明
この手法は、各列が語彙の単語に対応するベクトルを持つことで構成されます。
これらの文の例を見てみましょう。
(1) John likes to watch movies. Mary likes movies too. (2) Mary also likes to watch football games.
これが私たちの語彙になります:
したがって、このベクトルがあります。各列は語彙の単語に対応しています。
各単語の値は、それ自体の列の場合は1、他のすべての列の場合は0になります。
「いいね」という単語のベクトルは次のようになります。
一方、「ウォッチ」のベクトルは次のようになります。
問題の性質に応じて、語彙を作成するさまざまな方法があります。 これは、システムのパフォーマンスと速度に影響を与えるため、重要な決定です。
次のセクションでは、その語彙を作成するためのさまざまな方法を確認します。
2.2. ストップワードの削除
ストップワードは問題に関連しないため無視します。 通常、この言語で最も一般的なものを削除します:「 the」、「 in」、「a」など。
これは、より小さな語彙を取得し、より少ない次元で単語を表すのに役立ちます。
2.3. 語形変化の削減
人気のある便利なテクニックは、 語形変化(異なる時制の動詞、性別の変化など)を本質的な意味を維持する一般的な単語に減らすことです 。 この手法を使用する主な利点は次のとおりです。
- 短い語彙を使用すると、システムが高速になります
- 一般的な単語はデータセットにより多く存在するため、トレーニング中にさらに多くの例があります
これを実現するための2つの主要な特定の手法があります:ステミングとレマタイゼーション。
ステミングは、単語を「stem」という名前の共通ルートに切り捨てるプロセスです。
- すべての単語は語幹と同じ語根を共有しますが、語幹は言語外の単語である可能性があります
- 計算は簡単ですが、語幹として非現実的な単語を生成するという欠点があります
語幹がまだ言語の実際の単語である語幹の例を見てみましょう(「接続」):
ここで、語幹が単語ではないケースが表示されます(“ Amus” ):
補題は、単語を「補題」という名前の正規、辞書、または引用形式に縮小することで構成されます。
- 単語は補題と同じ語根を共有できる場合と共有できない場合がありますが、補題は実際の単語です
- 通常、これはより複雑なプロセスです。これは、見出語を見つけるために大きなデータベースまたは辞書が必要になるためです。
次に、語尾変化のある単語が見出語と語根を共有する見出語のケースを参照してください(“ Play” ):
最後に、語尾変化のある単語と語根を共有しない補題(“ Go” )の例を示します。
2.4. 小文字の単語
語彙を減らすことは、通常、意味を失うことなく大幅に減らすための良い方法です。
ただし、大文字の単語が問題に関連している場合は、この最適化を使用しないでください。
2.5. 未知の単語を処理するための戦略
Out Of Vocabulary(OOV)の単語を処理するための最も一般的な戦略は次のとおりです。
- エラーを発生させる:これは、プロセスを停止し、その単語の列を作成して、再開することを意味します
- 単語を無視する:ストップワードであるかのように扱います
- 不明な値の特別な単語を作成する:「 UNK 」(「U unknown」)という単語を作成すると、すべてのOOV単語がその単語と見なされます。
2.6. 長所と短所
欠点は次のとおりです。
- 非常に大きくてまばらなベクトル:単語あたり1億次元のベクトルを簡単に操作できます
- 幾何学的特性の欠如:類似した単語は空間に近いベクトルを持っていません
利点は次のとおりです。
- 簡単なアプローチ
- 計算が速い
- 分散した方法でクラスター上で簡単に計算できます
- 非常に解釈しやすい
3. 単語の埋め込み
3.1. 説明
単語の埋め込みは、単語を表す実数のベクトルです。
それらは通常、単語の文脈、意味的類似性、および他の単語との関係をキャプチャします。
3.2. 埋め込み演算
単語の埋め込みの最も優れた点の1つは、それらに意味演算を適用できることです。
単語埋め込みベクトル間の関係を見てみましょう。
男性-女性グラフでは、「王」と「男性」の間の距離が「女王」の間の距離と非常に似ていることがわかります。 」および「女性」。 その違いは、「ロイヤルティ」の概念に対応します。
これらの操作を適用して、「king」のベクトルを近似することもできます。
算術的および幾何学的に意味のある概念を表現するこの機能は、単語の埋め込みを機械学習で特に役立つものにします。
3.3. 長所と短所
単語埋め込みの欠点は次のとおりです。
- ワンホットベクトルと比較して、多くのトレーニングデータが必要です
- 計算が遅い
- 解釈性が低い
それらの利点は次のとおりです。
- 意味的および統語的関係の保存
- 意味の観点から2つの単語がどれだけ近いかを測定できます
- ベクトル演算を適用できます
4. Word2vec
それでは、単語の埋め込みを作成するための最も一般的な手法の1つであるWord2vecについて学びましょう。
それがどのように機能するかを理解するための重要な概念は、 言語学における分布セマンティクス:
Word2vecには、単語を表すベクトルを見つけるための2つの方法があります。
- Continuous Bag Of Words(CBOW):モデルは、周囲のコンテキスト単語から現在の単語を予測します
- 連続スキップグラム:モデルは現在の単語を使用して周囲のコンテキスト単語を予測します
アーキテクチャは、入力(ワンホットベクトル)、非表示(Nユニットを選択)、出力(ワンホットベクトル)の3つの層を持つ非常に単純な浅いニューラルネットワークです。
トレーニングは、期待される出力ベクトルと予測される出力ベクトルの差を最小限に抑え、副産物として重み行列(赤)への埋め込みを残します。
したがって、2つの重み行列があります。入力層と非表示層の間の行列と、非表示層と出力層の間の行列です。
トレーニング後、サイズのマトリックスには、単語ごとに1つの列があります。これは、各単語の埋め込みです。
4.1. CBOWアーキテクチャ:
CBOWの全体的な概念は、単語(周囲の単語)のコンテキストを知っていることであり、私たちの目標はその単語を予測することです。
たとえば、前者のテキストでトレーニングするとします。
John likes to watch movies. Mary likes movies too.
そして、3のウィンドウを使用することにしました(つまり、ターゲット単語の前に1つの単語を選択し、その後に1つの単語を選択します)。
これらは、私たちが使用するトレーニングの例です。
John ____ to (Expected word: "likes") likes ____ watch (Expected word: "to") to ____ movies (Expected word: "watch") ...
すべてワンホットベクトルとしてエンコードされます:
次に、このネットワークを他のニューラル分類器と同じようにトレーニングし、重み行列に単語の埋め込みを取得します。
4.2. スキップグラムアーキテクチャ:
このアプローチの唯一の違いは、単語を入力として使用し、コンテキスト(単語を囲む)を出力(予測)として使用することです。
したがって、次の例を生成します。
"likes" (Expected context: ["John", "to"]) "to" (Expected context: ["likes", "watch"]) "watch" (Expected context: ["to", "movies"]) ...
ワンホットベクトルとして表されるものは、次のようになります。
4.3. 実用的なアドバイス
- サブサンプリング:トレーニング速度を上げるために、非常に頻繁な単語がサブサンプリングされる場合があります
- 次元:単語の埋め込みの品質は、非表示の次元で向上しますが、ある時点で低下します。 非表示の寸法の一般的な値は、100〜1,000の範囲で、サイズ100、200、および300の非常に人気のある埋め込みです。
- コンテキストウィンドウ:著者のメモによると、推奨値はスキップグラムの場合は10、CBOWの場合は5です。
- カスタムドメイン:事前にトレーニングされた埋め込みを無料で利用できるにもかかわらず、特定のドメイン用にカスタム埋め込みをトレーニングすることを決定できるため、テキストのセマンティクスと構文上の関係の性質をより適切に捉え、システムのパフォーマンスを向上させることができます
5. 他の単語の埋め込み方法
5.1. グローブ
GloVe 埋め込みは、2つの単語が一緒に表示される確率に関連しています。 または、簡単に言えば、埋め込みは、単語が頻繁に一緒に表示される場合は似ています。
長所:
- トレーニング時間はWord2vecよりも短いです
- いくつかのベンチマークは、セマンティック関連タスクでより優れていることを示しています
短所:
- 大規模なコーパスを使用する場合に問題となる可能性がある、より大きなメモリフットプリントの必要性があります
5.2. FastText
fastText は、Word2vecの拡張であり、単語全体の代わりにnグラムの文字を使用します。
長所:
- 小さなデータセットへの埋め込みのトレーニングを可能にします
- 短い単語の意味を把握し、接尾辞と接頭辞を理解するのに役立ちます
- 未知の単語への適切な一般化
短所:
- すべての単語が多くのn-gramを生成するため、Word2vecよりも低速です。
- メモリ要件が大きい
- 「n」の選択が重要です
5.3. ELMo
ELMo は、文によって意味が異なる単語が存在するという問題を解決します。
「cell」という単語の意味の違いを考えてみましょう。「彼は電話で刑務所cellに行きました」と「彼は血液cellサンプルを抽出しに行きました」。
長所:
- 語順を考慮します
- 単語の意味がより正確に表現されます
短所:
- モデルはコンテキストに基づいて単語のベクトルを生成するため、トレーニング後もベクトルのトレーニングに使用したモデルが必要です。
5.4. その他のテクニック
あまり人気がない追加のテクニックがいくつかあります。
6. 結論
このチュートリアルでは、単語からベクトルを生成するための2つの主要なアプローチ、ワンホットベクトルと単語の埋め込み、およびそれらを実装するための主要な手法について学習しました。
これらのテクニックの長所と短所も考慮したので、これで実際の生活に賢く適用する準備が整いました。