今回は共起行列とベクトル間の類似度について学んで、自分なりに理解したことをまとめます。
要約
- 共起行列は各行が、共起するかどうかを値で表した成分で構成されているベクトル
- ベクトル同士は、ベクトルの内積を用いることによって類似度を計算することが可能
説明
共起とは?
共起とは、ある文中で、ある単語とある単語が同時に使用されることを言います。
例えば、「しんしんと雪が降る」、という表現では、「しんしん」と「雪が降る」が共起します。
共起行列とは?
次に共起行列について説明します。説明には次の英語の例文を使用します。
I waited for a while.
この例文を単語で分割(ピリオドも1単語として扱うとする)すると、6つの単語から成り立っていることになります。
I, waited, for, a, while, .
そして、各単語が前後1単語と共起すると考えたとして、ある単語に共起する単語は1を、ある単語自身と、共起しない単語は0を設定する表を作ることにします。
※この前後N単語の範囲をウィンドウサイズと呼びます。
まず最初はIについて表を作成します。そうすると、下記の表が作られます。
I | waited | for | a | while | . | |
---|---|---|---|---|---|---|
I | 0 | 1 | 0 | 0 | 0 | 0 |
単語”I”について[0, 1, 0, 0, 0, 0]が得られました。
これは[0, 1, 0, 0, 0, 0]を成分としたベクトルと考えることができます。
更に他の単語についても同様に共起する単語の表を作成します。
I | waited | for | a | while | . | |
---|---|---|---|---|---|---|
I | 0 | 1 | 0 | 0 | 0 | 0 |
waited | 1 | 0 | 1 | 0 | 0 | 0 |
for | 0 | 1 | 0 | 1 | 0 | 0 |
a | 0 | 0 | 1 | 0 | 1 | 0 |
while | 0 | 0 | 0 | 1 | 0 | 1 |
. | 0 | 0 | 0 | 0 | 1 | 0 |
この表は各行が、各単語と共起するかどうかを0 or 1の値で表現した成分で構成されたベクトルの表、つまり行列です。
そのため、この行列を共起行列と呼ぶのです。
ベクトル間の類似度
それでは上記で説明した共起行列をどのようにして使用するのでしょうか?
共起行列の各行はベクトルで構成されています。
そして、ベクトルはコサイン類似度を計算することによって、どのくらい同じ方向を向いているかを表現することができます。
同じ方向を向いているということは類似度が高いということになります。
共起行列の各ベクトル間の類似度によって、ある単語に類似した単語を見つける、というような使い方ができるというわけです。
今回は以上です。
参考
共起行列の作り方と、コサイン類似度の実装については、オライリーから出版されている『ゼロから作るDeep Learning ❷ ――自然言語処理編』で解説されています。
また、その書籍のコードがGitHub上で公開されているので、そちらもご参照下さい。