1.Introduction
在自然語言處理中, 想要探討兩個字之間, 是否存在某種關係, 例如某些字比較容易一起出現, 這些字一起出現時, 可能帶有某種訊息
例如, 在新聞報導中, 有 New , York , 這兩個字一起出現, 可以代表一個地名 New York , 所以當出現了 New 這個字, 則有可能出現 York
這可以用 Pointwise Mutual Information(PMI) 計算
Pointwise Mutual Information 的公式如下:
其中, 代表文字 x 和文字 y 一起出現的機率, 而 為文字 x 出現的機率 , 為文字 y 出現的機率
如果某兩個字的出現是獨立事件, 則 PMI 為 0
若有兩個字出現的機率不是獨立事件, 某個字出現時提昇另一個字的出現的機率, 則 PMI 大於 0
也就是說, 如果這兩個字的出現越不是偶然, 則 Pointwise Mutual Information 算出來的值越高, 越有可能帶有某種訊息
舉個例子, 以下為一個表格, 統計一篇文章中, 某些字是否一起出現
表格中的數字, 代表左方的字和上方的字, 一起出現的次數
如果這篇文章總共只有 19 個字, 來計算 information 和 data 這兩字的 PMI , 得出
算出來的數字大於 0 , 表示 information 和 data 這兩個字的出現, 不是獨立事件
2.Implementation
我們用 python nltk
的 brown corpus 新聞類別文章, 來計算 New , York 的 PMI 和 New , The 的 PMI , 並比較兩者差異
將以下程式碼複製到 pmi.py 這個檔案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
其中 _Fdist
是單字出現的頻率 , _Sents
是文章中所有的句子 , p(x)
計算單字 x 出現的機率, ` pxy(x,y) 計算單字 *x* 和單字 *y* 出現在同一個句子的機率,
pmi(x,y)` 計算單字 x 和單字 y 的 Pointwise Mutual Information
到 python 的 interactive mode 載入這個檔案
1
|
|
先來計算 new 和 york 各別出現的機率
1 2 3 4 5 |
|
計算 new , york 出現在同一句子的機率
1 2 |
|
計算 new , york 的 PMI
1 2 |
|
再來看看, new , the 出現在同一句子的機率
1 2 |
|
比 new , york 出現在同一句子的機率還高, 但是因為 the 出現次數較多
算一下 the 出現的機率
1 2 |
|
計算new , the 的 PMI , 還是沒有比 new , york 高
1 2 |
|
以上結果顯示, PMI 可以得出, new 和 york 一起出現的情形, 比較不是偶然的事件, 表示這兩個詞一起出現可能帶有較多訊息
雖然 new 和 the 出現的頻率比較多, 但同時 the 出現的頻率也比較多, 計算結果 PMI 可以把 the 的出現頻率除掉, 得出 new 和 the 的出現, 比較像是獨立事件
3.Reference
本文參考至coursera線上課程
D. Jurafsky, and C. Manning. Natural Language Processing
https://www.coursera.org/course/nlp