为了处理文本和词组之间的相关度计算,前后尝试了BERT,TF-IDF,文本相似度算法(如Jaccard相似度或余弦相似度),Word2Vec以及间接方法(用随机森林和XGBoost把指标重要性摸出来,再去除权重过大值,重新归一化,最后得到一个更新的衡量值),还尝试摸索了一下XLNET和LDA模型。
最后选了SBERT,代码很简单,随便看看
import pandas as pd
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
# 加载预训练的SBERT模型
model = SentenceTransformer('sentence-transformers/bert-base-nli-mean-tokens')
# 产品描述
product_description = "xxxx"
# 加载Excel文件
file_path = '/content/test_final.csv' # 修改为您的文件路径
df = pd.read_csv(file_path)
# 清除“月xxx量”和“xxx份额”中为空值的行
df.dropna(subset=['月xxx量', 'xxx份额'], inplace=True)
# 数据清洗:去除重复的关键词,转换为小写
df['关键词'] = df['关键词'].str.lower().drop_duplicates()
# 生成产品描述的嵌入
description_embedding = model.encode(product_description)
# 计算每个关键词与产品描述的相似度
similarities = []
for keyword in df['关键词']:
keyword_embedding = model.encode(keyword)
similarity = cosine_similarity([description_embedding], [keyword_embedding])[0][0]
similarities.append(similarity)
# 将相似度作为新列添加到DataFrame
df['相关度'] = similarities
# 保存到新的Excel文件
output_file_path = '/content/updated_keywords_with_similarity.xlsx'
df.to_excel(output_file_path, index=False)
output_file_path