Perplexity

猜下一個字時,
有多猶豫?

Perplexity 就是把「猶豫」換算成一個數字:這個模型平均在幾個選項之間搖擺。越小越好。

完全確定 PERPLEXITY1 每次都只有一個答案,一點都不猶豫。
像擲一顆骰子 PERPLEXITY6 六個選項一樣可能,就是在六個之間猶豫。
完全不會 PERPLEXITY11 整本詞表都一樣可能 — 數字就等於詞表大小。

所以 perplexity 的單位,其實是「等效的選項個數」。

語言模型只做一件事:猜下一個。

給它前面的字,它吐出一張機率表。下面是從本頁那份小語料學到的真實分佈:

看過「喜歡」之後,只有兩條路。路越少、越不平均,就越不猶豫。

N-gram 就是「只准往回看幾個字」。

真正的前文可能有幾百個字。N-gram 直接規定:只看前面 N−1 個,其他全部忘掉。

1-gram 我喜歡吃蘋果 什麼都不看
2-gram 我喜歡吃蘋果 看前 1 個
3-gram 我喜歡吃蘋果 看前 2 個

看得越多應該越準 — 但看得越多,「這組前文我見過」的機會也越少。這個矛盾等一下會親眼看到。

打分第一步:把機率乘起來。

整句話的機率 = 每一步機率連乘。問題馬上出現 — 它掉得非常快。

五個字就掉到千分之一。一個二十字的句子會小到 10-14 這種等級。長句子天生吃虧,所以不能直接拿機率比。

所以開 N 次方,再倒過來。

PP = P(w1…wN)−1/N
先開 N 次方 → 得到「每個字平均的機率」  |  再取倒數 → 變成「等效幾個選項」

開 N 次方把長度的影響消掉,長句短句就能公平比。取倒數只是為了讓數字符合直覺:平均機率 1/6 → perplexity 6,跟骰子對得上。

自己轉轉看。

這六句話就是全部的訓練語料。下面可以換 N、換測試句、開關平滑。

N 平滑 測試句
PERPLEXITY —

句末的 </s> 也算一步 — 模型得學會「話說完了」。

三個一定要知道的事。

Perplexity 量的不是「寫得好不好」,
只是模型有多意外。