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

如何实现标题-段落对与指定通用标题的cosine语义相似度计算

余弦语义相似度计算最优实现策略

1. 技术选型

优先选择Sentence-BERT(封装在sentence-transformers库)作为语义表征方案,优势如下:专门针对语义相似度任务优化,生成的句向量可直接用于余弦相似度计算,推理速度比原生BERT快数个量级,效果远优于TF-IDF、Word2Vec等传统无监督表征方案,可同时适配短标题、长段落的混合输入场景。如果是中文内容,可直接选择对应的多语言或中文预训练权重。

2. 文本表征处理流程

  • 通用标题预处理:直接将通用标题输入预训练模型,生成固定维度的语义向量vec_general
  • 【标题-段落】对预处理:可根据业务需求二选一:
    • 无权重差异化需求:直接把待匹配标题 + 分隔符 + 段落内容拼接为单条文本,输入模型生成向量vec_pair
    • 需要突出标题权重:分别给待匹配标题、段落生成向量vec_title、vec_content,按权重加权融合,例如vec_pair = 0.7 * vec_title + 0.3 * vec_content,权重值可根据实际测试效果调整

3. 相似度计算

直接计算两个向量的余弦值即可,取值范围为0~1,数值越高代表相似度越高。可直接调用sklearn.metrics.pairwise.cosine_similarity实现,也可自行实现「向量点积除以向量模长乘积」的计算逻辑。

4. 可运行参考代码

from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

# 加载预训练模型,中文场景可替换为多语言/中文专用模型
model = SentenceTransformer('all-MiniLM-L6-v2')

# 生成通用标题向量
general_title = "指定的通用标题内容"
vec_general = model.encode(general_title).reshape(1, -1)

# 待匹配的【标题-段落】列表
pair_list = [
    "标题1 段落1全部内容",
    "标题2 段落2全部内容"
]
vec_pairs = model.encode(pair_list)

# 批量计算相似度
similarity_scores = cosine_similarity(vec_general, vec_pairs)[0]

# 输出结果
for idx, score in enumerate(similarity_scores):
    print(f"第{idx+1}组匹配度:{score:.4f}")

内容的提问来源于stack exchange,提问作者tasos_koukos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:10