1 開始之前:先懂 4 個觀念

結論:整份作業只建立在 4 個觀念上。這 4 個懂了,後面每一步都只是「把觀念寫成程式」。考試也最可能從這裡出題。

觀念 1:電腦只看得懂數字,所以要把字變成一串數字

電腦不知道 cat 是什麼。它只會做數學。

所以我們幫每個英文字準備一串數字,例如 100 個數字。這串數字叫 詞向量(word embedding)。

你可以把這 100 個數字想成這個字在「意思地圖」上的座標。平常的地圖只有 2 個數字(經度、緯度),這張地圖有 100 個方向,所以人畫不出來,但電腦算得出來。

把每個字的座標收集起來,就是一本「字典」:查一個字,得到它的座標。

觀念 2:座標越近,意思越像

一份好的詞向量,會把 cat(貓)和 dog(狗)放得很近,把 cat 和 truck(卡車)放得很遠。

「多近」用一個叫 cosine similarity(餘弦相似度)的分數來量。白話:看兩個字的「方向」有多一致。

分數意思
接近 1方向幾乎一樣 → 很像
接近 0沒什麼關係
負的方向相反(注意:方向相反 ≠ 意思相反。反義詞例如 good/bad 的分數反而常常很高,見第 11 節)

報告第 4 題「找最像的 5 個字」,就是在地圖上找離它最近的 5 個鄰居。

觀念 3:座標可以加減,加減代表「關係」

這是整份作業最核心的一點。看這張圖:

man 男人 woman 女人 king 國王 queen 女王 「變成女性」這一步 同一步 「變成皇室」 「變成皇室」

從 man 走到 woman 的那一步(紅色箭頭),跟從 king 走到 queen 的那一步,方向和長度大致一樣(老師的說法:「不是這麼 exactly 一樣,但趨勢很接近」,W3 00:32:01)。四個點大約排成一個平行四邊形。

所以只要知道三個點,就能推出第四個點:

queen − king + man ≈ woman
(B)  (A)   (C)   (D)

白話:「把 king 變成 queen 的那一步」,套到 man 身上,就會走到 woman。

注意:作業規格 PDF 第 2 頁寫成「King + Queen − Man ≈ Woman」,那是筆誤。正確是 B − A + C(程式模板的提示寫的才對)。

作業的考卷 19,544 題,每一題都是這樣:給 A、B、C,叫電腦算出 D。

觀念 4:座標是電腦自己「看鄰居」學出來的

沒有人一個一個去設定座標。電腦是讀了大量文章之後,自己算出來的。

它根據一句很有名的話:「看一個字的朋友,就知道它是什麼字。」常常出現在同樣前後文的字,意思通常很像。

例如「我養了一隻__,牠很可愛」,空格可以填貓、狗、兔子。這些字前後文很像,所以座標會很近。

這個「讀文章、看鄰居、算座標」的過程叫 訓練。作業用的方法叫 Word2Vec,裡面又分兩種:

方法它在練習什麼比喻
Skip-gram(老師投影片的重點)給中間的字,猜旁邊會出現哪些字看到「貓」,猜旁邊可能有「養」「可愛」
CBOW給旁邊的字,猜中間是什麼字看到「養了一隻__很可愛」,猜中間是「貓」

練習的過程中,電腦會一直微調每個字的座標,讓猜測越來越準。練完之後,座標就是我們要的詞向量。

所以對作業的影響是
字典好不好,完全取決於電腦讀了什麼文章:讀多少、讀什麼種類、文章怎麼整理過。 報告第 2 題(讀多少)、第 3 題(讀什麼種類)、第 1 題和第 5 題(怎麼整理),全部都是在問這件事。
這個觀念也解釋了詞向量的缺點
電腦學的是「誰出現在相似的前後文」,不是「意思」。hot(熱)和 cold(冷)意思相反,但前後文很像(「今天很__」),所以座標反而很近。 還有:apple 不管是水果還是公司,都只有一組座標。這就是後面幾週要教 BERT(會看上下文給不同座標)的原因。

2 準備工作:要在哪裡跑、要裝什麼

結論:你有兩個選擇:Google Colab(老師推薦)或自己的電腦(我這次用的)。你的筆電比 Colab 免費版強很多,我建議在自己電腦跑,但交作業時要多附 requirements.txt、報告要寫電腦規格。

兩種做法比一比

Google Colab(免費版)自己的電腦(你的筆電)
要不要安裝不用,開瀏覽器就能用要裝 Python 和套件(下面有指令)
CPU(訓練詞向量只用 CPU)通常只有 2 核心i7-11800H,8 核心 16 執行緒
記憶體約 12 GB16 GB(系統顯示 15.7 GB)
斷線風險閒置太久或跑太久會被中斷,畫面上的結果會不見不會
模板指令能不能直接用可以(!wget、!gdown、!cat 都是 Linux 指令)不行,要改成 Python(我已經改好,見第 5 節)
交作業要多做什麼報告寫「Colab」+Python 版本報告寫作業系統、CPU、Python 版本;一定要附 requirements.txt

「Colab 通常只有 2 核心、訓練會慢很多」是我根據 Colab 免費版一般配置推的,這次沒有實際在 Colab 上計時。

顯示卡用不用得到?

用不到。這份作業用的 Gensim 只用 CPU 算。你的 RTX 3060、Colab 的免費 GPU,對這份作業都沒有幫助。

在自己電腦上準備環境(照抄就好)

在作業資料夾打開終端機,一行一行貼:

py -3.12 -m venv .venv
.venv\Scripts\python.exe -m pip install gensim pandas scikit-learn matplotlib tqdm gdown nltk jupyter
.venv\Scripts\python.exe -m jupyter notebook

這三行在做什麼:

  1. 建一個獨立的 Python 環境(.venv 資料夾)。好處是作業用的套件跟電腦裡其他東西分開,不會互相打架。
  2. 裝作業要用的套件。
  3. 打開 Jupyter(跟 Colab 長得很像的筆記本介面,只是在你電腦上跑)。

硬碟要準備多少空間

東西大小
維基百科 11 個壓縮檔6.93 GB(Windows 檔案總管會顯示約 6.45 GB,因為它用 1024 進位)
抽樣出來的 5%、10%、20% 文字檔,加上整理過的版本⟦R:sample_disk⟧
GloVe 現成詞向量+論壇語料約 0.4 GB(放在 C:\Users\你\gensim-data)
要小心:照模板「解壓縮+合併」會多吃很多空間
模板的做法是先解壓縮(而且保留壓縮檔),再把 11 個檔合併成一個。同一份資料等於存三份。 我改成「直接讀壓縮檔、邊讀邊抽樣」,不解壓、不合併,結果完全一樣。規定允許改「載入資料」的部分,所以這樣改不扣分。