Wordnet是一個詞典。每個詞語(word)可能有多個不同的語義,對應不同的sense。而每個不同的語義(sense)又可能對應多個詞,如topic和subject在某些情況下是同義的,
WordNet是由Princeton 大學的心理學家,語言學家和計算機工程師聯合設計的一種基於認知語言學的英語詞典。它不是光把單詞以字母順序排列,而且按照單詞的意義組成一個“單詞的網絡”。
一個sense中的多個消除了多義性的詞語叫做lemma。
例如,“publish”是一個word,它可能有多個sense:
1. (39) print, publish -- (put into print; "The newspaper published the news of the royal couple's divorce"; "These news should not be printed")
2. (14) publish, bring out, put out, issue, release -- (prepare and issue for public distribution or sale; "publish a magazine or newspaper")
3. (4) publish, write -- (have (one's written work) issued for publication; "How many books did Georges Simenon write?"; "She published 25 books during her long career")
在第一個sense中,print和publish都是lemma。Sense 1括號內的數字39表示publish以sense 1在某外部語料中出現的次數。顯然,publish大多數時候以sense 1出現,很少以sense 3出現。
WordNet的具體用法
NLTK是python的一個自然語言處理工具,其中提供了訪問wordnet各種功能的函數。下面簡單列舉一些常用功能:
得到wordnet本身:
from nltk.corpus import wordnet
獲得一個詞的所有sense,包括詞語的各種變形的sense(語義):
wordnet.synsets('published')
[Synset('print.v.01'),
Synset('publish.v.02'),
Synset('publish.v.03'),
Synset('published.a.01'),
Synset('promulgated.s.01')]
得到synset的詞性:
>>> related.pos
's'
得到一個sense的所有lemma:
>>> wordnet.synsets('publish')[0].lemmas
[Lemma('print.v.01.print'), Lemma('print.v.01.publish')]
得到Lemma出現的次數:
>>> wordnet.synsets('publish')[0].lemmas[1].count()
39
在wordnet中,名詞和動詞被組織成了完整的層次式分類體系,因此可以通過計算兩個sense在分類樹中的距離,這個距離反應了它們的語義相似度:
>>> x = wordnet.synsets('recommended')[-1]
>>> y = wordnet.synsets('suggested')[-1]
>>> x.shortest_path_distance(y)
0
形容詞和副詞的相似度計算方法:
形容詞和副詞沒有被組織成分類體系,所以不能用path_distance。
>>> a = wordnet.synsets('beautiful')[0]
>>> b = wordnet.synsets('good')[0]
>>> a.shortest_path_distance(b)
-1
形容詞和副詞最有用的關係是similar to。
>>> a = wordnet.synsets('glorious')[0]
>>> a.similar_tos()
[Synset('incandescent.s.02'),
Synset('divine.s.06'),
……]
WordNet是面向語義的英語詞典,類似於傳統字典。它是NLTK語料庫的一部分,可以被這樣調用:
更簡潔的寫法:
1.單詞
· n. 狗;醜女人;卑鄙的人;(俚)朋友
· vt. 跟蹤;尾隨
查看一個單詞的同義詞集用synsets(); 它有一個參數pos,可以指定查找的詞性。這裏得到的同義詞集是同義詞集的集合,即裏面不是單純的詞,是同義詞的集合.
注:
· 一個synset(同義詞集:指意義相同的詞條的集合)被一個三元組描述:(單詞.詞性.序號)。
這裏的’dog.n.01’指:dog的第一個名詞意思;’chase.v.01’指:chase的第一個動詞意思
· pos可爲:NOUN、VERB、ADJ、ADV…
2.同義詞集
注:一些關係的獲得只能通過Lemmas,比如反義詞:
3. Similarity
synset1.path_similarity(synset2): 是基於上位詞層次結構中相互連接的概念之間的最短路徑在0-1範圍的打分(兩者之間沒有路徑就返回-1)。
同義詞集與自身比較將返回1
本文利用WordNet Similarity 工具包進行詞義相似度的計算
以下十種相似度計算方法:
①Path方法
該方法主要依據Rada提出的基於最短路徑的相似度度量方法[126],將兩個詞義概念在WordNet層次結構樹上最短路徑長度的倒數作爲兩者的相似度。
②Hso方法
該方法即Hirst與St-Onge所提出的基於詞彙鏈的相似度計算方法[128],如2.4節公式(2.5)所示。兩個詞義概念之間的詞彙鏈越長,發生的轉向次數越多,則相似度越低。
③Lch方法
該方法由Leacock與Chodorow提出,其對Rada的最短路徑方法作了改進,引入了兩者在WordNet層次結構樹上的深度,如公式(3.2)所示[172]。
sim-lch (s1,s2)=-log (d(s1,s2)/2D)
其中,表示兩個概念在WordNet層次結構樹上最短路徑的距離,D表示兩者在WordNet概念層次結構樹中深度的較大值。12 (, )dss
④Lesk方法
該方法即2.4節介紹的Lesk所提出的基於釋義重疊的相似度計算方法,將兩個詞義概念的釋義的重合詞語數量作爲兩者的相似度[13]。
⑤Lin方法
Lin從信息論的角度來考慮詞義概念的相似度,認爲相似度取決於不同詞義概念所包含信息的共有性(Commonality)和差別性(Difference)[136]。該方法將相似度定義爲公式(3.3):
sim-lin (s1,s2)=- 2*log P(c) / (log P(s1)+logP(s2))
其中c表示s1與s2在WordNet層次結構樹上的最深父結點,P(s)表示任選一個詞義概念屬於類別s的概率。
⑥Jcn方法
該方法由Jiang和Conrath提出,將詞義概念層次結構與語料統計數據結合,將基於最短路徑的方法[126]和基於概念結點信息量[133]的方法融合,計算方法如2.4節公式(2.12)所示[135]。
⑦Random方法
該方法將隨機生成數作爲兩個詞義概念之間的相似度,僅作爲一種基線對照方法。
⑧Resnik方法
該方法爲由Resnik提出的基於概念結點信息量的相似度計算方法,根據兩個概念所共有的最深父結點的信息量,衡量兩者的相似度[133]。計算方法如2.4節公式(2.9)所示。
⑨Wup方法
該方法是由Wu與Palmer提出的基於路徑結構的相似度度量方法[173],綜合考慮了概念結點、共有父結點、根結點之間的路徑關聯情況,其計算方法如公式(3.4)所示。
sim-wup(s1,s2)=2*N3/(N1+N2+2*N3)
將1 s 與2 s 的最深上層父概念記作s3 ,N1 表示由概念結點1 s 到達3 s 的
路徑上的結點的數量;N2 表示由2 s 到達3 s 的路徑上的結點的數量;N3 表示由3 s 到達
概念層次結構樹的根結點的路徑上的結點的數量。
⑩Vector_pairs方法
該方法是由Patwardhan與Pedersen提出的基於WordNet層次結構信息和語料庫共現信息的相似度計算方法[138]。對每個詞義概念,根據語料庫統計信息,得到其釋義中詞語的共現詞語,爲其構建釋義向量(Gloss Vectors);根據不同詞義的釋義向量之間的餘弦夾角衡量兩者的詞義相關度。WordNet中的概念釋義往往比較簡短,包含的詞語比較少;單純依賴當前釋義有時無法判斷詞義的相關度。爲了解決這一問題,該方法藉助WordNet的語義結構關係,尋找與當前概念具有直接語義關係的概念的釋義;利用這些關聯概念的釋義來作爲當前概念的補充,以保證釋義向量的維數足以判定相關度。
Patwardhan對多種不同詞義相似度計算方法的效果進行考查,比較不同方法與人類判斷(Human Judgement)的差異,發現Vector_pairs方法得到的相似度與人類判斷最爲接近;在SensEval-2數據集上的詞義消歧實驗也表明Vector_pairs方法的效果要優於其它方法[138]。鑑於此,本章在後續實驗中採用Vector_pairs方法來計算詞義相似度。
在進行詞義選擇時,本文需要依次計算歧義詞的詞義與上下文消歧特徵詞的相似度,這需要解決詞義(Sense)與詞語(Word)的相似度計算問題。參照Rada[126]和Resnik[133]的研究工作,本文利用公式(3.5)將其轉換爲詞義與詞義的相似度計算問題;取最相關的詞義組合的相似度作爲計算結果。
sim(s,w)=max(sim(s,s-w'))
s-w'屬於 senses(w)
s 表示某一詞義,w表示某一詞語,senses(w)表示詞語w的詞義集合。