你有沒有注意過,輸入法常常猜得到你下一個字? 你可以把它想成把句子切成固定長度的小片段,看看哪些片段最常一起出現,再拿來猜下一個詞。 N-gram 是最早的語言模型思路之一,靠的是統計,不是理解語意。 這也讓它很適合先拿到可用答案,再慢慢把精度往上推。
容易混淆
N-gram vs 深度學習語言模型 N-gram:只看前面固定長度的詞 深度學習語言模型:能學更長距離的語意關係 最關鍵的區別:先看它是在比什麼,再看它怎麼做。
N-gram vs 分詞 N-gram:是在切好詞之後做組合統計 分詞:是先把句子切成詞,還沒開始做組合 最關鍵的區別:先看它是在比什麼,再看它怎麼做。
記住這句就好
先切片,再數頻率,最後猜下一個。
實際案例
輸入法聯想 你打出「今天晚上」,系統用常見詞組頻率推薦後面的字。
拼字修正 系統看到不常見的字串,就用常見 N-gram 片段去找更像樣的修正。
算法與應用
N-gram 的基本做法是統計前 N-1 個詞出現後,下一個詞的條件機率。 N 越大,上下文越多,但資料稀疏問題也越嚴重。 實務上常搭配平滑技術,避免沒看過的組合直接變成零機率。
情境判斷
Q1(直覺題): 你要做一個超快的輸入法推薦,資料很多,但不追求理解句意,該用什麼?
N-gram,因為它快、簡單、而且能做基本的下一詞預測。
Q2(判斷題): 如果把 N 設得很大,結果反而很差,最常見原因是什麼?
資料稀疏,很多組合在語料中根本沒出現,機率估計會失真。
常見問題
N-gram 現在還有用嗎?
有,特別是簡單、快速、資源有限的場景。
中文一定能直接用嗎?
不能直接用,通常要先分詞。
它和 GPT 的差別是什麼?
N-gram 看固定窗口,GPT 看更長且更靈活的上下文。