Wordnet是一个词典。每个词语(word)可能有多个不同的语义,对应不同的sense。而每个不同的语义(sense)又可能对应多个词,如topic和subject在某些情况下是同义的,
WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。
WordNet的描述对象包含compound(复合词)、phrasal verb(短语
动词)、collocation(搭配词)、idiomatic phrase(成语)、word(单词),其中word是最基本的单位。
一个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.单词
·dog 英[dɒg] 美[dɔɡ]
· 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的词义集合。