You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建新闻相似文章推荐系统:cosine similarity的其他实现方式咨询

基于余弦相似度的相似文章推荐优化方案

你当前合并所有参考文章为长文再计算相似度的方式虽然简单,但容易稀释单篇高相关文章的特征,以下是几种更合理的余弦相似度实现方式:

  • 单篇匹配后聚合结果
    直接计算新文章与每一篇参考文章的余弦相似度,再通过阈值筛选或取Top N的方式得到候选文章:

    • 优势:能精准定位到与新文章最匹配的单篇参考内容,不会因为合并文本导致特征被平均。
    • 代码示例:
      from sklearn.metrics.pairwise import cosine_similarity
      
      # 假设reference_vecs是所有参考文章的向量列表(已完成文本向量化)
      # new_article_vec是新文章的向量
      similarity_scores = cosine_similarity([new_article_vec], reference_vecs)[0]
      
      # 筛选相似度≥0.7的文章
      qualified_indices = [i for i, score in enumerate(similarity_scores) if score >= 0.7]
      qualified_articles = [reference_articles[i] for i in qualified_indices]
      
      # 或者取相似度最高的前5篇
      top5_indices = similarity_scores.argsort()[-5:][::-1]
      top5_articles = [reference_articles[i] for i in top5_indices]
      
  • 参考向量均值匹配
    先计算所有参考文章向量的均值(得到代表整体参考内容的"中心向量"),再用新文章向量与该中心向量计算相似度:

    • 区别于合并长文:合并长文是文本拼接后生成向量,均值向量是先独立向量化再取平均,能均衡体现所有参考文章的特征,避免某篇长文章在合并后权重过高。
    • 代码示例:
      import numpy as np
      from sklearn.metrics.pairwise import cosine_similarity
      
      # reference_vecs是形状为(n, dim)的数组,n为参考文章数量,dim为向量维度
      center_vector = np.mean(reference_vecs, axis=0)
      overall_similarity = cosine_similarity([new_article_vec], [center_vector])[0][0]
      
      # 根据整体相似度阈值筛选
      if overall_similarity >= 0.6:
          print("新文章符合参考内容风格")
      
  • 加权相似度计算
    如果参考文章有优先级区分(比如部分是核心参考素材),可以给每篇参考文章设置权重,计算加权后的总相似度:

    • 适用场景:需要突出核心参考文章的匹配度时使用。
    • 代码示例:
      from sklearn.metrics.pairwise import cosine_similarity
      
      # 对应每篇参考文章的权重数组,权重和建议为1
      weights = [0.6, 0.2, 0.15, 0.05]
      similarity_scores = cosine_similarity([new_article_vec], reference_vecs)[0]
      
      # 计算加权总相似度
      weighted_total = sum(score * weight for score, weight in zip(similarity_scores, weights))
      
  • 聚类后精细匹配
    当参考文章数量极大时,先对参考向量做聚类(比如K-Means),再将新文章向量匹配到最接近的聚类,最后在该聚类内计算单篇相似度:

    • 优势:大幅减少计算量,同时聚焦到主题更接近的文章群中做精准匹配。
    • 代码示例思路:
      from sklearn.cluster import KMeans
      from sklearn.metrics.pairwise import cosine_similarity
      
      # 先对参考向量聚类
      kmeans = KMeans(n_clusters=5, random_state=42)
      cluster_labels = kmeans.fit_predict(reference_vecs)
      
      # 找到新文章所属的聚类
      new_cluster = kmeans.predict([new_article_vec])[0]
      # 筛选该聚类下的所有参考向量
      cluster_vecs = reference_vecs[cluster_labels == new_cluster]
      # 在聚类内计算相似度并筛选
      cluster_similarities = cosine_similarity([new_article_vec], cluster_vecs)[0]
      

内容的提问来源于stack exchange,提问作者Python-data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:45:35