sentence transformer 例子及说明
例子
Retrfrom sentence_transformers import SentenceTransformer
# 1. Load a pretrained Sentence Transformer model
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# The sentences to encode
sentences = [
"The weather is lovely today.",
"It's so sunny outside!",
"He drove to the stadium.",
]
# 2. Calculate embeddings by calling model.encode()
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]
# 3. Calculate the embedding similarities
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.6660, 0.1046],
# [0.6660, 1.0000, 0.1411],
# [0.1046, 0.1411, 1.0000]])
解读语法及说明用途
这段代码展示了使用 sentence-transformers 库进行文本向量化(Embedding)和计算句子相似度的经典标准流程。
以下是针对代码中每一行和各语法模块的详细解读:
1. 模块导入与模型实例化
from sentence_transformers import SentenceTransformer
- 语法要点:
from ... import ...语法,从第三方库sentence_transformers中导入核心类SentenceTransformer。
# 1. Load a pretrained Sentence Transformer model
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
- 语法要点:类的实例化(Instantiation)。
- 含义:调用构造函数创建了一个
model对象,传入的参数是 Hugging Face 上的预训练模型名称。如果是首次运行,库会自动从云端下载该模型的权重和分词器并在本地缓存。
2. 数据定义与特征编码
# The sentences to encode
sentences = [
"The weather is lovely today.",
"It's so sunny outside!",
"He drove to the stadium.",
]
- 语法要点:定义了一个标准的 Python 列表(List),包含 3 个字符串元素。
# 2. Calculate embeddings by calling model.encode()
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]
-
语法要点:
-
model.encode(sentences):调用实例方法encode,接收字符串列表进行批量推理。 -
embeddings.shape:访问输出对象的shape属性(默认返回 NumPy 数组或 PyTorch 张量的维度元组)。 -
结果含义:
(3, 384)表示编码生成了一个二维矩阵——3 行(对应输入的 3 个句子),每行有 384 个数值(该特定模型输出的稠密向量维度为 384 维)。
3. 相似度计算与矩阵输出
# 3. Calculate the embedding similarities
similarities = model.similarity(embeddings, embeddings)
print(similarities)
-
语法要点:
-
model.similarity(a, b):Sentence Transformers 内置的方法,用于计算两组向量之间的余弦相似度(Cosine Similarity)。 -
传入
(embeddings, embeddings)表示让这 3 个句子的向量与自身做全量两两比对(Self-similarity)。 -
结果分析:
# tensor([[1.0000, 0.6660, 0.1046],
# [0.6660, 1.0000, 0.1411],
# [0.1046, 0.1411, 1.0000]])
- 输出为一个 \(3 \times 3\) 的对称张量(Tensor):
- 对角线值(1.0000):句子与自身的相似度,完全一致。
- 第 1 句与第 2 句(0.6660):“天气很好”与“外面阳光明媚”,语义相近,得分较高。
- 第 1 句与第 3 句(0.1046):“天气很好”与“他开车去体育场”,语义无关,得分接近于 0。

浙公网安备 33010602011771号