如何规范Wordnet中的相似性度量

nis*_*ish 6 python nlp similarity nltk wordnet

我试图计算两个单词之间的语义相似性.我正在使用基于Wordnet的相似性度量,即Resnik度量(RES),Lin度量(LIN),Jiang和Conrath度量(JNC)以及Banerjee和Pederson度量(BNP).

为此,我使用的是nltk和Wordnet 3.0.接下来,我想结合从不同度量获得的相似度值.为此,我需要对相似度值进行标准化,因为某些度量值会给出介于0和1之间的值,而其他值则会给出大于1的值.

所以,我的问题是如何规范化从不同测量中获得的相似性值.

关于我实际上要做的事情的更多细节:我有一套单词.我计算单词之间的成对相似性.并删除与集合中其他单词不强相关的单词.

pka*_*zak 10

如何规范化单个度量

让我们考虑单个任意相似性度量M并采用任意单词w.

定义m = M(w,w).然后m取最大可能值M.

我们将其定义MN为规范化度量M.

对于w, u你可以计算的任何两个单词MN(w, u) = M(w, u) / m.

很容易看出,如果M采用非负值,则MN取值[0, 1].

如何通过多种措施将措施标准化

为了计算你自己定义的度量,F结合k个不同的度量,m_1, m_2, ..., m_k首先m_i使用上述方法独立地进行标准化,然后定义:

alpha_1, alpha_2, ..., alpha_k
Run Code Online (Sandbox Code Playgroud)

alpha_i表示第i个度量的权重.

所有alphas必须总计为1,即:

alpha_1 + alpha_2 + ... + alpha_k = 1
Run Code Online (Sandbox Code Playgroud)

然后为您计算自己的度量w, u:

F(w, u) = alpha_1 * m_1(w, u) + alpha_2 * m_2(w, u) + ... + alpha_k * m_k(w, u)
Run Code Online (Sandbox Code Playgroud)

很明显,F在[0,1]中取值

  • @pkacprzak我使用了nltk及其相似性方法,但是在某些方法(例如jcn_similarity)中,它返回inf(在nltk情况下为its1e300),对于某些方法,M(w,w)对于不同的方法甚至不相等!例如,对于某些方法,如果w是'escape.n.01'res_similarity(w,w)是8.4,并且w是'car.n.01'res_similarity(w,w)是7.5,例如jcn_sim结果是inf做?问题是什么? (2认同)