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。
posted @ 2026-08-22 23:37  立体风  阅读(5)  评论(0)    收藏  举报