Sentence Transformers 快速入门指南:文本嵌入与语义相似度计算

Sentence Transformers 快速入门指南:文本嵌入与语义相似度计算

sentence-transformers Multilingual Sentence & Image Embeddings with BERT sentence-transformers 项目地址: https://gitcode.com/gh_mirrors/se/sentence-transformers

什么是 Sentence Transformers

Sentence Transformers(也称为双编码器模型)是一种专门用于生成文本嵌入(embedding)的深度学习模型。它将任意长度的文本转换为固定维度的向量表示,这些向量能够很好地捕捉文本的语义信息。

核心特点

  1. 固定维度输出:无论输入文本长度如何,输出向量维度固定
  2. 高效计算:嵌入计算速度快,相似度比较效率极高
  3. 多功能应用:支持语义文本相似度、语义搜索、聚类、分类等多种任务
  4. 两阶段检索:常与交叉编码器(Cross-Encoder)配合使用,先快速筛选再精确排序

基础使用示例

1. 加载预训练模型

from sentence_transformers import SentenceTransformer

# 加载预训练模型(这里使用all-MiniLM-L6-v2作为示例)
model = SentenceTransformer("all-MiniLM-L6-v2")

all-MiniLM-L6-v2是一个经过优化的轻量级模型,在超过10亿训练样本上微调,输出384维向量,平衡了性能与效率。

2. 计算文本嵌入

sentences = [
    "今天天气真好",
    "外面阳光明媚!",
    "他开车去了体育场"
]

# 计算句子嵌入
embeddings = model.encode(sentences)
print(embeddings.shape)  # 输出: (3, 384)

3. 计算相似度矩阵

similarities = model.similarity(embeddings, embeddings)
print(similarities)

输出示例:

[[1.0000, 0.7560, 0.1246],
 [0.7560, 1.0000, 0.1511],
 [0.1246, 0.1511, 1.0000]]

从结果可见,前两句关于天气的描述相似度较高(0.7560),而与第三句关于开车的描述相似度较低(约0.13)。

交叉编码器(Cross-Encoder)使用

交叉编码器直接计算文本对之间的相似度得分,通常比双编码器更准确但计算成本更高。

1. 加载交叉编码器模型

from sentence_transformers import CrossEncoder

model = CrossEncoder("cross-encoder/stsb-distilroberta-base")

2. 排序查询结果

query = "一个男人在吃意大利面"
corpus = [
    "一个男人在吃东西",
    "一个男人在吃一片面包",
    "女孩抱着婴儿",
    # 更多句子...
]

# 对语料库中的句子进行排序
ranks = model.rank(query, corpus)

3. 直接计算文本对得分

sentence_pairs = [[query, sentence] for sentence in corpus]
scores = model.predict(sentence_pairs)

模型选择建议

双编码器模型选择

  1. 多语言场景:paraphrase-multilingual-MiniLM-L12-v2
  2. 英语场景:all-mpnet-base-v2(性能最佳)
  3. 轻量级需求:all-MiniLM-L6-v2

交叉编码器模型选择

  1. 通用场景:cross-encoder/stsb-roberta-large
  2. 轻量级需求:cross-encoder/stsb-distilroberta-base

性能优化技巧

  1. 批处理:使用encode()时传入多个句子而非单个处理
  2. 量化:对模型进行8位或16位量化减少内存占用
  3. GPU加速:利用CUDA进行并行计算
  4. 模型裁剪:对于特定领域可考虑裁剪模型层数

进阶学习路径

  1. 模型微调:在自己的数据集上继续训练模型
  2. 多模态扩展:探索文本-图像联合嵌入
  3. 生产部署:研究模型服务化与性能优化
  4. 评估指标:学习如何准确评估嵌入质量

Sentence Transformers为各种NLP任务提供了强大的语义理解能力,通过合理选择模型和优化策略,可以在实际应用中实现出色的性能表现。

sentence-transformers Multilingual Sentence & Image Embeddings with BERT sentence-transformers 项目地址: https://gitcode.com/gh_mirrors/se/sentence-transformers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尤贝升Sherman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值