close up photo of programming of codes

利用 N-gram 實作語言模型:一步步了解其原理與實現

在學習自然語言處理 (Natural Language Processing) 時,我們通常會從語言模型 (Language Model) 開始。其中,N-gram 是一種基本而常見的語言模型。

首先,讓我們來理解語言模型。語言模型的原理其實並不複雜,它是專注於計算「一個句子的機率」。在一個句子中的每個字,我們都可以給它一個機率 P(S),代表這個字出現的機率。

例如,我們有一個句子「花博即將在台中__」,在留空的地方,大部分人可能會想到應該填入「舉行」。所以當我們看到「花博即將在台中」時,電腦能夠推斷出在這句話的後面,出現「舉行」的機率最高。這就是語言模型的工作原理。

但如果這個句子很長,計算這個機率將會變得非常複雜和耗時。為了解決這個問題,我們可以利用 Markov 假設,即當前的字只與前幾個字相關,這樣我們就不必追溯到第一個字,可以大大減少計算量。

接下來,我們會利用 N-gram 來實現語言模型。在這裡,我們會使用政府資料開放平台提供的桃園市官網市政新聞作為我們的資料集。

在實現 N-gram 時,首先,我們將每一篇文章進行分詞 (tokenize);然後為了表示一篇文章的開頭與結尾,在分詞之後,我們在前後分別加上 <s> 和 </s> 作為標記。然後,我們計算每個字出現的機率,並使用 set 來去除重複的字和機率。

我們使用的模型是 trigram,也就是計算接在兩個字之後第三個字的機率。然後,我們可以對這些結果進行排序,因此在預測下一個字時,能夠直接取得前幾個最高機率的字。

N-gram 是一種理論較為簡單,且容易實作的語言模型。但是,因為 N-gram 只是單純利用統計得出機率比較大的字詞組合,所以在預測時可能會看似沒有邏輯。如果想要得出更好的結果,可以嘗試使用較為複雜的模型,例如 Google 和 Facebook 發表的 Transformer 或是 ConvS2S 等模型。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *