↓前回(1回目)の記事:
↓次回(3回目)の記事:
↓4回目の記事:
↓5回目の記事:
↓6回目の記事:
0. 前回までのあらすじ
$$\huge{「意味」とは「状態」だ。}$$
$$\huge{「単語」とは状態を変換する「非線形作用素」だ。}$$
こう考えると、「文」は「作用素の合成」として理解することが出来るし、
「意味を理解すること」とは「状態の観測」として説明することが出来る。
―こう考えて、量子力学の真似事をしながら、新しい自然言語処理モデル「複素テイラー単語関数言語モデル」の理論(学習以外)を組み立てたのが前回だ。
なので今回は、学習方法に関する理論を組み立てる。
前回、第2章まで書いた。
今回の記事は、第3章から開始する。
3. 理論(学習)
3-1. 次単語予測
複素テイラー単語関数言語モデルで、有意義な 意味 = 状態 ベクトルを学習するには、
コーパスを使って、何かしらの学習タスクを実行する必要がある。
その「何かしらの学習タスク」というのは、例えば、「次の単語を予測する」というものでもよい。
例えば:
ジャイアンという男はガキ大将で乱暴な悪だ。
という文があったとしよう。
ここから機能語を取り除くと:
ジャイアン, 男, ガキ大将, 乱暴, 悪
のようになる。
ここから、次のような教師データを得られる。
| 入力(意味) | 正解(単語) |
|---|---|
| $ジャイアン(\ket{0})$ | 男 |
| $男\big(ジャイアン(\ket{0})\big)$ | ガキ大将 |
| $ガキ大将\Big(男\big(ジャイアン(\ket{0})\big)\Big)$ | 乱暴 |
| $乱暴\bigg(ガキ大将\Big(男\big(ジャイアン(\ket{0})\big)\Big)\bigg)$ | 悪 |
これは、ある種の分類タスクとして理解することが出来る。
つまり、意味$\ket{z}$ が与えられた時に次の単語が $w$ である確率を:
$$\mathbb{P}_{\rm next}[w|\ket{z}]$$
と書くなら、モデルは:
$$\left(
\begin{matrix}
\mathbb{P}_{\rm next}[単語0|\ket{z}]\\
\mathbb{P}_{\rm next}[単語1|\ket{z}]\\
\vdots\\
\mathbb{P}_{\rm next}[単語V-1|\ket{z}]
\end{matrix}
\right)$$
を出力するようにすればよい。
例えば、入力 $\ket{ジャイアン}$ に対する教師データは「男」であるので、
これを学習することとは:
$$\left(
\begin{matrix}
\mathbb{P}_{\rm next}[単語0\ \ \ \ \ \ \ |\ket{ジャイアン}]\\
\mathbb{P}_{\rm next}[単語1\ \ \ \ \ \ \ |\ket{ジャイアン}]\\
\vdots\\
\mathbb{P}_{\rm next}[単語i-1\ |\ket{ジャイアン}]\\
\mathbb{P}_{\rm next}[男\ \ \ \ \ \ \ \ \ \ \ \ |\ket{ジャイアン}]\\
\mathbb{P}_{\rm next}[単語i+1\ |\ket{ジャイアン}]\\
\vdots\\
\mathbb{P}_{\rm next}[単語V-1|\ket{ジャイアン}]
\end{matrix}
\right)=\left(
\begin{matrix}
0\\
0\\
\vdots\\
0\\
1\\
0\\
\vdots\\
0
\end{matrix}
\right)$$
を目指してモデル内部のパラメータ(つまり今回は$A_{w,n}$)を更新することだ。
これは分類タスクだから、損失関数はクロスエントロピーでよいだろう。
3-2. 次単語の確率をどうするか
では、$\mathbb{P}_{\rm next}[単語i|\ket{z}]$ は $i$ や $\ket{z}$ を使ってどう表されるだろうか。
この問題は 仮想単語 $\mathbb{next}$ と、 量子力学のPOVM(正値作用素測度)という理論を使って解決できる。
具体的には:
$$\mathbb{P}_{\rm next}[単語i|\ket{z}] := \Big|
\bra{単語i}
G^{-\frac{1}{2}}
\mathbb{next}(
\ket{z}
)
\Big|^2$$
とすればよい。
但し:
$$G=\sum_i \left(\ketbra{単語i}{単語i}\right)$$
とする。
量子力学を参考にするなら、$\mathbb{P}_{\rm next}[単語i|\ket{z}]$ を $i$ と $\ket{z}$ で表す方法として一番自然なのは:
$$\mathbb{P}_{\rm next}[単語i|\ket{z}] = \left|\braket{単語i|z}\right|^2$$
とすることだろう。
これは、$\ket{z}$ が $\ket{単語i}$ として観測される確率だ。
しかし、これには2つ問題がある。
3-2-1. 関数 「next」
1つ目は、 $\ket{z}=\ket{単語i}$ の場合に:
$$\mathbb{P}_{\rm next}[単語i|\ket{単語i}] = \left|\braket{単語i|単語i}\right|^2=1$$
となってしまうということだ。
量子力学的には 「 $\ket{単語i}$ が $\ket{単語i}$ である確率」 なのだから、$1$になって当然だ。
しかし次単語予測としては、これではお話にならない。
この問題を解決するアイデアの一つは:
$$\mathbb{P}_{\rm next}[単語i|\ket{z}] = \Big|\bra{単語i}\mathbb{next}(\ket{z})\Big|^2$$
とする関数 $\mathbb{next}$ を学習することだ。
$\mathbb{next}(\ket{z})$ は、 $\ket{z}$ そのものではなく:
$$\ket{z}の次の単語がwであるときの、\ket{w}$$
だ。これを今後「次の単語の意味」と呼ぶ。
だから上記の確率は、$\ket{z}$ の「次の単語の意味」が $\ket{単語i}$ として観測される確率、
つまり $\ket{z}$の次の単語が 単語$i$ である確率を表している。
このようにすれば、$\ket{z}=\ket{単語i}$ のときも:
$$\mathbb{P}_{\rm next}[単語i|\ket{単語i}] = \Big|\bra{単語i}\mathbb{next}(\ket{単語i})\Big|^2$$
は:
$$\mathbb{next}(\ket{単語i})\neq\ket{単語i}$$
である限り、$1$未満にちゃんと収まる。
3-2-2. 仮想単語 next の学習
では 関数 $\mathbb{next}$ はどう学習すればよいか。
答えは、「単語たちと同じように学習する」である。
例えば「ジャイアン 男」の次に「ガキ大将」が来ることを学習するときは:
$$\mathbb{P}_{\rm next}\Big[ガキ大将|男\big(ジャイアン(\ket{0})\big)\Big] = \Big|\big(ガキ大将(\ket{0})\big)^\dagger\mathbb{next}\Big(男\big(ジャイアン(\ket{0})\big)\Big)\Big|^2$$
が$1$になるように学習すればよい。
右辺を見てみると、 $\mathbb{next}$ は、他の単語 (ジャイアン, 男, ガキ大将) と同じように、意味の関数として登場している。
そう、$\mathbb{next}$ は、モデル内で単語と同じように扱える。
単語と同じように、$\mathbb{next}$ に:
$$\mathbb{next}(z)=\sum_{n=0}^k \left(\frac{
A_{\mathbb{next},n} {\rm vec}(z^{\otimes n})
}{n!} \right)$$
とするための 行列 $A_{\mathbb{next},n}$ のリストを与えればよい。
こうすれば$\mathbb{next}$ の学習も、他の単語とほとんど同じ要領でやることが出来る。
「単語と同じように扱える」ことを言うため、$\mathbb{next}$ のことを「仮想単語」と呼んでもいいだろう。
ここで、$\mathbb{next}$ の学習が、他の単語と「ほとんど」同じ要領で出来ると言ったのは、2つの「特別扱い」があるからである。
1つ目は初期値の取り扱いである。
普通の単語$w$の場合は、行列 $A_{w,n}$ は正規乱数などでランダム初期化すればよいだろう。
だが$\mathbb{next}$ においては、初期は恒等写像としたい。
だから$A_{\mathbb{next},n}$ は$n=1$のときだけ単位行列$I$ で、
$n=0$と$n>1$では全パラメータ$0$ で初期化することになる。
なぜ初期だけ恒等写像にするのかと言えば、$\mathbb{next}$ は本来「余計な」関数だからである。
$\mathbb{next}$ がないと $\mathbb{P}_{\rm next}[単語i|\ket{単語i}] = 1$ に固定されてしまうから、それを防ぐために仕方なく $\mathbb{next}$ を入れたに過ぎない。
故に、最初はあたかも $\mathbb{next}$ が「無い」かのようにしておいて、
それで $\mathbb{P}_{\rm next}[単語i|\ket{単語i}] = 1$ という支障が出た分だけ $\mathbb{next}$ を更新するのが合理的だろう。
2つ目は学習率の扱いである。
仮想単語 $\mathbb{next}$ の持つ特殊な役割に注目し、学習率を他の単語とは異なるものに設定する場合がある。
3-2-3. POVM
2つ目の問題は、単語同士が直交していないせいで:
$$\sum_i \mathbb{P}_{\rm next}[単語i|\ket{z}] = \sum_i \Big|\bra{単語i}\mathbb{next}(\ket{z})\Big|^2$$
が$1$にならないということだ。
全部の単語の確率を足したら$1$になってくれなきゃ、分類タスクとして成り立たない。
だからこのままだとマズい。
そういや 複素数 $\alpha$ について、 $|\alpha|^2=\bar{\alpha}\alpha$であった。
また、$\overline{\braket{b|a}}=\braket{a|b}$ が任意の $\ket{a},\ket{b}$ について成り立つ。
よって、$\mathbb{next}(\ket{z})$ のことを$\ket{z\_\mathbb{next}}$ と書けば:
$$\begin{array}{ll}
&\Big|\bra{単語i}\mathbb{next}(\ket{z})\Big|^2\\
=&\Big|\braket{単語i|z\_\mathbb{next}}\Big|^2\\
=&\braket{z\_\mathbb{next}|単語i}\braket{単語i|z\_\mathbb{next}}\\
\end{array}$$
とできる。
よって:
$$M_i' = \ketbra{単語i}{単語i}$$
と置けば:
$$\sum_i \mathbb{P}_{\rm next}[単語i|\ket{z}] = \sum_i
\bra{z\_\mathbb{next}}M_i'\ket{z\_\mathbb{next}}
$$
となる。
ここで、もし $M_i'$ を $\ketbra{単語i}{単語i}$ から:
- 半正定値
- $\displaystyle\sum_i M_i = I$
を満たす行列$M_i$ に変換できたら良いなぁ、なんて考えてみる。
良いなぁ、というのは、単語同士を直交していると無理やり捉えなおしたときに、確率の公理を満たすということだ。
確率の公理とは:
- 非負性: 任意の事象の確率が$0$以上
- 規格性: 全事象の確率が$1$
- 加法性: 背反な事象の発生確率の和は、背反な事象の和事象の発生確率に一致する
である。
もし $M_i$ が:
- 半正定値
- $\displaystyle\sum_i M_i = I$
を満たす行列だったら:
$$\bra{z\_\mathbb{next}}M_i\ket{z\_\mathbb{next}}$$
はどんな $\ket{z\_\mathbb{next}},i$ に対しても$0$以上だ。
よって:
$$\mathbb{P}_{\rm next}[単語i|\ket{z}]=\bra{z\_\mathbb{next}}M_i\ket{z\_\mathbb{next}}$$
とすれば、これは少なくとも非負性を満たす。
しかも:
$$\sum_i
\bra{z\_\mathbb{next}}M_i\ket{z\_\mathbb{next}}
=\bra{z\_\mathbb{next}}I\ket{z\_\mathbb{next}}=1
$$
となるから:
$$\mathbb{P}_{\rm next}[単語i|\ket{z}]=\bra{z\_\mathbb{next}}M_i\ket{z\_\mathbb{next}}$$
は規格性、加法性も満たす。
つまり、確率の公理を全て満たすのだ。
そのような $M_i$ をみつけて、確率を定義しようとするアイデアを「POVM」(正値作用素測度)という。
3-2-4. POVM の例(平方根POVM)
さて:
- 半正定値
- $\displaystyle\sum_i M_i = I$
を満たす $M_i$ をどうやって見つけようか。
なるべく元の:
$$M_i' = \ketbra{単語i}{単語i}$$
に近い形がいい。
だから:
$$M_i = f\big(\ketbra{単語i}{単語i}\big)$$
とでも書いておくことにしようか。
半正定値性より、任意のベクトル $\ket{x}$ について:
$$\braket{x|f\big(\ketbra{単語i}{単語i}\big)|x}\geq0$$
であるべきだ。
手っ取り早くこれを実現するには、複素行列$T$を用いて:
$$f\big(\ketbra{単語i}{単語i}\big) = T^\dagger\ketbra{単語i}{単語i}T$$
としてしまうことだ。
すると:
$$\begin{array}{ll}
&\braket{x|f\big(\ketbra{単語i}{単語i}\big)|x}\\
=&\braket{x|T^\dagger|単語i}\braket{単語i|T|x}\\
=&\overline{\braket{単語i|T|x}}\braket{単語i|T|x}\\
=&\big|\braket{単語i|T|x}\big|^2
\end{array}$$
となるから、これは明らかに常に非負だ。
よって半正定値の条件はクリアした。
次に:
$$\displaystyle\sum_i M_i = I$$
を考えよう。
ここまでで $M_i = T^\dagger\ketbra{単語i}{単語i}T$
としたから:
$$\begin{array}{ll}
&\displaystyle
\sum_i M_i \\
=&\displaystyle
\sum_i \left(T^\dagger\ketbra{単語i}{単語i}T\right) \\
=&\displaystyle
T^\dagger \left(\sum_i \left(\ketbra{単語i}{単語i}\right)\right)T
\end{array}$$
である。これが $I$ になればよい。
$$G=\sum_i \left(\ketbra{単語i}{単語i}\right)$$
とすると:
$$T^\dagger GT=I$$
であればよい。
そのような $T$ として:
$$T^\dagger = G^{-\frac{1}{2}} = T$$
があるではないか。
よって:
$$G=\sum_i \left(\ketbra{単語i}{単語i}\right)$$
として:
$$M_i = G^{-\frac{1}{2}}\ketbra{単語i}{単語i}G^{-\frac{1}{2}}$$
とすれば、そこそこ自然な $M_i$ を得ることが出来るのだ。
つまり:
$$\begin{array}{ll}
\mathbb{P}_{\rm next}[単語i|\ket{z}]
&=
\bra{z\_\mathbb{next}}
M_i
\ket{z\_\mathbb{next}}\\
&=
\bra{z\_\mathbb{next}}
G^{-\frac{1}{2}}
\ketbra{単語i}{単語i}
G^{-\frac{1}{2}}
\ket{z\_\mathbb{next}}\\
&=
\bra{z\_\mathbb{next}}
(G^{-\frac{1}{2}})^\dagger
\ketbra{単語i}{単語i}
G^{-\frac{1}{2}}
\ket{z\_\mathbb{next}}\\
&=\Big|
\bra{単語i}
G^{-\frac{1}{2}}
\ket{z\_\mathbb{next}}
\Big|^2\\
&=\Big|
\bra{単語i}
G^{-\frac{1}{2}}
\mathbb{next}(
\ket{z}
)
\Big|^2\\
\end{array}$$
となる。
この結果は、3-2-1節時点で考えていた:
$$\cancel{\mathbb{P}_{\rm next}[単語i|\ket{z}] =} \Big|\bra{単語i}\mathbb{next}(\ket{z})\Big|^2$$
(古い定義なので、左辺と等号に斜線を引いた)
と比較しても、非常によく似た形になっている。
$\mathbb{next}(\ket{z})$を $G^{-\frac{1}{2}}$ で線形変換するかしないかだけの違いだから、
今回のPOVMで$\mathbb{next}(\ket{z})$の構造が破壊されることを心配する必要もない。
この手法は、POVMの中でもsquare-root measurement (平方根測度)と呼ばれるものであり、おそらく最も人気が高い手法である。
この記事では「平方根POVM」と呼ぶことにする。
3-2-5. 平方根POVMのメリット
実は平方根POVM により:
$$\ket{z'} = G^{-\frac{1}{2}}\ket{z}$$
と置き換える操作は、「確率の規格化のための操作を最小に留めている」という意味で最も「良い」操作である。
$\ket{単語i}$ たちを無理矢理直交化して $\ket{単語'i}$ たちを得たときに、
$\ket{単語'i}$ をなるべく元の $\ket{単語i}$ に近いほうがいいよね、と考えると、
数学的には平方根POVM が最も良い手法となるのだ。
つまり:
$$\ket{単語'i}-\ket{単語i}=0$$
や:
$$\braket{単語'i|単語i}=1$$
になるべく近づけたい。
もう少しちゃんと言うと:
$$\sum_i \Big|\ket{単語'i}-\ket{単語i}\Big|^2$$
や:
$$\sum_i \Big(1-\Big|\braket{単語'i|単語i}\Big|\Big)$$
を、制約:
$$\braket{単語'i|単語'j}=\left\{
\begin{array}{ll}
1 & (i=jのとき)\\
0 & (i\neq jのとき)
\end{array}
\right.$$
の範囲内で最小化するように $\ket{単語'i}$ を決めると:
$$\ket{単語'i} = G^{-\frac{1}{2}}\ket{単語i}$$
となることが数学的に証明可能である。
雑な証明は:
に記したので、興味があれば読んでみてほしい。
3-2-6. POVMを使うことの正当性
POVMによる次単語の確率推定は、コーパスの内側の状態を外側から観測したときの単語観測確率として正当であると言える。
3-2-6-1. 「神の世界」と「人間の世界」(ナイマルクの拡張定理)
実はPOVMは、神の世界の状態を、人間の世界から観測したときの観測確率として解釈することが出来る。
こういうとオカルトチックに聞こえるかもしれないが、そうではない。
- 神の世界 → 拡大されたヒルベルト空間
- 人間の世界 → 元のヒルベルト空間
と置き換えれば、これは神学ではなくて数学の、ナイマルクの拡張定理の話をしているに過ぎない。
ナイマルクの拡張定理を「神の世界」、「人間の世界」、「天使の世界」という言葉を使って直感的に説明した記事を書いたので、興味があれば是非:
を読んでほしい。
3-2-6-2. 「神の世界」では結果を背反に出来る
さて、人間の世界では背反でない結果たちも、神の世界では背反になる。
例えば $2$次元の状態ベクトルがあるとして、そこに $3$つの結果があるとしよう。
$$\ket{状態} = \alpha\ket{結果0} + \beta\ket{結果1} + \gamma\ket{結果2}$$
量子力学で状態が互いに背反であるとは、ベクトルが直交することを意味するが、
$2$次元のベクトルでは、$3$つのベクトル $\ket{結果0}, \ket{結果1}, \ket{結果2}$を すべて直交させることは原理的に不可能だ。
そこで、共通の$2$行$3$列の行列$C$を使って:
$$\ket{状態_神} = C\ket{状態},$$
$$\ket{結果i_神} = C\ket{結果i}$$
のようにして、$3$次元の状態ベクトルを新たに作り出し、これを「神の世界の状態ベクトル」と呼ぶ。
(本当は「天使成分」を足し合わせないといけない事や、神の世界の状態ベクトルは大きさが$1$とは限らないことなど、いろいろ注釈が必要なのだが、今回はそこは無視する)
$$\ket{状態_神} = \alpha\ket{結果0_神} + \beta\ket{結果1_神} + \gamma\ket{結果2_神}$$
後は、$C$をうまく選べば、$\ket{結果0_神}, \ket{結果1_神}, \ket{結果2_神}$を すべて直交させることが出来るだろうというわけだ。
これが「神の世界では背反になる」の正体だ。
3-2-6-3. 「神の世界」とPOVM
そしてPOVMで求められる「状態が結果$i$になる確率」は、実は:
$$\Big|\braket{結果i_{人間}|状態_神}\Big|^2$$
つまり「神の世界の状態が、人間の世界の結果$i$になる確率」に一致する。
但し $\ket{結果i_{人間}}$ とは、 $\ket{結果i}$ の下に$0$成分を連結して $3$次元にしたものである。
$\ket{状態_神}$ を具体的に知らなくても $\Big|\braket{結果i_{人間}|状態_神}\Big|^2$ を求めることは出来る、というのも、POVM の面白さの一つかもしれない。
3-2-6-4. アリスコーパスとボブモデル
3-2-6-3節で説明したPOVMの性質は、今回のモデルにとっても都合がよい。
例えば語彙を:
| 単語ID | 単語 |
|---|---|
| $\ket{単語0}$ | $\ket{私}$ |
| $\ket{単語1}$ | $\ket{は}$ |
| $\ket{単語2}$ | $\ket{アリス}$ |
| $\ket{単語3}$ | $\ket{ボブ}$ |
| $\ket{単語4}$ | $\ket{女}$ |
| $\ket{単語5}$ | $\ket{男}$ |
だけとみなして、
アリスの発言をコーパスとして学習するモデルを考える。
このモデルを「ボブ」と名付けよう。
語彙数は$n=6$だ。
意味ベクトルの次元$d_b$は、実用的にはたいてい語彙数より小さくするだろうから、ここでも $d_b<n$ としようか。
そしてモデル「ボブ」の持つ$d_b$次元意味ベクトルを:
$$\ket{z_b}$$
のように書くことにしよう。
$d_b$ が $n$ より小さい以上、各 $\ket{単語i_b}$ を直交させることは出来ない。
直感的には $\Big|\braket{アリス_b|女_b}\Big|$ や $\Big|\braket{ボブ_b|男_b}\Big|$ が特に大きくなりそうだな。
ここで:
$$\mathbb{next}(\ket{私\_は_b})$$
を観測したときに、例えば:
$$\ket{アリス_b}$$
に近い結果に収縮したとする。
(本当は、量子力学の世界では、正規直交基底が決まらない限り「観測」が出来ないので、状態の収縮も起きえないのだが、今回話を円滑に進めるため、そこの厳密性は無視することにしてほしい。
(POVMを使えば、正規非直交な基底も議論できるが、本質的にはより高次元の世界(神の世界)での正規直交基底を考えているのと同じだ))
だが、$\Big|\braket{アリス_b|女_b}\Big|$ が大きい以上、$\ket{アリス_b}$ に近い結果は、同時に $\ket{女_b}$ にも近い結果になってしまう。
$\mathbb{next}(\ket{私\_は_b})$ の収縮先が$\ket{アリス_b}$ と$\ket{女_b}$の両方に近い、とはつまり、
「私は」の次に実際に来た単語が「アリス」なのか「女」なのか曖昧であるということだ。
これは、予測が曖昧、つまり『「私は」の次に来そうな単語が「アリス」なのか「女」なのか曖昧』ということとは根本的に違う。
そうではなくて、観測結果そのものが曖昧になるのだ。
ボブにとっては、それはもう「そういうもの」として受け入れるしかないことだが、
実はこの曖昧さで本当に困るのは、アリスのほうだ。
アリスは「曖昧な単語」なんて喋れない。
アリスは「私はアリス」、「私は女」と喋ることは出来ても、
「私は(アリスなのか女なのか曖昧な単語)」ことは出来ない。
だからアリスが「私は」まで喋った時点で、アリスの脳内では次の単語が明確に決まっている必要がある。
つまり、アリスの脳内の意味ベクトルを:
$$\ket{z_a}$$
と書くなら:
$$\mathbb{next}(\ket{私\_は_a})$$
の収縮先である 各 $\ket{単語i_a}$ が正規直交基底になっていないといけない。
ここで役に立つのが「神の世界」、「人間の世界」の考え方だ。
アリスの発言をコーパスとしている以上、神がいるとすればそれはアリスだ。
そして、神 = アリスの発言 を観測しようとしている人間がいるとすれば、それはボブだ。
神 = アリス にとっては、意味ベクトルは$d_a = n=6$次元であり、
各 $\ket{単語i_a}$ は確かに正規直交基底になる。
POVM で求められる 「$\mathbb{next}(\ket{私\_は})$ が $\ket{単語i}$になる確率」は:
$$\Big|\braket{単語i_b|\mathbb{next}(\ket{私\_は_a})}\Big|^2$$
であり、これは「神 = アリスの世界における"私は"の次単語が、人間 = ボブの世界の単語$i$になる確率」に一致する。
よって、POVMによる次単語の確率推定は、コーパスの内側(アリスの世界)で決まっている次単語を外側(ボブの世界)から観測したときの単語観測確率として正当であると言える。
4. 次回について
次回は、トイコーパスを用意して実際に実験するためのコーディングに着手する。
↓次回の記事

