741 Views
December 01, 23
スライド概要
自然言語処理の基礎の輪読会第7回の発表スライドです。
2023年11月30日(木) 18:30~
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2023年度後期輪読会#7 自然言語処理の基礎5章:言語モデル 京都大学理学部一回生 千葉 一世
言語モデルの定式化 Y = ( y1 , y2 , … , yT ) を長さTの単語列 P(Y) を単語列Yの生成される確率とすると、 条件付き確率 P(a,b) = P(a)P(b | a) を用いて以下のように表せる P(Y) = P(y1, y2, … , yT) = P(y1, y2, … , yT-1)P(yT | y1, y2, … , yT-1) = P(y1, y2, … , yT-2)P(yT-1 | y1, y2, … , yT-2)P(yT | y1, y2, … , yT-1) ・ ・ ・ = P(y1) ς𝑇𝑡=1 P(yt | Y1:t-1)
「に感動を」「は良い天気で」などは文法として間違っていないが、 文章としては不自然。単語列が文であることを明示的に扱うために、 以下の特殊単語を導入 BOS (beginning of sentence) : 文の始まりを表し、文の0番目に置く EOS (end of sentence) : 文の終わりを表し、文のT+1番目(文末)に置く BOS, EOS を導入すると、文 Y の生成確率は次のように表せる P(Y) = P(y0) ς𝑇+1 𝑡=1 P(yt | Y0:t-1) 𝑇+1 ς = 𝑡=1 P(yt | Y0:t-1) (∵P(y0) = P(BOS) = 1) この条件付確率をモデル化する
言語モデルの活用例 ⚫ 文章の自然さの判定 P(Y1) > P(Y2) ⇒ Y1 の方がY2 より自然な文である 複数の文章の候補から、P(Y)が最大となる文が最も自然な文 実際には、負の対数尤度が最小になるものを選ぶ argmax P(Y) = argmin – logP(Y) = argmin − σ𝑇+1 𝑡=1 P(yt | Y0:t-1)
言語モデルの活用例 テキストの生成 P(yt | Y0:t-1) を用いて、BOSからEOSが選ばれるまでサンプリングする ● 貪欲法(greedy search) : P(yt | Y0:t-1) が最大となるytを選ぶ 𝒚𝟎 = 𝑩𝑶𝑺 , 𝒚𝒕 = 𝒂𝒓𝒈𝐦𝐚𝐱 𝑷 𝒗 𝒀𝟎∶𝒕−𝟏 ) 𝒗∈𝑽 貪欲法では、文全体の生成確率が大きくなるわけではない 全ての文の生成確率を比較することはできない ↓ ビームサーチ(beam search) 累積確率の上位k個を 保持しながら探索する
言語モデルの具体例
2. 便利なテンプレ集 言語モデルの具体例 n グラム言語モデル ● コーパス内の単語列を数え上げることに よって、各単語列の生成確率を求める ● 計算量が少ない ● ゼロ頻度問題が発生 ● 過去のn-1単語(有限個)で近似 ニューラル言語モデル ● 単語列を単語ベクトルとして、ニューラルネッ トワークを用いて、次の単語の生成確率を予測 する。 ● 計算量が多い ● ゼロ頻度問題が起こらない ● nグラムより性能が良い 順伝播型 再帰型 過去のn-1単語で近似 過去の全ての単語 を利用できる
n グラム言語モデル n個の連続した単語の並びをnグラムと呼ぶ 数百単語前に出現した単語は次の単語の予測にあまり影響しないと いう考えの元、過去 n – 1 単語のみから近似する #(X) でコーパス中でXが出現した回数を表すと P(yt | Y0 : t-1) ≈ P(yt | Yt-n+1 : t-1) = #(Yt-n+1 : t-1, yt) σ𝑦 #(Yt−n+1 : t−1, y)
nグラム言語モデル ゼロ頻度問題 コーパスに一つも含まれないnグラムは、出現確率が0となり、 そのようなnグラムを含む文章の出現確率は0となってしまう。 これをゼロ頻度問題という 平滑化(スムージング) : コーパスに含まれないnグラムに対しても、 0より大きな数字が割り当てられるように調節する 0より大きいものから少し引いて、それを0のものに割り当てていく 平滑化には多くの種類があるが、性能の良い補間版Kneser-Ney 平滑化を用いる
補間版kneser-Ney スムージング n-1, n-2, …,2,1グラムでの値を元にどれだけ補正するかを決める 𝐴 𝑌 = | 𝑣 # 𝑌, 𝑣 > 0 }| , 𝐵 𝑌 = | 𝑣 # 𝑣, 𝑌 > 0 }| を単語列Yの直後、直前に出現する単語の種類の数とする 𝐴 𝑌 λ Y =α , Pi = P yt Yt−i+1∶t−1 ) σ𝑣 #(𝑌, 𝑣) max # 𝑌𝑡−𝑛+1∶𝑡 − α , 0 Pn = + λ 𝑌𝑡−𝑛+1∶𝑡−1 Pn−1 σ𝑦 #(𝑌𝑡−𝑛+1∶𝑡−1 , 𝑦) max 𝐵(𝑌𝑡−𝑘+1∶𝑡 ) − α , 0 P𝑘 = + λ 𝑌𝑡−𝑘+1∶𝑡−1 Pk−1 (1 ≦ 𝑘 ≦ 𝑛) σ𝑦 𝐵(𝑌𝑡−𝑛+1∶𝑡−1 , 𝑦) max 𝐵(𝑦𝑡 ) − α , 0 1 P1 = + λ(∅) σ𝑦 𝐵(𝑦) |𝑉|
n = 3での例 , P(c | ab) max # 𝑎𝑏𝑐 − α , 0 𝐴 𝑎𝑏 P3 (𝑐) = +α P2 (𝑐) σ● #(𝑎𝑏●) σ● #(𝑎𝑏●) max 𝐵 𝑏𝑐 − α , 0 𝐴 𝑏 P2 (𝑐) = +α P1 (𝑐) σ● 𝐵(𝑏●) σ● #(𝑏●) max 𝐵 𝑐 − α , 0 𝐴 ∅ 1 P1 𝑐 = +α σ● 𝐵 ● σ● # ● |𝑉|
補間版?kneser-Ney スムージング 𝑅 𝑌 = | 𝑣 𝑥, 𝑣 ∈ 𝑉, # 𝑥, 𝑌, 𝑣 > 0 }| として、 max # 𝑌𝑡−𝑛+1∶𝑡−1 − α , 0 𝑅 𝑌𝑡−𝑛+1∶𝑡−1 Pn = +α Pn−1 σ𝑦 #(𝑌𝑡−𝑛+1∶𝑡−1 , 𝑦) σ𝑣 #(𝑌𝑡−𝑛+1∶𝑡−1 , 𝑣) max 𝐵(𝑌𝑡−𝑘+1∶𝑡−1 ) − α , 0 𝑅 𝑌𝑡−𝑘+1∶𝑡−1 P𝑘 = +α Pk−1 (1 ≦ 𝑘 ≦ 𝑛) σ𝑦 𝐵(𝑌𝑡−𝑘+1∶𝑡−1 , 𝑦) σ𝑦 𝐵(𝑌𝑡−𝑘+1∶𝑡−1 , 𝑦) max 𝐵(𝑦𝑡 ) − α , 0 𝑅(∅) 1 P1 = +α σ𝑦 𝐵(𝑦) σ𝑦 𝐵(𝑦) |𝑉| https://qiita.com/nymwa/items/daedca839430750c3551
順伝播型ニューラル言語モデル 過去n-1単語の列をワンホットベクトルで考え、単語ベクトル列に変換 これを入力特徴量とし、語彙サイズのベクトルotを出力とする ot は各単語の生成確率を表すベクトルになる et = flatten(EYt-n+1 : t-1) zt = FFNN(et) ot = f(Wzt + b) Yt-n+1 : t-1 EYt-n+1 : t-1
再帰型ニューラル言語モデル 𝑧𝑡 = { 𝑅𝑁𝑁 𝑦𝑡−1 , 𝑧𝑡−1 0 𝑜𝑡 = 𝑓(𝑊𝑧𝑡 + 𝑏) 1≦𝑡 ≦𝑇+1 (𝑡 < 1)