Word2vec
自然言語処理の初期
- 言語は記号で実数値ではないからそのままの形では深層学習ができない
- One-hotベクトル:ベクトルのすべての要素のうちひとつだけが1であり、残りはすべて0であるベクトル で対応
分散表現の登場
- 「文字・単語をベクトル空間に埋め込み、その空間上のひとつの点として捉える」
例:
markdown難しい...
\begin{align}
女+Royal=女王 ...(a)\\
男+Royal=王様 ...(b)\\
\end{align}
\begin{align}
女-男=女王-王様 ...(a)-(b)\\
⇔ 王様-男+女=女王
\end{align}
One-hot
男 | 女 | 王様 | 女王 | |
---|---|---|---|---|
男 | 1 | 0 | 0 | 0 |
女 | 0 | 1 | 0 | 0 |
王様 | 0 | 0 | 1 | 0 |
女王 | 0 | 0 | 0 | 1 |
男=[1,0,0,0]
女=[0,1,0,0]
王様=[0,0,1,0]
女王=[0,0,0,1]
分散表現
性別(女である具合) | Royal | |
---|---|---|
王様 | 男(0) | Yes(1) |
女王 | 女(1) | Yes(1) |
男=[0,0]
女=[1,0]
王様=[0,1]
女王=[1,1]
次元下げに成功(簡易化のため、 0,1で表現している)
CBoWモデルとskip-gramモデル
-
CBOWモデル: 周辺語から中心語を予測するモデル
- 明日は〇〇が降りそうだ→雨、ひょう、あられ
-
skip-gramモデル:中心語から周辺語を予測するモデル
- 雨→は、が
skip-gramモデルのロジック
https://www.randpy.tokyo/entry/word2vec_skip_gram_model
One-hot(中心語)からOne-hot(周辺語)の間の隠れ層を vocuburaryの数✖️なんだっけ、、、で作っていく、
最終的に隠れ層のの中心語の、、、
(投げ出す)
やりたかったこと
-
宇多田ヒカルの First Loveと初恋における考え方の違いなんかを出したかったので、それぞれのアルバムの歌詞を読み込ませて、どういう差があるか見てみたかったが、アルバムに含まれる十数曲を食わせてもそもそもボキャブラリーリストに「初恋」が出てこないし、それに、読み込ませるデータを見て、ある程度自分でもこのデータじゃ意味ないだろうなということは分かっている。
-
けど、「ぱくぱく」の類似語に'kiss'が来るから、例えば「パクチー kiss kiss」って感じで歌詞を書き換えたりして遊べるかもねー。こっちの方やってみようかな。
source code
- まとまったら載せます