语义相似度与句子嵌入
Sentence-BERT、用于语义搜索的余弦相似度,以及嵌入聚类。
语义相似度与句子嵌入 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
不只是单词,更是句子
词嵌入可以表示单词,但我们经常需要比较完整的句子或文档。对词向量求平均会丢失细微含义;我们希望得到一个能够捕捉完整语义的单一向量。
什么是句子嵌入
句子嵌入将整个句子映射为一个稠密向量,使含义相近的句子具有相近的向量,从而支持语义搜索和聚类。
sentence-transformers 库
sentence-transformers库让这件事变得十分简单。它封装了经过微调的转换器模型,可以直接生成高质量的句子向量。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")为什么选择 all-MiniLM-L6-v2
all-MiniLM-L6-v2是一个常用的默认选择:体积小、速度快且准确率高,可以生成 384 维向量。对于大多数应用,它能够很好地平衡速度与质量。
对句子进行编码
model.encode将句子列表转换为嵌入矩阵,每个句子对应一行。
sentences = [
"The cat sits on the mat.",
"A feline rests on the rug.",
"I am learning machine learning.",
]
embeddings = model.encode(sentences)
print(embeddings.shape) # (3, 384)衡量相似度
余弦相似度通过衡量两个向量之间的夹角来计算相似程度,而不考虑向量的大小。接近 1 的值表示含义非常相似,接近 0 的值表示彼此无关。
from sentence_transformers import util
sim = util.cos_sim(embeddings[0], embeddings[1])
print(sim.item()) # high, both about a cat resting使用 sklearn cosine_similarity
您也可以直接对嵌入矩阵使用 scikit-learn,获取完整的两两相似度矩阵。
from sklearn.metrics.pairwise import cosine_similarity
matrix = cosine_similarity(embeddings)
print(matrix) # (3, 3) pairwise similarities语义搜索的思路
语义搜索依据含义而不是关键词查找文档。先对查询和所有文档进行编码,然后根据它们与查询向量之间的余弦相似度为文档排序。
语义搜索示例
先对语料库进行一次编码,然后针对每个查询计算相似度并返回最匹配的结果。
from sentence_transformers import util
corpus = ["How to reset my password", "Refund policy details", "Track my order"]
corpus_emb = model.encode(corpus)
query_emb = model.encode("I forgot my login")
hits = util.semantic_search(query_emb, corpus_emb, top_k=2)
print(hits)实际应用
句子嵌入可用于 FAQ 匹配、重复检测、聚类、推荐,以及 RAG 系统中的检索步骤,为大语言模型提供相关上下文。
获得良好结果的提示
请选择针对您的任务训练的模型(语义搜索还是释义改写)。如果相似度指标需要,请对嵌入向量进行归一化;对于大型语料库,请使用向量数据库来快速进行最近邻搜索。
快速检查
请检验您对句子嵌入的理解。
回顾
回顾:句子嵌入将完整句子编码为向量。请使用 SentenceTransformer("all-MiniLM-L6-v2") 和 model.encode(sentences),然后使用余弦相似度进行比较。这构成了语义搜索的基础:对查询和语料库进行编码,再按相似度排序。它是 FAQ 匹配、聚类和 RAG 检索的关键。
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 53
- 课程
- 225
常见问题解答
「语义相似度与句子嵌入」课时是免费的吗?
是的 — 「语义相似度与句子嵌入」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「语义相似度与句子嵌入」这节课中我会学到什么?
Sentence-BERT、用于语义搜索的余弦相似度,以及嵌入聚类。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「语义相似度与句子嵌入」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。