AIは文章を「埋め込みベクトル」にして扱う、って説明をよく見る
単語をどうやって数字の並びにしてるんや
【疑問】「埋め込み」って、単語をどうやって数字の並びにしてるん?【AI】
>>1
中身は大きい表(行列)。語彙の単語1つずつに1行ずつ、決まった長さのベクトルが割り当ててある
単語が来たら、その単語の行を取り出すだけ
>>2
表の中の数字は誰が決めたん
>>3
最初はランダムな値。学習しながら、予測がうまくいくように少しずつ動かしていく
単語の意味を人が書きこんでるわけではない
>>4
行を取り出すだけなら、それって行列の掛け算と関係あるん?
>>5
ある。語彙が4語、ベクトルが2次元なら、表 は4行2列。3番目の単語を、3番目だけ1の並び(one-hot)で表して掛けると
3行目がそのまま出てくる。掛け算の形で書けるから、ほかの層と同じように学習で動かせる
で、どういう学習をしたら意味が入るん
>>7
有名なのは word2vec(Mikolov ら、2013年に arXiv 公開)
CBOW は周りの単語から真ん中の単語を当てる。Skip-gram は真ん中の単語から周りの単語を当てる
似た文脈に出てくる単語は、似たベクトルになるように動かされていく
王様 − 男 + 女 = 女王、って話を聞いたことある
>>9
その例は word2vec の論文でも紹介されてる。vector(King) − vector(Man) + vector(Woman) に一番近いのが Queen のベクトルになる
2次元のおもちゃで書くと、成分を「王族っぽさ」「男性っぽさ」として
King − Man + Woman で、Queen と一致する
>>10
それ、例が都合よすぎやろ。いつも足し算で当たるわけないやん
>>11
当たらんことも多い。論文では「意味」の問題8,869問と「文法」の問題10,675問を作って試してる
一番近い単語がぴったり正解のときだけ正解扱いで、同じ意味の別の単語でも不正解
いちばん成績のよかった Skip-gram(1000次元、60億トークンで学習)でも、正解は全体の65.6%
次元と学習データは、多いほどええの
>>13
論文の表(語彙を3万語に絞った一部の問題)やと、両方増やさんと伸びない。CBOW で50次元・2400万語なら13.4%、600次元・7億8300万語なら50.4%
次元だけ増やしても、データだけ増やしても、途中で頭打ちになる
埋め込みの表って、どれくらいの大きさになるん
>>15
語彙の数×次元の数。word2vec の論文は語彙を100万語に絞ってるから、300次元なら
BERT(3万トークンの語彙、768次元)なら で、基本モデル1.1億パラメータの約21%
>>16
語彙にない単語が来たらどうするん
>>17
BERT は単語をもっと細かいかけら(トークン)に分けて語彙を3万に収めてる。論文の例やと flightless が flight ##less に分かれてる
知らない単語でも、知ってるかけらの組み合わせで表せる
word2vec と BERT の埋め込みは、同じもんなん
>>19
入口の表から行を取り出すところは同じ。違うのはその先
word2vec は1つの単語に1つのベクトルで、bank(銀行・川岸)みたいな言葉でも文脈によらず同じ
BERT は表から取り出したベクトルを Transformer の層に通して、前後の単語に合わせて変えたベクトル(文脈つきの表現)を出す
>>20
RAG や CLIP の「文章をベクトルにする」も、これの延長?
>>21
そう。単語ではなく文章や画像1つを1本のベクトルにして、向きの近さ(コサイン類似度)で似たものを探してる
作り方の細かいところはモデルごとに違うけど、「意味が近いものは近い向きにする」という考え方は同じ
埋め込みは単語ごとのベクトルの表で、中身は学習で決まる。似た文脈に出る単語ほど近い向きになる、ってことやな
管理人のひとこと
- 埋め込みは、語彙の単語(トークン)ごとに1行ずつベクトルを並べた表。最初はランダムで、学習で動かす。one-hot との行列の掛け算で書けるので、ほかの層と一緒に学習できる。
- word2vec(Mikolov ら、2013年)は、周りの単語から真ん中を当てる CBOW と、真ん中から周りを当てる Skip-gram で、似た文脈の単語を似たベクトルにする。King − Man + Woman ≈ Queen の例が有名。
- ただし足し算で当たるとは限らない。論文の約1万9千問のテストで、最もよい Skip-gram でも正解は65.6%。次元とデータは両方増やさないと伸びない。
- 表の大きさは語彙数×次元数(BERT は で約2300万、全体の約21%)。BERT は単語をかけらに分けて語彙を3万に抑え、Transformer の層で文脈に合わせたベクトルを作る。