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

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

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


1.1 このアプリでやること

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

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


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

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

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

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


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

1.3.1 まず大事な考え方

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

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

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

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

1.3.2 計算の手順(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) \]

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


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

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

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

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


1.5 本物の 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} \]

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

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


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


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