授業ノート
単語の表現#
NLP モデルで単語をどのように表現しますか?
N-gram#
定義:n-gram は、与えられたテキストや音声のシーケンスから連続して取り出された n 個の要素のシーケンスを指します。自然言語処理の分野では、これらの要素は通常単語です。n-gram モデルは、与えられたテキストシーケンスが出現する確率を推定するための確率言語モデルです。これは、単語の出現確率が前の n-1 個の単語のみに依存するという仮定に基づいています。例えば、バイグラム(bigram、すなわち n=2 の n-gram)モデルでは、「私は自然言語処理が好きです」という文は「私が」「が自然」「自然言語」「言語処理」というバイグラムに分解され、モデルは「が自然」という組み合わせがコーパスに出現する頻度などを学習し、テキストの可能性を予測したり、言語生成などのタスクを行ったりします。
最初の式は、単語のシーケンスの結合確率を示しています。これは、各単語の出現確率(前の単語に条件付けられた)を掛け合わせて全体のシーケンスの確率を計算します。この分解方法は、連鎖律(chain rule)と呼ばれます。
2 つ目の式は、前の単語が与えられたときに、現在の単語が出現する条件付き確率を計算します。式の各部分は以下のように説明されます:
- :訓練データにおいて、単語対が出現した回数を示します。
- :単語が訓練データに出現した回数を示します。
- ∣V∣:語彙のサイズ、すなわち語彙に含まれる異なる単語の数を示します。
- α:ゼロ確率問題を回避するための平滑化パラメータです。これは 0 と 1 の間の値で、通常は未見の単語対の確率を調整するために使用されます。
具体的な詳細#
定義:n-gram は n 個の連続した単語の塊です。
・ユニグラム: “the”, “students”, “opened”, ”their”
・バイグラム: “the students”, “students opened”, “opened their”
・トライグラム: “the students opened”, “students opened their”
・フォーグラム: “the students opened their”
理念:異なる n-gram の出現頻度を収集し、これらのデータを使用して次の単語を予測します。
- まず、マルコフ仮定を立てます:は前の n-1 個の単語のみに依存します。
- これらの n - グラムと (n-1) グラムの確率をどのように取得しますか?答え:いくつかの大規模なテキストコーパスでそれらをカウントすることによって!
例#
4-gram 言語モデルを学習していると仮定します:
スパース性の問題(Sparsity Problems)#
n-gram モデルは自然言語処理でテキストシーケンスを予測するための手法であり、単語の出現は前の n-1 個の単語のみに依存するという仮定に基づいています。しかし、n の値が大きくなると、スパース性の問題がより深刻になります。なぜなら、多くの未見の n-gram の組み合わせが存在する可能性があるからです。
- スパース性の問題 1(Sparsity Problem 1):
問題:
特定の単語やフレーズ(例えば「students opened their w」)が訓練データに一度も出現しなかった場合、n-gram モデルに基づくと、この単語やフレーズの確率は 0 になります。これにより、モデルはこれらの未見の単語やフレーズに確率を割り当てることができなくなります。
部分的な解決策:
平滑化(Smoothing):この問題を解決するために、各単語のカウントに小さな値 δ を加えることができます。これにより、特定の単語やフレーズがデータに一度も出現しなかった場合でも、その確率は 0 にはなりません。平滑化技術は、すべての単語に非ゼロの確率を確保し、確率が 0 になる状況を回避します。
スパース性の問題 2(Sparsity Problem 2):
問題:
より長い n-gram(例えば「students opened their」)がデータに一度も出現しなかった場合、モデルはこのフレーズに続く単語(例えば w)の確率を計算できなくなります。
部分的な解決策:
バックオフ(Backoff):この場合、より短い n-gram(例えば「opened their」)にバックオフして確率を計算できます。この方法により、モデルは未見の長い n-gram に遭遇したときに、より短い n-gram を使用して確率を推定できます。
注意事項:
n の増加の影響: n(n-gram の長さ)を増やすと、スパース性の問題がさらに深刻になります。通常、n を 5 以上にすることはできません。なぜなら、n が増加するにつれて、未見の n-gram の組み合わせの数が急激に増加し、より多くのスパース性の問題を引き起こすからです。
これらの方法を通じて、n-gram 言語モデルはスパース性の問題をある程度緩和し、モデルの一般化能力と予測精度を向上させることができます。しかし、これらの方法にも限界があります。例えば、平滑化はノイズを引き入れる可能性があり、バックオフは一部の文脈情報を失う可能性があります。したがって、実際のアプリケーションでは、適切な n 値と平滑化技術を選択することが非常に重要です。
ストレージの問題#
ストレージの要求:n-gram モデルは、訓練コーパスで観察されたすべての n-gram のカウントを保存する必要があります。これは、モデルのサイズが訓練データ内の異なる n-gram の数に比例することを意味します。
モデルサイズの影響要因:
- n の増加:n-gram の長さ n が増加すると、モデルはより多くの n-gram のカウントを保存する必要があります。なぜなら、より長い n-gram の組み合わせの数が急激に増加するからです。
- コーパスの増加:訓練コーパスの増加もモデルのサイズを増加させます。なぜなら、より多くのテキストはより多くの n-gram の組み合わせを意味するからです。
解決策と課題: - ストレージの最適化:n-gram モデルのストレージ要求は n の増加とコーパスの拡大に伴って増加するため、ストレージスペースを削減するための効率的なストレージ最適化技術(圧縮、ハッシュテーブルなど)が必要です。
- モデルの簡素化:n-gram の長さを制限したり、より効率的なデータ構造やアルゴリズムを使用したりして、ストレージ要求を削減することができます。
- スパース性の問題:n が増加するにつれて、スパース性の問題(すなわち、多くの n-gram が訓練データに一度も出現しない)がより深刻になり、平滑化技術を使用して解決する必要があります。
- 代替モデル:より高度なモデル(例えば、ニューラルネットワークモデル(Transformer など))を使用することを検討できます。これらのモデルは通常、よりコンパクトで、より少ないパラメータでより複雑な言語パターンを学習できます。
ナイーブベイズ#
ナイーブベイズは、ベイズの定理に基づく単純な確率分類器であり、特徴間の独立性を仮定します。テキスト分類タスクにおいて、ナイーブベイズモデルは、与えられたクラス $c_j$ の下で単語 $w_i$ が出現する確率を計算するために使用できます。
公式は次の通りです:
公式の説明:
- :与えられたクラス $c_j$ の条件下で、単語 $w_i$ が出現する確率を示します。これはモデルの予測された推定確率です。
- Count (wi,cj):クラス $c_j$ 内で単語 $w_i$ が出現した回数を示します。
- :クラス $c_j$ 内でのすべての単語の出現回数の合計を示します。ここで V は語彙を示し、すべての可能な単語を表します。
- α:データのスパース性の問題を処理するための平滑化パラメータで、ゼロ確率の発生を回避します。これは 0 と 1 の間の値です。
- ∣V∣:語彙のサイズ、すなわち語彙に含まれる異なる単語の数を示します。
平滑化技術:
ナイーブベイズモデルでも、データのスパース性の問題を処理するために平滑化技術が使用されます。具体的には、公式の平滑化技術は、分子と分母の両方に α を加えることによって実現されます: - 分子に α を加える:Count (wi,cj)+α、これは単語 $w_i$ がクラス $c_j$ 内で出現しなかった場合でも、その確率がゼロにならず、α になることを示します。
- 分母に α∣V∣を加える:、これは特定の単語がクラス $c_j$ 内で出現しなかった場合でも、その確率がゼロにならず、均等に分配されることを示します。
なぜ NLP モデルで意味に注目する必要があるのか?#
文字で表すと:特徴は単語のアイデンティティ(= 文字列)です。
例えば、前の単語が「terrible」の場合、テストセットと訓練セットの両方で完全に同じ「terrible」が必要です。
しかし、意味をベクトルに変換できれば:
- 前の単語はベクトル [35, 22, 17, …] でした。
- 現在、テストセットでは類似のベクトル [34, 21, 14, …] を見るかもしれません。
- 類似の未見の単語に一般化できます!!!
- 従来の NLP では、単語を離散的なベクトルとして扱い、one-hot ベクトルで表現し、ベクトルの次元は語彙内の単語の数です。しかし、この方法では自然な類似度を提供しません。
- 分布意味論:単語の意味は、その近くに頻繁に出現する単語によって与えられます。
- 単語 w がテキストに出現すると、その文脈は近くに出現する単語の集合(固定サイズのウィンドウ内)です。w の多くの文脈を使用して w の表現を構築します。
- 単語の文脈をベクトルで表現できます!
単語は何を意味しますか?#
- 同義語:couch/sofa, car/automobile, filbert/hazelnut
- 反義語:dark/light, rise/fall, up/down
- 一部の単語は同義語ではありませんが、意味の要素を共有しています。例:cat/dog, car/bicycle, cow/horse
- 一部の単語は似ていませんが、関連しています:coffee/cup, house/door, chef/menu
大きなアイデア:類似性に焦点を当てた意味のモデル
類似した単語は「ベクトル空間で近くにあります」
単語埋め込みプロセス#
目標:単語を短い(50-300 次元)かつ密な(実数値)ベクトルとして表現する!
- カウントベースのアプローチ(Count-based approaches):
歴史を使用:この方法は 90 年代以来使用されています。
共起行列:異なる単語がテキスト内で共に出現する頻度を記録したスパースな単語 - 単語共起(PPMI、Positive Pointwise Mutual Information)行列を構築します。
SVD 分解:共起行列に対して特異値分解(SVD)を使用して、単語の低次元ベクトル表現を取得します。 - 予測ベースのアプローチ(Prediction-based approaches):
機械学習の問題:単語埋め込みの問題を機械学習の問題として定式化し、文脈内の単語を予測することで単語の表現を学習します。
Word2vec:Mikolov らによって 2013 年に提案され、Word2vec は与えられた単語の文脈単語を予測するか、文脈単語から中心単語を予測することで単語ベクトルを学習します。
GloVe:Pennington らによって 2014 年に提案され、GloVe(Global Vectors for Word Representation)は、グローバルな単語 - 単語共起情報を利用して単語ベクトルを学習します。
単語埋め込み:学習問題#
テキストから単語を表すベクトルを学習します。
入力:
大規模なテキストコーパス(text corpus)と語彙 V。
ベクトルの次元 d(例えば、300 次元)。
出力:
関数 f→Rd で、語彙内の各単語を d 次元の実数ベクトル空間にマッピングします。
学習プロセス:
単語埋め込みの学習プロセスは通常、モデルが予測タスク(文脈内の単語を予測するなど)での性能を測定する目的関数を最適化することを含みます。
トレーニングを通じて、モデルが学習した単語ベクトルは、同義語、反義語、単語のカテゴリなど、単語間の関係を捉えることができます。
基本的な属性:
- 類似した単語は類似したベクトルを持つ argmaxcos (e (w),w (w*))
- 「man」(男性)と「woman」(女性)間の関係、及び「king」(国王)と「queen」(女王)間の関係。単語埋め込み空間では、これらの 2 つの関係は類似しており、すなわち vman−vwoman≈vking−vqueenです。これは、「man」から「woman」へのベクトルが「king」から「queen」へのベクトルと類似していることを意味します。
- 動詞の時制(Verb tense):例えば「walk」(歩く)、「walked」(歩いた)、「swim」(泳ぐ)、「swam」(泳いだ)。これらの関係も単語埋め込み空間で類似しており、すなわち vwalking−vwalked≈vswimming−vswamです。
- 国 - 首都(Country-Capital):例えば「France」(フランス)と「Paris」(パリ)、「Italy」(イタリア)と「Rome」(ローマ)。これらの関係も単語埋め込み空間で類似しており、すなわち vParis−vFrance≈vRome−vItalyです。
- 類似性の問題を解決する方法:ベクトルの差とコサイン類似度を計算して類似語を見つけます。具体的な手順は次の通りです:
類似性の関係を定義します:与えられた類似性の関係、ここで a と b は既知の単語、a∗と b∗は見つける必要のある類似語です。
ベクトルの差を計算します:e (a∗)−e (a)+e (b) を計算します。ここで e (w) は単語 w のベクトル表現を示します。
最も類似した単語を探します:語彙 V 内で e (a∗)−e (a)+e (b) とコサイン類似度が最大の単語 b∗を見つけます。すなわち b∗=argmaxw∈Vcos (e (w),e (a∗)−e (a)+e (b))。
この図は、神経ネットワークを通じて言語モデル(LMs)を学習するプロセス、特に単語埋め込み(word embedding)の概念をどのように導入するかを示しています。図に示されているモデルは神経確率言語モデル(Neural Probabilistic Language Model)で、Yoshua Bengio、Réjean Ducharme、Pascal Vincent、Christian Jauvin によって 2003 年に提案されました。
図の要素の説明:
- 入力層(Index for wt−n+1, wt−2, wt−1):
これらは前 n 個の単語のインデックスで、文脈を表します。各単語はルックアップテーブル(Table look-up)を通じてベクトル表現にマッピングされ、すなわち単語埋め込みです。 - 単語埋め込み層(C(wt−n+1), C(wt−2), C(wt−1)):
各単語のインデックスはルックアップテーブルを通じてベクトルにマッピングされ、これらのベクトルは共有パラメータ(shared parameters across words)であり、単語埋め込みを表します。 - 隠れ層(tanh):
単語埋め込みベクトルが結合され、非線形活性化関数(例えば tanh)を通じて処理されます。このステップはモデル内で計算量が最も多い部分です。 - 出力層(softmax):
隠れ層の出力は softmax 関数を通じて確率分布に変換され、与えられた文脈下で各可能な次の単語の確率を示します。 - 出力(t-th output = P(wt=i∣context)):
最終的な出力は、与えられた文脈条件下で、t 番目の単語が特定の単語 i である確率です。
word2vec#
スキップグラム#
スキップグラムモデルの目標は、各単語を使用してその文脈内の他の単語を予測することです。
仮定:
大規模なテキストコーパスがあります。
重要なアイデア:
各単語を使用してその文脈内の他の単語を予測します。これは分類問題です。なぜなら、モデルは語彙から正しい文脈単語を選択する必要があるからです。
文脈:
文脈は固定サイズのウィンドウとして定義され、サイズは 2m(図の例では m=2)です。これは、各中心単語に対して、モデルが前後各 m 個の単語を文脈として考慮することを意味します。
確率計算:
中心単語 a が与えられた場合、モデルは他の単語 b が文脈単語になる確率 P (b∣a) を計算する必要があります。
この確率分布 P (⋅∣a) は、∑w∈VP (w∣a)=1 として定義されます。すなわち、すべての可能な文脈単語の確率の合計は 1 です。
図には中心単語「into」が示されており、その文脈ウィンドウのサイズは 2 で、前後に各 1 つの単語が含まれています。すなわち、「problems」、「turning」、「banking」、「crises」、「as」です。
モデルは中心単語に基づいてこれらの文脈単語を予測する方法を学習する必要があります。
スキップグラムモデルの原理:
目標:各中心単語に対して、モデルの目標はその文脈単語の確率を最大化することです。
損失関数:通常、交差エントロピー損失関数を使用してモデルをトレーニングします。すなわち、予測確率分布と実際の文脈単語分布との間の差異を最小化します。
最適化:勾配降下法や他の最適化アルゴリズムを通じてモデルパラメータを調整し、損失関数を最小化します。
この図はスキップグラムモデルのトレーニングプロセスをさらに説明し、テキストデータをモデルが処理できる形式に変換する方法を示し、モデルのトレーニング目標を説明します。
文脈ウィンドウ:
図はサイズ 2 の固定ウィンドウを示しており、これは各中心単語(図中の赤いマークの単語)に対して、前後各 2 つの単語を文脈として考慮することを意味します。
確率計算:
各中心単語に対して、モデルはその文脈単語の確率を計算する必要があります。例えば、中心単語「into」が与えられた場合、モデルは「problems」、「turning」、「banking」、「crises」、「as」が文脈単語になる確率を計算する必要があります。
トレーニングデータの変換:
図の右側には、原始テキストデータをモデルのトレーニングに必要な形式に変換する方法が示されています。例えば、中心単語「into」に対して、モデルはトレーニングサンプル (in, problems)、(into, turning)、(into, banking)、(into, crises) などを生成します。
トレーニング目標:
モデルのトレーニング目標は、一組のパラメータを見つけることです。これらのパラメータは、文脈単語の確率を最大化できるようにします。言い換えれば、モデルが学習しようとしている単語ベクトルは、与えられた中心単語の文脈単語を最もよく予測できるようにすることです。
目標関数:
をどのように定義しますか?
これは、単語ベクトルと Softmax 関数を使用して実現されます。
2 つのベクトルセット:
語彙 V 内の各単語に対して、2 つのベクトルセットを使用します:
:中心単語 a のベクトルで、すべてのに対して。
:文脈単語 b のベクトルで、すべてのに対して。
内積:
内積を使用して、中心単語 a と文脈単語 b が一緒に出現する可能性を測定します。
Softmax 関数:
内積を確率分布に変換するために Softmax 関数を使用します。これは、内積の指数をすべての可能な文脈単語の指数の合計で正規化することによって実現されます。
確率分布:
は語彙 V 上で定義された確率分布であり、中心単語が与えられたときに、各可能な文脈単語が出現する確率を示します。
vs 多項式ロジスティック回帰#
- 多項式ロジスティック回帰:
公式:
多項式ロジスティック回帰は多クラス問題に使用され、その公式は次の通りです:
ここで、y はクラスラベル、c はクラスの 1 つ、x は入力特徴ベクトル、とはそれぞれクラス c の重みベクトルとバイアス項、m はクラスの総数です。
説明:
公式の分子は入力特徴ベクトル x とクラス c の重みベクトルの内積にバイアス項の指数を加えたものです。
分母はすべてのクラスの指数の合計で、すべてのクラスの確率の合計が 1 になるように正規化します。 - スキップグラムモデル:
公式:
スキップグラムモデルの確率計算公式は次の通りです:
ここで、は中心単語、は文脈単語、とはそれぞれ中心単語と文脈単語のベクトル表現、V は語彙です。
説明:
公式の分子は中心単語と文脈単語のベクトル内積の指数です。
分母は中心単語と語彙内のすべての単語のベクトル内積の指数の合計で、正規化に使用されます。 - 比較:
本質的には∣V∣路の分類問題:スキップグラムモデルは多クラス問題として見ることができ、ここで∣V∣は語彙のサイズです。
を固定すると:中心単語のベクトルを固定すると、問題は多項式ロジスティック回帰問題に簡略化されます。
非凸最適化問題:中心単語と文脈単語のベクトルを同時に学習する必要があるため、トレーニング目標は非凸であり、最適化プロセスには複数の局所最適解が存在する可能性があります。
vs 多項式ロジスティック回帰#
練習#
答えは (b) です。
各単語には 2 つの d 次元ベクトルがあるため、2 × | V | × d です。
質問:なぜ各単語に 2 つのベクトルが必要なのか?
回答:単語は自身の文脈ウィンドウ内に出現することはあまりないからです。例えば、単語「dog」が与えられた場合、は低くなるべきです。もし 1 つのベクトルセットだけを使用すると、モデルは本質的にを最小化する必要があり、これにより自己参照ベクトルが過度に類似してしまい、モデルの性能に影響を与えます。
質問:どのベクトルセットが単語埋め込みとして使用されるのか?
回答:これは経験的な問題です。通常、だけを単語埋め込みとして使用しますが、2 つのベクトルセットを結合して使用することもできます。
スキップグラムとネガティブサンプリング(SGNS)および他の変種#
問題の説明:
従来のスキップグラムモデルでは、中心単語と文脈単語のペア (t,c) を取得するたびに、語彙内のすべての単語を使用して文脈単語ベクトルを更新する必要があります。これは計算上非常に高価です。
ネガティブサンプリング法:
ネガティブサンプリングでは、語彙内のすべての単語を考慮するのではなく、K 個の(通常 K は 5 から 20 の間)ネガティブサンプルをランダムにサンプリングします。これは、語彙から K 個の単語をランダムに選択してネガティブサンプルとして使用することを意味します。
Softmax とネガティブサンプリングの公式:
Softmax:従来のスキップグラムモデルは確率を計算するために Softmax 関数を使用し、公式は次の通りです:
ネガティブサンプリング:ネガティブサンプリング法は Softmax をより単純な公式に置き換え、公式は次の通りです:
ここで、σ(x)=1+exp (−x) 1は sigmoid 関数で、内積を確率に変換するために使用されます。
重要なアイデア:
元の∣V∣- 路の分類問題(ここで∣V∣は語彙のサイズ)を一連の二項分類タスクに変換します。
単語のペア (t,c) を取得するたびに、モデルは語彙内のすべての単語の中から c を予測するのではなく、(t,c) が正のサンプルペアであり、(t,c′) がネガティブサンプルペアであることを予測します。ここで c′は小さなサンプリングセットからランダムに選択されます。
正のサンプルとネガティブサンプル:
正のサンプル:例えば、中心単語「apricot」と文脈単語「tablespoon」は正のサンプルペアです。
ネガティブサンプル:例えば、中心単語「apricot」とランダムに選択された単語「aardvark」はネガティブサンプルペアです。
損失関数:
損失関数 y は次のように定義されます:
ここで、σ(x)=1+exp (−x) 1は sigmoid 関数で、K はネガティブサンプルの数、P (w) は単語の頻度に基づいてサンプリングされる確率分布です。
確率計算:
中心単語 t と文脈単語 c の確率はを通じて計算されます。
中心単語 t とネガティブサンプル c′の確率はを通じて計算されます。
最適化:
二項ロジスティック回帰に似ていますが、中心単語ベクトルと文脈単語ベクトルを同時に最適化する必要があります。
練習#
d。
- 中心単語 t のベクトル(次元は d)。
- 正のサンプル文脈単語 c のベクトル(次元は d)。
- K 個のネガティブサンプル単語のベクトル(各次元は d)。
連続バグオブワーズ(CBOW)#
GloVe:グローバルベクトル#
この図は GloVe(Global Vectors for Word Representation)モデルを紹介しており、これは単語埋め込みを生成するためのアルゴリズムです。GloVe は単語のグローバル共起統計情報を利用して単語ベクトルを学習します。これは、ウィンドウベースのスキップグラムや CBOW メソッドとは異なり、GloVe はコーパス全体の共起行列を直接利用して単語ベクトルを学習します。
重要なアイデア:
単語の共起カウントを直接使用して、単語ベクトル間の内積を近似します()。
グローバル共起統計:
モデルはグローバル共起統計を使用します。これは単語 i と単語 j がコーパス内で共に出現する頻度です。
損失関数 :
GloVe の損失関数は次のように定義されます:
ここで、は共起頻度が低い単語対の影響を調整するための重み関数です。とはそれぞれ単語 i と単語 j のベクトル表現です。とはバイアス項です。は単語 i と単語 j の共起頻度です。
トレーニング速度とスケーラビリティ:
GloVe モデルはトレーニングが速く、非常に大きなコーパスに拡張できます。
重み関数 :
図の右下隅に示された重み関数の形状は、通常は平滑な増加関数であり、低頻度共起語対の影響を減少させるために使用されます。
GloVe の利点:
グローバル情報:GloVe はコーパス全体の共起情報を利用し、より広範な意味関係を捉えることができます。
トレーニング効率:行列分解の形式により、GloVe はトレーニング時にウィンドウベースの方法よりも効率的です。
スケーラビリティ:GloVe は非常に大きなコーパスを処理できるため、大規模データセットで良好なパフォーマンスを発揮します。
FastText#
この図は FastText モデルにおけるサブワード埋め込み(Subword Embeddings)を紹介しており、これは単語をサブワード(n-grams)に分解することによって、より細かい意味情報を捉える改良された単語埋め込み方法です。
サブワード埋め込み:
FastText モデルはスキップグラムモデルに似ていますが、単語を n-grams(サブワード)に分解します。ここで n の範囲は 3 から 6 です。
この方法は、単語内部の意味情報を捉えることができます。例えば、単語「where」はサブワード「wh」、「her」、「ere」などに分解できます。
例:
図には単語「where」の分解例が示されています:
3-grams(三元組):<wh, whe, her, ere, re>
4-grams(四元組):<whe, wher, here, ere>
5-grams(五元組):<wher, where, here>
6-grams(六元組):<where, where>
置換操作:
中心単語と文脈単語のベクトル内積を計算する際、FastText モデルは元の単語のベクトル内積をサブワードのベクトルの合計で置き換えます。
具体的には、が元の単語のベクトル内積である場合、FastText ではこの内積がすべてのサブワードベクトル内積の合計に置き換えられます:
ここで、g は単語のサブワードの 1 つであり、n-grams () は単語のすべての可能なサブワードの集合を示します。
FastText モデルの利点:
内部構造を捉える:
単語をサブワードに分解することにより、FastText は単語内部の構造情報を捉えることができ、単語の意味を理解するのに非常に役立ちます。
稀な単語や未知の単語を処理する:
サブワード埋め込みは、稀な単語や未知の単語をより良く処理できます。なぜなら、単語が訓練データに出現しなくても、そのサブワードはすでに出現している可能性があるからです。
一般化能力の向上:
サブワード埋め込みにより、モデルは新しい単語に直面したときにより良い一般化能力を持ちます。なぜなら、既知のサブワード情報を利用して新しい単語の意味を推測できるからです。
トレーニング済みの利用可能な単語埋め込み#
- word2vec: https://code.google.com/archive/p/word2vec/
- GloVe: https://nlp.stanford.edu/projects/glove
- FastText: https://fasttext.cc/
文脈化された単語ベクトルを使用した LMs#
この図は ELMo(Embeddings from Language Models)モデルの構造を示しており、これは単語埋め込みを生成するための深層学習モデルです。ELMo は Matthew E. Peters らによって 2018 年に提案され、その論文「Deep contextualized word representations」でモデルの原理と実装が詳しく説明されています。
図の要素の説明:
-
入力層(E1,E2,...,EN):
これらは単語の入力埋め込みで、通常は単語の one-hot エンコーディングまたは単語頻度エンコーディングです。 -
双方向 LSTM 層:
図には 2 層の双方向 LSTM(Long Short-Term Memory)が示されており、各層は前向きと後向きの 2 つの LSTM で構成されています。各 LSTM ユニットはシーケンスデータを処理し、単語間の長距離依存関係を捉えることができます。
双方向 LSTM は単語の前後の文脈情報を同時に考慮できるため、単語の文脈的な意味をよりよく理解できます。- 双方向 LSTM 層に関する補足説明:
- 双方向長短期記憶ネットワーク(Bidirectional Long Short-Term Memory、略して Bi-LSTM または双方向 LSTM)は、特別なリカレントニューラルネットワーク(RNN)であり、2 つの LSTM 層を使用してシーケンスデータを処理します。1 つの層は正方向(シーケンスの開始から終了まで)でデータを処理し、もう 1 つの層は逆方向(シーケンスの終了から開始まで)でデータを処理します。この構造により、ネットワークはシーケンス内の各要素の前後の文脈情報を同時に考慮できます。
- 構造:双方向 LSTM では、シーケンス内の各時間ステップ t に対して、2 つの LSTM ユニットが動作します:
前向き LSTM(Forward LSTM):この LSTM ユニットはシーケンスの最初の要素から始まり、時間ステップを正方向に処理し、最後の要素まで進みます。各時間ステップ t に対して、シーケンスの開始から現在の時間ステップまでの情報のみを考慮します。
後向き LSTM(Backward LSTM):この LSTM ユニットはシーケンスの最後の要素から始まり、時間ステップを逆方向に処理し、最初の要素まで進みます。各時間ステップ t に対して、シーケンスの終了から現在の時間ステップまでの情報のみを考慮します。 - 情報の流れ:各時間ステップ t で、前向き LSTM と後向き LSTM はそれぞれ隠れ状態を生成します。これらの隠れ状態は、シーケンス内のその位置の要素に関する文脈情報を含んでいます。1 つはシーケンスの前から、もう 1 つはシーケンスの後からの情報です。
- 出力:双方向 LSTM の出力は、いくつかの異なる組み合わせ方法があります:
- 結合(Concatenation):前向きと後向き LSTM の各時間ステップの出力を結合し、より長いベクトルを形成します。この方法は、シーケンス内の各位置の双方向の文脈情報を保持します。
- 加算(Summation):前向きと後向き LSTM の出力ベクトルを各時間ステップで加算します。この方法は双方向情報を統合しますが、一部の詳細が失われる可能性があります。
- 平均(Averaging):前向きと後向き LSTM の出力ベクトルを各時間ステップで平均します。この方法も双方向情報を統合しますが、特定の方向の情報に対するモデルの感度が低下する可能性があります。
- 単独使用(Separate Use):特定の状況では、前向きと後向き LSTM の出力が個別に使用されることがあります。特に、モデルの異なる部分が異なる方向の情報を必要とする場合です。
- 双方向 LSTM 層に関する補足説明:
-
出力層(T1,T2,...,TN):
これらは LSTM で処理された単語の表現です。各単語の表現は、異なる LSTM 層の出力の加重和です。
原理: -
単語埋め込みの文脈化:従来の単語埋め込み(Word2Vec や GloVe など)は静的で、単語の文脈を考慮しません。一方、ELMo は双方向 LSTM を使用することで、文脈化された単語埋め込みを生成できます。すなわち、同じ単語が異なる文脈で異なる表現を持つことができます。
-
長距離依存を捉える:LSTM はシーケンスデータを処理するのに特に適しており、単語間の長距離依存関係を捉えることができます。これは、言語の複雑な構造(文法や意味)を理解するのに非常に重要です。
-
双方向情報の流れ:単語の前後の文脈情報を同時に考慮することで、ELMo は単語の意味をより包括的に理解できます。これは、曖昧な単語を処理し、文脈を理解するのに重要です。
単語ベクトルの評価#
- 外的評価
- これらの単語埋め込みを実際の NLP システムに埋め込み、性能が向上するかどうかを確認します。これには時間がかかる可能性がありますが、依然として最も重要な評価指標です。
- 内的評価
- 特定の / 中間サブタスクを評価します。
- 迅速に計算できます。
- これが実際に下流タスクに役立つかどうかは不明です。
語彙の仮定:訓練セットから構築された数万単語を含む固定語彙が存在すると仮定します。テスト時に遭遇するすべての新しい単語は、単一の「UNK」(未知の単語)にマッピングされます。
語彙マッピングの例:
一般的な単語:例えば「hat」(帽子)は語彙内の「pizza」(インデックス)にマッピングされ、「learn」(学ぶ)は「tasty」(インデックス)にマッピングされます。
変種、スペルミス、新しい項目:「taaaaaasty」(変種)、「laern」(スペルミス)、「Transformerify」(新しい項目)はすべて「UNK」(インデックス)にマッピングされます。
有限語彙仮定の限界:多くの言語では、有限語彙仮定の意味は小さくなります。なぜなら、多くの言語には複雑な形態学や単語構造があり、これによりより多くの単語タイプが存在しますが、各単語の出現回数は少なくなります。
言語モデル#
狭義#
有限シーケンス(文法的または非文法的)に確率を割り当てる確率モデル
GPT-3 はこのように動作しますが、モデルは 1750 億のパラメータを持つ非常に大きなニューラルネットワークとして実装されています!
広義#
図は、主に 3 つの主要な事前トレーニングされた言語モデルアーキテクチャを詳細に示しています:デコーダーのみのモデル(Decoder-only models)、エンコーダーのみのモデル(Encoder-only models)、エンコーダー - デコーダーモデル(Encoder-decoder models)、およびそれらの典型的なアプリケーション。
- デコーダーのみのモデル(Decoder-only models):
代表モデル:GPT-x モデル(GPT-2、GPT-3 など)。これらのモデルは主に生成タスク(テキスト生成、質問応答など)に使用されます。通常、自己回帰的方法を使用して、左から右にテキストを生成します。 - エンコーダーのみのモデル(Encoder-only models):
代表モデル:BERT、RoBERTa、ELECTRA。これらのモデルはエンコーダーを通じて入力テキストを処理し、テキストの表現を生成しますが、テキスト生成は行いません。主に理解タスク(テキスト分類、名前付きエンティティ認識など)に使用されます。BERT モデルは、単語の文脈表現を学習するためにマスク言語モデル(Mask LM)と次の文の予測(NSP)を事前トレーニングの目標として使用しています。 - エンコーダー - デコーダーモデル(Encoder-decoder models):
代表モデル:T5、BART。これらのモデルはエンコーダーとデコーダーを組み合わせて、生成タスクと理解タスクの両方を処理できます。エンコーダーはテキストの表現を生成し、デコーダーはこれらの表現に基づいて出力テキストを生成します。この構造により、モデルは生成タスクと理解タスク(翻訳、要約など)を処理できます。
図の例の説明: - BERT:
BERT はマスク言語モデル(Mask LM)と次の文の予測(NSP)を事前トレーニングの目標として使用しています。図は BERT が 2 つのマスクされた文(Masked Sentence A と Masked Sentence B)と 1 つの未ラベルの文対(Unlabeled Sentence A and B Pair)をどのように処理するかを示しています。 - T5:
T5 はエンコーダー - デコーダーモデルであり、異なる事前トレーニングの目標を使用しています。図は T5 が異なるタスクでどのように適用されるかを示しており、翻訳(英語からドイツ語への翻訳)、要約(テキストの要約)、およびテキスト評価(テキストの受容性を判断)を含みます。 - 原理:
マスク言語モデル(Mask LM):BERT では、入力テキスト内のいくつかの単語がランダムに特殊な [MASK] マークに置き換えられ、モデルはこれらの隠された単語を予測する必要があります。この方法により、モデルは単語の文脈表現を学習できます。
次の文の予測(NSP):BERT は NSP タスクを使用して文間の関係を学習します。モデルは 2 つの入力文が連続したテキストであるかどうかを予測する必要があります。
エンコーダー - デコーダー構造:T5 と BART では、エンコーダーが最初に入力テキストを処理し、テキストの表現を生成します。次に、デコーダーはこれらの表現に基づいて出力テキストを生成します。この構造により、モデルは生成タスクと理解タスクを処理できます。
ニューラル言語モデルの構築#
- 約:Y. Bengio, et al. (2000/2003): A Neural Probabilistic Language Model
- 固定ウィンドウニューラル言語モデルの改善:
- スパース性の問題なし:
ニューラル言語モデルは、各特定の n-gram の確率を計算する必要がないため、スパース性の問題を引き起こしません。代わりに、単語ベクトルと文脈を学習して次の単語を予測します。 - 観察されたすべての n-grams を保存する必要はありません:
ニューラルモデルは、コーパス内で観察されたすべての n-grams とそのカウントを保存する必要がないため、ストレージ要求が減少します。
- スパース性の問題なし:
- 存在する問題:
- 固定ウィンドウが小さすぎる:
固定ウィンドウのサイズは、モデルが考慮できる文脈の範囲を制限します。 - ウィンドウを拡大するとパラメータ数が増加する:
より多くの文脈情報を含むようにウィンドウを拡大しようとすると、モデルのパラメータ数(重み行列 W のサイズ)も増加し、過剰適合や計算コストの増加を引き起こす可能性があります。 - ウィンドウは決して十分ではない:
ウィンドウがどれだけ大きくても、長距離の依存関係の一部は捉えられません。 - 入力処理に対称性が欠ける:
固定ウィンドウモデルでは、シーケンス内の異なる位置の単語が異なる重みで処理され、対称性が欠けています。 - 解決策:
リカレントニューラルネットワーク(RNN):
図は、任意の長さの入力を処理できるニューラルネットワークアーキテクチャが必要であることを示しています。RNN は、シーケンスデータを処理するための解決策の 1 つです。なぜなら、シーケンスの長さに関係なく、循環接続を通じて処理できるからです。
- 固定ウィンドウが小さすぎる:
- 固定ウィンドウニューラル言語モデルの改善:
単語ベクトルに関する詳細#
この図は MorphTE(テンソル埋め込みに形態学を注入する方法)のワークフローを示しており、論文「MorphTE: Injecting Morphology in Tensorized Embeddings」(NeurIPS 2022)からのもので、著者には Guobing Gan、Peng Zhang などが含まれています。以下は図の内容の詳細な説明です:
-
左側 - 語彙(Vocabulary):
「kindness」、「unkindly」、「unfeelingly」など、複数の単語を含む語彙を示しています。これらの単語は後続の処理ステップに入力されます。 -
中間左側 - 形態素分割(Morpheme Segmentation):
語彙内の各単語を形態素に分割します。例えば、「kindness」は「kind」と「ness」に分割され、「unkindly」は「un」、「kind」、「ly」に分割され、「unfeelingly」は「un」、「feel」、「ing」、「ly」に分割されます。分割された形態素は行列に配置され、行数は語彙のサイズ | V|、列数は単語の形態素の数 n です。 -
中間右側 - インデックス(Indexing):
分割された形態素にインデックスを付け、各形態素を一意の識別子にマッピングします。インデックス付けされた結果は、後続の埋め込み操作に使用されます。 -
右側 - 形態素埋め込み行列(Morpheme Embedding Matrices):
形態素の左側と右側の部分を処理するための 2 つの形態素埋め込み行列とを含みます。これらの行列は形態素インデックスを低次元ベクトル表現に変換します。 -
最右側 - 単語埋め込み行列(Word Embedding matrix):
形態素埋め込み行列の結果を組み合わせることによって(図では加算操作として示されています)、最終的な単語埋め込みベクトルが生成されます。これらのベクトルは単語の意味と形態情報を表します。
図の記号とパラメータの説明は以下の通りです:
- :単語の形態素の数(形態素の順序)。
- :形態素ベクトルの次元サイズ。
- :語彙のサイズ。
- :形態素語彙のサイズ。
全体として、この図は MorphTE がどのように形態素分割、インデックス付け、埋め込み操作を通じて単語を形態学的情報を含むベクトル表現に変換するかを詳細に示しています。
単語ベクトルのトレーニング#
どうやってトレーニングしますか?
練習#
c
word2vec の勾配を計算する#
全体的なアルゴリズム#
この画像は、主に単語埋め込み関連のタスクに使用される全体的なアルゴリズムを示しており、以下は詳細な説明です:
入力部分#
- テキストコーパス:アルゴリズムが処理するテキストデータのソース。
- 埋め込みサイズ d:埋め込みの次元サイズで、各単語の最終的な表現ベクトルの次元を決定します。
- 語彙 V:出現する可能性のあるすべての単語を含む語彙。
- 文脈サイズ m:テキスト内で考慮される文脈の範囲を定義するためのウィンドウサイズ。
初期化部分#
語彙 V 内の各単語 i に対して、2 つのベクトルとをランダムに初期化します。
トレーニング部分#
トレーニングコーパスを反復処理し、各トレーニングインスタンス(ここではターゲット単語、は文脈単語)について:
- ターゲット単語ベクトルを更新:
- 公式はで、ここでです。ここでは学習率で、各更新のステップサイズを制御します。
- 文脈単語ベクトルを更新:
- 語彙 V 内の各単語について、公式はです。
- (現在の文脈単語)の場合、;の場合、です。はターゲット単語が与えられたときの単語の出現確率を示します。
右側には、トレーニングデータを特定の形式に変換する例(例えば (in, problems) など)が示されており、ターゲット単語と文脈単語の組み合わせ形式を反映しています。