使用 Word2Vec 计算属性和关键词的相似度

# 定义属性和关键词
attributes = ['员工素质', '设施服务', '清洁程度', '舒适度', '性价比', '位置']
# attributes = [ '性价比']
total_keywords_list = ['地理位置', 'location', '房间', '前台', '隔音', 'staff', '舒服', '榻榻米', '房間', '酒吧', '设施', '服务', '地方', '不错', 'hotel', '楼顶', '成都', 'experience', '氛围', '干净', '工作人员', 'night', 'hostel', 'guest', 'bathroom']

# 加载预训练的中文词向量模型
# model = gensim.models.Word2Vec.load("path_to_pretrained_model")

# 定义属性关键词的代替词
replace_words = {
    "员工素质": ['工作人员', '员工', '人员', '素质', 'staff'],
    "设施服务": ['设施', '设备', '服务', 'service'],
    "清洁程度": ['卫生', '清洁', 'clean'],
    "舒适度": ['舒适', '舒服', 'comfort'],
    "性价比": ['价值', '性价比', 'value'],
    "位置": ['地理位置', 'location']
}
# 计算属性关键词和代替词的词向量
attribute_vectors =[]
for attr in attributes:
    if attr in model.wv.key_to_index:
       attribute_vectors.append(model.wv[attr])
    else:##属性在分词后的文本里面没有,使用替代词
        attr_words = replace_words.get(attr, [])  #属性的替代词
        attr_vecs = [] #替代词的向量集合,便于平均
        for w in attr_words: #遍历属性和其同义词
            if w in model.wv.key_to_index: #有
                attr_vecs.append(model.wv[w]) #获得替代词向量
        if attr_vecs: #非空
            attr_vec = np.mean(attr_vecs, axis=0) #求平均词向量
            model.wv.add_vector(attr, attr_vec)
            attribute_vectors.append(attr_vec)
        else:
            attribute_vectors.append(None)
# print(attribute_vectors)            
# 使用model.wv.similarity()函数计算属性和关键词之间的相似度
attribute_keyword={}
for attribute in attributes: ##找出关键词与属性相似度为0.8以上的词,字典输出
    att_key=[]
    for keyword in total_keywords_list:
        try:
            similarity = model.wv.similarity(attribute, keyword)
            if similarity>0.9:
                att_key.append(keyword)
        except:
            pass  
    attribute_keyword[attribute]=att_key     
   
print("一级属性对于的二级影响因素:",attribute_keyword)

分词得到 sentences 之后进行属性和关键词的相似度计算,相似度高则归为属性一类,为什么结果 model.wv.similarity('舒适度', '舒适') 才 0.5,而 model.wv.similarity('员工素质', '房间') 居然 0.9609442,这不符合常理啊!为什么怎么办呢?

这种情况可能是因为语料库中的词向量不够准确或者过于模糊,导致相似度计算出现了误差。可以尝试增加语料库的大小或者使用更加准确的词向量模型,比如使用 BERT 或者 ELMo 等预训练模型。此外,还可以尝试调整相似度的阈值,找到更加准确的属性关键词。

使用 Word2Vec 计算属性和关键词的相似度

原文地址: https://www.cveoy.top/t/topic/onJI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录