使用 Word2Vec 计算属性和关键词的相似度
使用 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 等预训练模型。此外,还可以尝试调整相似度的阈值,找到更加准确的属性关键词。
原文地址: https://www.cveoy.top/t/topic/onJI 著作权归作者所有。请勿转载和采集!