酒店的属性为员工素质设施服务清洁程度舒适度性价比位置。之后求解以上6个属性与文本中的25个关键词之间的相似度。相似度高则划分为属性的二级影响因素。采用Word2Vec里面的gensimmodel 进行相似度计算。问题是这6个属性在分词后的文本中可能没有也就没有这个属性的词向量需要通过找到与属性相近的词语然后求平均词向量并且添加到模型里面然后计算属性和关键词的词向量该怎么写程序
以下是一个基本的程序框架:
- 导入所需的库和模型 import gensim import jieba import numpy as np
model = gensim.models.Word2Vec.load('model_path') # 加载预训练好的模型
-
定义属性和关键词列表 attributes = ['员工素质', '设施服务', '清洁程度', '舒适度', '性价比', '位置'] keywords = ['关键词1', '关键词2', ... , '关键词25']
-
定义一个函数,用于获取与属性相近的词语,并求平均词向量 def get_similar_words(attribute, model): similar_words = model.wv.most_similar(attribute) # 获取与属性相近的词语 similar_words.append((attribute, 1)) # 将属性本身加入列表 word_vectors = [] for word in similar_words: word_vectors.append(model[word[0]]) # 获取每个词语的词向量 avg_vector = np.mean(word_vectors, axis=0) # 求平均词向量 return avg_vector
-
定义一个空的字典,用于存储属性的词向量 attribute_vectors = {}
-
循环遍历每个属性,获取其词向量并添加到字典中 for attribute in attributes: attribute_vector = get_similar_words(attribute, model) attribute_vectors[attribute] = attribute_vector
-
定义一个函数,用于计算属性和关键词之间的相似度 def get_similarity(attribute, keyword, model, attribute_vectors): if attribute not in attribute_vectors: attribute_vector = get_similar_words(attribute, model) attribute_vectors[attribute] = attribute_vector # 如果属性的词向量不存在,则先获取其词向量并添加到字典中 else: attribute_vector = attribute_vectors[attribute] keyword_vector = model[keyword] # 获取关键词的词向量 similarity = np.dot(attribute_vector, keyword_vector) / (np.linalg.norm(attribute_vector) * np.linalg.norm(keyword_vector)) # 计算余弦相似度 return similarity
-
循环遍历每个属性和关键词,计算它们之间的相似度,并输出相似度高于某个阈值的结果 threshold = 0.5 # 相似度阈值 for attribute in attributes: for keyword in keywords: similarity = get_similarity(attribute, keyword, model, attribute_vectors) if similarity > threshold: print('属性', attribute, '和关键词', keyword, '之间的相似度为', similarity
原文地址: https://www.cveoy.top/t/topic/fHZX 著作权归作者所有。请勿转载和采集!