Skip to content

naltoma/handmade_word2vec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ことばの地図 ―― word2vec 体験アプリ

単語を平面(2次元の地図)に置いて、「似たことばは近く、関係が同じペアは同じ向き」に並べてみる体験アプリです。 コンピュータが言葉を「数(ベクトル)」として扱う word2vec の考え方を、手を動かして体感できます。

👉 アプリをはじめる  (演習が終わったら、このページに戻って下の解説を読んでみてください)


このアプリでやること

  1. 画面の平面に、単語のチップを置いていきます。
  2. 「似ていることばは近くに」「ちがうことばは遠くに」置くのがコツ。
  3. 全部置いたら チェック すると、点数(スコア)が出ます。
  4. 「答え合わせ」で、お手本とどれくらい近いか見られます。

最初からいくつかの単語は 動かせない状態で置いてあります。これは「地図の向きの目印(ヒント)」です。


点数(スコア)はどう決まるの?

総合点は、2つのスコアを混ぜて計算しています。

$$ \text{総合点} = 0.7 \times \text{score1} + 0.3 \times \text{score2} $$

  • score1:お手本の地図と、どれだけ「同じ形」に置けたか
  • score2:「近いはず・遠いはず」のルールを、どれだけ守れたか

順番に見ていきましょう。


score1:お手本と「同じ形」になっているか

まず大事な考え方

word2vec の世界では、地図の「向き」や「大きさ」そのものには意味がありません。 大事なのは ことばどうしの位置関係(どれが近くて、どれが遠くて、どっち向きか)です。

たとえば下の2つの地図は、回したり大きさを変えただけで「形」は同じです。 だから どちらも正解 とみなしたい。

   地図A              地図B(Aを回しただけ)
   ねこ                        いぬ
    ・                          ・
        ・いぬ            ねこ・

そこで score1 では、回したり・裏返したり・拡大縮小したり・平行移動しても OK という前提で、 お手本にいちばんピッタリ重なるように合わせてから、ズレを測ります。 この「いちばんよく重ねる」やり方を、数学では プロクラステス解析(Procrustes analysis) と呼びます。

計算の手順(4ステップ)

あなたの配置を $U$、お手本を $R$ とします(どちらも各単語の $(x, y)$ 座標の集まり)。

① 真ん中をそろえる(平行移動をなくす)

それぞれの「重心(平均の位置)」を原点に移動します。

$$ u_i' = u_i - \bar{u}, \qquad r_i' = r_i - \bar{r} $$

ここで $\bar{u}$ は全部の点の平均の位置です。

② 大きさをそろえる(スケールをなくす)

全体の広がり(大きさ)を1にそろえます。

$$ \hat{u}_i = \frac{u_i'}{\sqrt{\sum_i |u_i'|^2}} $$

お手本 $R$ も同じようにそろえます。

③ いちばん重なるように回す(回転・反転)

あなたの地図を「クルッ」と回して(必要なら裏返して)、お手本にいちばん近づく角度を探します。 2次元なら、回転は次の行列で表せます。

$$ \text{回転} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} $$

「いちばん近づく角度 $\theta$」は計算で一発で求められます(特異値分解 SVD という方法を使います)。

④ ズレ(残差)を測って点数にする

重ね合わせたあとに残った「ズレの大きさ」$d$ を測ります。

$$ d = \sqrt{\sum_i |\hat{r}_i - \hat{u}_i^{\text{(重ねた後)}}|^2} $$

ズレが小さいほど高得点になるように変換します(イメージ)。

$$ \text{score1} = 100 \times \max!\left(0,; 1 - \frac{d}{d_{\max}}\right) $$

つまり 「形がそっくり = 高得点」。向きや大きさがちがっても、形が合っていれば満点に近づきます。


score2:近い・遠いのルールを守れたか

問題ごとに「このペアは近いはず」「このペアは遠いはず」というルールが決まっています。 score2 は、そのルールを どれだけ守れたか(達成率) です。

$$ \text{score2} = 100 \times \frac{\text{守れたルールの数}}{\text{ルール全体の数}} $$

  • 「近いはず」のペア → ちゃんと近くに置けていれば ✅
  • 「遠いはず」のペア → ちゃんと遠くに置けていれば ✅

形(score1)は合っていても、特定のペアの距離がイマイチなときに、ここで差がつきます。


本物の word2vec とのちがい

このアプリは体験用に 2次元(平面) にしていますが、本物の word2vec は単語を 数百次元(たとえば100〜300個の数の並び)のベクトルで表します。次元が多いほど、 「色」「大きさ」「気持ち」みたいなたくさんの意味の軸を同時に表せます。

本物では、ことばの近さを測るのに コサイン類似度(ベクトルの「向き」の近さ)をよく使います。

$$ \cos(\boldsymbol{a}, \boldsymbol{b}) = \frac{\boldsymbol{a}\cdot\boldsymbol{b}}{|\boldsymbol{a}|,|\boldsymbol{b}|} $$

有名な例として、ベクトルどうしの足し算・引き算で意味の関係が表せることがあります。

$$ \text{king} - \text{man} + \text{woman} \approx \text{queen} $$

(「王」から「男」を引いて「女」を足すと「女王」に近づく、というイメージ)

このアプリで「同じ関係のペアは同じ向き・同じ距離になる」と感じた感覚が、 実はこの足し算・引き算の世界につながっています。


もっと知りたい人へ(キーワード)

  • ベクトル / 内積 / コサイン類似度
  • 次元(2次元 → 数百次元)
  • プロクラステス解析、特異値分解(SVD)
  • word2vec / 単語埋め込み(word embedding)

この教材はオープンキャンパス体験用に作成されています。

About

Hands-on word2vec for high schoolers: place words on a 2-D map and get scored. Single-file HTML, no dependencies.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors