教室ノート
単語表現#
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 など))を使用することを検討できます。これらのモデルは通常、よりコンパクトで、より少ないパラメータでより複雑な言語パターンを学習できます。
ナイーブベイズ#
ナイーブベイズは、ベイズの定理に基づく単純な確率分類器であり、特徴間の独立性を仮定します。テキスト分類タスクにおいて、ナイーブベイズモデルは、与えられたカテゴリ cj の下で単語 wi が出現する確率を計算するために使用できます。
公式は次のとおりです:
公式の説明:
- :与えられたカテゴリ cj の条件下で、単語 wi が出現する確率を示します。これはモデルの予測された推定確率です。
- Count (wi,cj):カテゴリ cj 内で単語 wi が出現する回数を示します。
- :カテゴリ cj 内でのすべての単語の出現回数の合計を示します。ここで V は語彙を示し、すべての可能な単語を表します。
- α:データのスパース性の問題を処理するための平滑化パラメータで、ゼロ確率を回避します。これは 0 と 1 の間の値です。
- ∣V∣:語彙のサイズを示し、語彙内の異なる単語の数を表します。
平滑化技術:
ナイーブベイズモデルにおいても、平滑化技術はデータのスパース性の問題を処理するために使用されます。具体的には、公式内の平滑化技術は、分子と分母の両方に α を加えることによって実現されます: - 分子に α を加える:Count (wi,cj)+α、これは単語 wi がカテゴリ cj に一度も出現しなかった場合でも、その確率がゼロにならず、α になることを示します。
- 分母に α∣V∣を加える:、これは特定の単語がカテゴリ cj に一度も出現しなかった場合でも、その確率がゼロにならず、均等に分配されることを示します。
なぜ 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」に対して、モデルはトレーニングサンプル (into, problems)、(into, turning)、(into, banking)、(into, crises) などを生成します。
トレーニング目標:
モデルのトレーニング目標は、一組のパラメータを見つけることであり、これらのパラメータは文脈単語の確率を最大化することができます。言い換えれば、モデルが学習しようとしている単語ベクトルは、与えられた中心単語の文脈単語を最もよく予測できるようにすることです。
目標関数:
をどのように定義しますか?
これは単語ベクトルと Softmax 関数を使用して実現されます。
2 つのベクトルセット:
語彙 V 内の各単語に対して、2 つのベクトルセットを使用します:
ua∈Rd:中心単語 a のベクトルで、すべての a∈V に対して。
vb∈Rd:文脈単語 b のベクトルで、すべての b∈V に対して。
内積:
内積 ua⋅vbを使用して、中心単語 a と文脈単語 b が一緒に出現する可能性を測定します。
Softmax 関数:
内積を確率分布に変換するために Softmax 関数を使用します。これは、内積の指数をすべての可能な文脈単語の指数和で正規化することによって実現されます。
確率分布:
P (⋅∣wt) は語彙 V 上で定義された確率分布であり、中心単語 wtが与えられたとき、各可能な文脈単語が出現する確率を示します。
vs 多項式ロジスティック回帰#
- 多項式ロジスティック回帰:
公式:
多項式ロジスティック回帰は多クラス問題に使用され、その公式は次のとおりです:
P(y=c∣x)=∑j=1mexp(wj⋅x+bj)exp(wc⋅x+bc)
ここで、y はカテゴリラベル、c はそのうちの 1 つのカテゴリ、x は入力特徴ベクトル、wcと bcはそれぞれカテゴリ c の重みベクトルとバイアス項、m はカテゴリの総数です。
説明:
公式の分子は、入力特徴ベクトル x とカテゴリ c の重みベクトル wcの内積にバイアス項 bcの指数を加えたものです。
分母はすべてのカテゴリの指数和であり、正規化に使用され、すべてのカテゴリの確率の合計が 1 になるようにします。 - スキップグラムモデル:
公式:
スキップグラムモデルにおける確率計算の公式は次のとおりです:
P(wt+j∣wt)=∑k∈Vexp(uwt⋅vk)exp(uwt⋅vwt+j)
ここで、wtは中心単語、wt+jは文脈単語、uwtと vwt+jはそれぞれ中心単語と文脈単語のベクトル表現、V は語彙です。
説明:
公式の分子は中心単語 wtと文脈単語 wt+jのベクトル内積の指数です。
分母は中心単語 wtと語彙内のすべての単語のベクトル内積の指数和であり、正規化に使用されます。 - 比較:
本質的には∣V∣路の分類問題:スキップグラムモデルは多クラス問題として見ることができ、ここで∣V∣は語彙のサイズです。
固定した uwtの場合:中心単語のベクトル uwtを固定すると、問題は多項式ロジスティック回帰問題に簡略化されます。
非凸最適化問題:中心単語と文脈単語のベクトルを同時に学習する必要があるため、トレーニング目標は非凸であり、最適化プロセスには複数の局所最適解が存在する可能性があります。
vs 多項式ロジスティック回帰#
実践#
答えは (b) です。
各単語には 2 つの d 次元ベクトルがあるため、2 × | V | × d です。
質問:なぜ各単語には 1 つではなく 2 つのベクトルが必要ですか?
回答:単語は自身の文脈ウィンドウ内に出現することはあまりないからです。例えば、単語「dog」が与えられた場合、P (dog∣dog) は低くなるべきです。もし 1 つのベクトルセットだけを使用すると、モデルは本質的に最小を求める必要があり、これは自己参照ベクトルがあまりにも類似してしまい、モデルの性能に影響を与えます。
質問:どのベクトルセットが単語埋め込みとして使用されますか?
回答:これは経験的な問題です。通常、を単語埋め込みとして使用しますが、2 つのベクトルセットを結合して使用することもできます。
スキップグラムとネガティブサンプリング(SGNS)および他の変種#
問題の説明:
従来のスキップグラムモデルでは、中心単語と文脈単語のペア(t,c)を得るたびに、語彙内のすべての単語を使用して文脈単語ベクトル vkを更新する必要があります。これは計算上非常に高価です。
ネガティブサンプリング法:
ネガティブサンプリングでは、語彙内のすべての単語を考慮するのではなく、K 個の(通常 K は 5 から 20 の間)ネガティブサンプルをランダムにサンプリングします。これは、語彙から K 個の単語をランダムに選択してネガティブサンプルとして使用することを意味します。
Softmax とネガティブサンプリングの公式:
Softmax:元のスキップグラムモデルは Softmax 関数を使用して確率を計算し、公式は次のとおりです:
y=−log(∑k∈Vexp(ut⋅vk)exp(ut⋅vc))
ネガティブサンプリング:ネガティブサンプリング法は Softmax をより単純な公式に置き換え、公式は次のとおりです:
y=−log(σ(ut⋅vc))−i=1∑KEj∼P(w)log(σ(−ut⋅vj))
ここで、σ(x)=1+exp (−x) 1は sigmoid 関数であり、内積を確率に変換します。
重要な考え方:
元々の∣V∣- 路の分類問題(ここで∣V∣は語彙のサイズ)を一連の二項分類タスクに変換します。
単語ペア (t,c) を得るたびに、モデルは語彙内のすべての単語から c を予測するのではなく、(t,c) が正のサンプルペアであり、(t,c′) がネガティブサンプルペアであることを予測します。ここで c′は小さなサンプリングセットからランダムに選択されます。
正のサンプルとネガティブサンプル:
正のサンプル:例えば、中心単語「apricot」と文脈単語「tablespoon」は正のサンプルペアです。
ネガティブサンプル:例えば、中心単語「apricot」とランダムに選ばれた単語「aardvark」はネガティブサンプルペアです。
損失関数:
損失関数 y は次のように定義されます:
y=−log(σ(ut⋅vc))−i=1∑KEj∼P(w)log(σ(−ut⋅vj))
ここで、σ(x)=1+exp (−x) 1は sigmoid 関数であり、K はネガティブサンプルの数、P (w) は単語の頻度に基づいてサンプリングされる確率分布です。
確率計算:
中心単語 t と文脈単語 c の確率 P (y=1∣t,c) は σ(ut⋅vc) を通じて計算されます。
中心単語 t とネガティブサンプル c′の確率 P (y=0∣t,c′) は 1−σ(ut⋅vc′)=σ(−ut⋅vc′) を通じて計算されます。
最適化:
二項ロジスティック回帰に似ていますが、中心単語ベクトル utと文脈単語ベクトル vcを同時に最適化する必要があります。
実践#
d。
- 中心単語 t のベクトル u t(次元は d)。
- 正のサンプル文脈単語 c のベクトル v c(次元は d)。
- K 個のネガティブサンプル単語のベクトル(各次元は d)。
連続バッグオブワーズ(CBOW)#
GloVe:グローバルベクトル#
この図は、GloVe(Global Vectors for Word Representation)モデルを紹介しており、これは単語埋め込みを生成するためのアルゴリズムです。GloVe は、単語の全体的な共起統計情報を利用して単語ベクトルを学習します。これは、ウィンドウベースのスキップグラムや CBOW 方法とは異なり、GloVe はコーパス全体の共起行列を直接利用して単語ベクトルを学習します。
重要な考え方:
単語の共起カウントを直接使用して、単語ベクトル間の内積(ui⋅vj)を近似します。
全体的な共起統計:
モデルは、単語 i と単語 j がコーパス内で共に出現する頻度である全体的な共起統計 Xijを使用します。
損失関数 J(θ):
GloVe の損失関数は次のように定義されます:
J(θ)=i,j∈V∑f(Xij)(ui⋅vj+bi+b~j−logXij)2
ここで、f (Xij) は共起頻度が低い単語対の影響を調整するための重み関数です;uiと vjはそれぞれ単語 i と単語 j のベクトル表現です;biと bjはバイアス項です;Xijは単語 i と単語 j の共起頻度です。
トレーニング速度とスケーラビリティ:
GloVe モデルはトレーニングが速く、非常に大きなコーパスに拡張できます。
重み関数 f:
図の右下隅に示された図は、重み関数 f の形状を示しており、通常は低頻度共起単語対の影響を減少させるための滑らかな増加関数です。
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 モデルは元の単語のベクトル内積の代わりにサブワードのベクトルの合計を使用します。
具体的には、もし ui⋅vjが元の単語のベクトル内積であれば、FastText ではこの内積がすべてのサブワードベクトル内積の合計に置き換えられます:
g∈n-grams(wi)∑ug⋅vj
ここで、g は単語 wiのサブワードの 1 つであり、n-grams (wi) は単語 wiのすべての可能なサブワードの集合を示します。
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-gram モデルのようにコーパス内で観察されたすべての 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 内の各単語に対して、公式はです。
- (現在の文脈単語)の場合、;の場合、です。はターゲット単語が与えられたときの単語の出現確率を示します。
右側には、トレーニングデータを特定の形式に変換する例(例えば (into, problems) など)が示されており、ターゲット単語と文脈単語の組み合わせ形式を反映しています。