iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 28
2

當我們在進行字義分析時可能會遇到一種狀況:

"This is a good movie." → :)
"This is a great movie." → :)
"This is a bad film." → :(
"This is a wonderful film." → ?

對於機器而言,在訓練集中它沒有見過wonderful,所以它沒辦法判別這個字的褒貶;而對於film,機器並不知道這是movie的相似字,在僅存的資料,它認為這個詞是貶義的。然而,這句話真實的意思應該是「這是一部很棒的影片。」應該賦予褒義。

為此,我們需要將語義包含到這樣的模型當中。我們可以運用「詞彙資料庫」(lexical database, e.g. Wordnet)中的語義資料和文字關係,將這些資訊放到這樣的模型中。

關於文字關係,可以參考:

https://ithelp.ithome.com.tw/upload/images/20190929/20118683nA8yldgjDh.png

  • hyponym: 上位詞 < - > hypernym: 下位詞
  • antonym: 反義詞 < - > synonym: 相似詞
  • meronym: 局部詞 < - > holonym: 整體詞

在Wordnet中的文字關係長得就像這樣:

https://ithelp.ithome.com.tw/upload/images/20190929/20118683L5reQ4AflG.png

而要計算兩個詞在詞義關係上有多相似,我們可以用三種公式:

  1. 根據關係距離取得相似度

https://ithelp.ithome.com.tw/upload/images/20190929/20118683bW5VTV4NW1.png

其中pathlen(c1,c2)是指兩字的距離。若c1=c2,則pathlen = 1。
例如:

  • simpath(nickel, nickel) = 1 / 1 = 1
  • simpath(nickel, coin) = 1 / 2 = 0.5
  • simpath(nickel, money) = 1 / 6 = 0.17
  • simpath(nickel, Richter scale) = 1 / 8 = 0.125
  1. Wu & Palmer相似度,把語義深度(在資料庫中的深度)也列入考量:

https://ithelp.ithome.com.tw/upload/images/20190929/20118683pguWuyw8nX.png

其中depth(c)是指字的深度,LCS(c1,c2)是lowest common subsumer,深度最低的相似字。
例如:

  • simwup(nickel, money) = 2*2 / (3+6) = 0.44
  • simwup(nickel, Richter scale) = 2*1 / (3+6) = 0.22
  1. Lin Similarity,將文字出現在文集中的機率也考慮進去:

https://ithelp.ithome.com.tw/upload/images/20190929/201186830QWCYFpD0y.png

P(c)將所有包含這個字的文字(文字關係在c字之下的所有字,如P(coin)中的w={coin, nickel, dime}),N則為所有文集中的字數。

https://ithelp.ithome.com.tw/upload/images/20190929/201186838YZWt5EZUR.png

透過P(c)我們可以計算information content (IC):

https://ithelp.ithome.com.tw/upload/images/20190929/20118683zIvooPvjFD.png

再透過IC計算Lin Similarity:

https://ithelp.ithome.com.tw/upload/images/20190929/201186835fwRvrDX6F.png

除了利用語言學中的語義關係,我們也可以用文字在文集中的分佈情形來計算文字相似度,例如知名的Word2Vec


上一篇
Day 27: 猜字AI加強版 -- Bigram Guesser
下一篇
Day 29: 電腦怎麼知道「說」跟「曰」意義相近?關於文字相似度
系列文
深入淺出搜尋引擎和自然語言處理30

尚未有邦友留言

立即登入留言