词义消歧(基于词向量)

中文

from gensim.models import Word2Vec

model = Word2Vec.load('word2.model')

在这里插入图片描述
苹果的两种解释:
1.美国的一家高科技公司,经典产品有iphone.
2.水果的一种,产自…

对于句子“用苹果,性能好,分辨率高”,的“苹果”进行词义消歧:

content=['用','苹果','性能','好','分辨率','高']
des1=['美国','一家','高科技','公司','经典','产品','有','iphone','手机']
des2=['水果','一种','产自']
def w2v_mean(essay,model):
    ls=np.zeros(400)
    for unit in essay:
        try:
            ls+=np.array(model.wv[unit])
        except:
            pass
    return ls/len(essay)
import numpy as np
content=w2v_mean(content,model)

des1=w2v_mean(des1,model)

des2=w2v_mean(des2,model)
  • 余弦距离
    在这里插入图片描述
    可以看出与第一种解释内容距离最近。因此句子中的“苹果”为第一种解释。

    对于苹果的解释性文本和描述较多时,可以利用tf-idf获取要进行消歧的例子的tf-idf值,根据在不同类别的描述下的tf-idf平均值来最终获得例子的语境和含义。也能取得不错的效果。
    参考: 中文词义消歧tf-idf实现

英文

1.WordNet的应用:
我们可以获取待消歧词的各种定义,利用word2vec模型获取定义文本的向量表示方法,然后计算与待消歧词的上下文向量的余弦值。最大余弦值的待消歧词定义即为待消歧词在该语境下的词义。代码如下:

#导入预训练模型及相关工具包
from gensim.models import Word2Vec
from nltk.corpus import wordnet as wn
from string import punctuation
model=Word2Vec.load(r'C:\BaiduNetdiskDownload\aes-system\model\word2vec.model')

获取“bank”对应的文本信息:

content='We walked north along the east bank of the water'
(我们沿着河岸东边向北走)
content2='I have to check my balance at the bank'
(我得去银行查一下我的存款余额)

“bank"有银行、浅滩、堆积等含义,WordNet中的英文解释大概有十几种:
在这里插入图片描述
在这里插入图片描述
定义文本向量表示方法,这里为均值向量:

def w2v_mean(essay,model):
    ls=np.zeros(100)
    for unit in essay:
        try:
            ls+=np.array(model.wv[unit])
        except:
            pass
    return ls/len(essay)

获取每种定义的向量,并计算与content的余弦相似度:

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
content_vec=w2v_mean(token_content,model)
for unit in wn.synsets('bank'):
    txt=unit.definition()
    token_text=nltk.word_tokenize(txt)
    txt0=[k for k in token_text if k not in punctuation]
    vec=w2v_mean(txt0,model)
    print(txt,round(cosine_similarity([vec,content_vec])[1][0],4))

输出结果如下:
对于content1:
在这里插入图片描述
第一个定义得分最高,其含义为:坡地(尤指水体旁边的斜坡),完全符合语境。

对于content2:
在这里插入图片描述
最高分定义为:与银行交易或者开户,符合语境。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值