← STEP 5・モデル本体(Transformer) に戻る

埋め込み(Embedding)― 勘定科目マスタの属性ベクトル

記事で詰まったところ

「埋め込み」「トークンをベクトルにする」「wte / wpe」が、何を持っている表なのか分からない。

機械学習ではこう言う

各トークン(文字)に固有の数値ベクトルを割り当てる対応表。文字の埋め込み wte と位置の埋め込み wpe を引き、足し合わせて「どの文字が・何番目か」を1本のベクトルにする。

勘定科目マスタの属性レコード

勘定科目マスタの1レコードによく似ている。各勘定科目に「B/S か P/L か」「流動か固定か」「課税か非課税か」といった属性を数値で持たせた台帳——あれが埋め込みベクトル。文字(トークン)を引くと、その属性の並びが返ってくる。

wte が「文字そのものの属性」、wpe が「何番目に出たか(時点)の属性」。x = tok_emb + pos_emb は、科目の属性に「この取引は何月の事象か」という時点属性を足し込むイメージ。同じ科目でも期がずれれば意味合いが変わる、を1本のベクトルに畳み込む。

初期値は当て推量(ガウス分布)。学習が進むと、よく似た振る舞いの文字どうしは属性ベクトルも近い座標へ寄っていく。科目マスタの属性を実績で整えていくのと同じ。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
埋め込みベクトル
勘定科目マスタの1レコード(属性の並び)
wte(文字の埋め込み)
科目そのものの属性(B/S・P/L、流動・固定…)
wpe(位置の埋め込み)
何月の事象かという時点属性
x = tok_emb + pos_emb
科目属性に時点属性を足し込む

触って確かめる

文字(トークン)を引く=科目を選ぶ
位置を引く=時点を選ぶ
属性1属性2属性3属性4
wte「a」文字の属性+0.8-0.3+0.5+0.1
wpe 1番目時点の属性+0.1+0.4-0.2+0.0
x = tok + pos合成ベクトル+0.9+0.1+0.3+0.1

埋め込みは勘定科目マスタの属性レコード。文字を引くと「その文字の属性ベクトル(wte)」、 位置を引くと「何番目かという時点属性(wpe)」が返り、要素ごとに足して1本のベクトルにまとめます。 同じ文字でも位置が変われば合成ベクトルが変わる=同じ科目でも期がずれれば意味合いが変わる、を1本に畳み込んでいます。

⚠️ 実際の埋め込み次元(16)に会計的な意味ラベルは付いていない。「属性の束」という形の対応の例示。

実際のコード(microgpt.py L109-111)

この簿記アナロジーが、Karpathy のオリジナル200行のどの行に当たるか。

tok_emb = state_dict['wte'][token_id]   # 文字の埋め込み(科目の属性)
pos_emb = state_dict['wpe'][pos_id]     # 位置の埋め込み(時点の属性)
x = [t + p for t, p in zip(tok_emb, pos_emb)]  # 属性ベクトルを足し合わせる

wte[token_id] で文字の属性ベクトルを、wpe[pos_id] で位置の属性ベクトルを引き、要素ごとに足す=科目マスタ+時点属性。

出典: karpathy / microgpt.py (本体は原文ママ、コメントのみ日本語に補足)