結論:整份作業只建立在 4 個觀念上。這 4 個懂了,後面每一步都只是「把觀念寫成程式」。考試也最可能從這裡出題。
電腦不知道 cat 是什麼。它只會做數學。
所以我們幫每個英文字準備一串數字,例如 100 個數字。這串數字叫 詞向量(word embedding)。
你可以把這 100 個數字想成這個字在「意思地圖」上的座標。平常的地圖只有 2 個數字(經度、緯度),這張地圖有 100 個方向,所以人畫不出來,但電腦算得出來。
把每個字的座標收集起來,就是一本「字典」:查一個字,得到它的座標。
一份好的詞向量,會把 cat(貓)和 dog(狗)放得很近,把 cat 和 truck(卡車)放得很遠。
「多近」用一個叫 cosine similarity(餘弦相似度)的分數來量。白話:看兩個字的「方向」有多一致。
| 分數 | 意思 |
|---|---|
| 接近 1 | 方向幾乎一樣 → 很像 |
| 接近 0 | 沒什麼關係 |
| 負的 | 方向相反(注意:方向相反 ≠ 意思相反。反義詞例如 good/bad 的分數反而常常很高,見第 11 節) |
報告第 4 題「找最像的 5 個字」,就是在地圖上找離它最近的 5 個鄰居。
這是整份作業最核心的一點。看這張圖:
從 man 走到 woman 的那一步(紅色箭頭),跟從 king 走到 queen 的那一步,方向和長度大致一樣(老師的說法:「不是這麼 exactly 一樣,但趨勢很接近」)。四個點大約排成一個平行四邊形。
所以只要知道三個點,就能推出第四個點:
queen − king + man ≈ woman
(B) (A) (C) (D)
白話:「把 king 變成 queen 的那一步」,套到 man 身上,就會走到 woman。
作業的考卷 19,544 題,每一題都是這樣:給 A、B、C,叫電腦算出 D。
沒有人一個一個去設定座標。電腦是讀了大量文章之後,自己算出來的。
它根據一句很有名的話:「看一個字的朋友,就知道它是什麼字。」常常出現在同樣前後文的字,意思通常很像。
例如「我養了一隻__,牠很可愛」,空格可以填貓、狗、兔子。這些字前後文很像,所以座標會很近。
這個「讀文章、看鄰居、算座標」的過程叫 訓練。作業用的方法叫 Word2Vec,裡面又分兩種:
| 方法 | 它在練習什麼 | 比喻 |
|---|---|---|
| Skip-gram(老師投影片的重點) | 給中間的字,猜旁邊會出現哪些字 | 看到「貓」,猜旁邊可能有「養」「可愛」 |
| CBOW | 給旁邊的字,猜中間是什麼字 | 看到「養了一隻__很可愛」,猜中間是「貓」 |
練習的過程中,電腦會一直微調每個字的座標,讓猜測越來越準。練完之後,座標就是我們要的詞向量。
結論:你有兩個選擇:Google Colab(老師推薦)或自己的電腦(我這次用的)。你的筆電比 Colab 免費版強很多,我建議在自己電腦跑,但交作業時要多附 requirements.txt、報告要寫電腦規格。
| Google Colab(免費版) | 自己的電腦(你的筆電) | |
|---|---|---|
| 要不要安裝 | 不用,開瀏覽器就能用 | 要裝 Python 和套件(下面有指令) |
| CPU(訓練詞向量只用 CPU) | 通常只有 2 核心 | i7-11800H,8 核心 16 執行緒 |
| 記憶體 | 約 12 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
這三行在做什麼:
.venv 資料夾)。好處是作業用的套件跟電腦裡其他東西分開,不會互相打架。| 東西 | 大小 |
|---|---|
| 維基百科 11 個壓縮檔 | 6.93 GB(Windows 檔案總管會顯示約 6.45 GB,因為它用 1024 進位) |
| 抽樣出來的 5%、10%、20% 文字檔,加上整理過的版本 | ⟦R:sample_disk⟧ |
| GloVe 現成詞向量+論壇語料 | 約 0.4 GB(放在 C:\Users\你\gensim-data) |