-推荐关注-
1. Sentence Transformers是什么?
2. 安装
3. 使用方法非常简单
4. 对Embedding做相似度比较的一个例子
5. Sentence Transformers库中常见的模型
6. 与 Transformer 的关系
Transformer(单数)是什么
Transformers(复数)是什么
Sentence-Transformers 和 Transformers 的关系是什么
三者的关系
先回顾一下:
Embedding 是一种机器学习概念,用于将数据映射到高维空间,将语义相似的数据放在一起。Embedding模型通常是 BERT 或其他 Transformer 系列中的深度神经网络,可以用一系列称为向量(vectors)的数字有效地表示文本、图像和其他数据类型的语义
Embedding见:一文说清楚人工智能的嵌入(Embedding)是什么
而Embedding可以使用类似余弦相似度的度量方法来比较不同的Embedding是否相似的语义
1. Sentence Transformers是什么?
Sentence Transformers 是一个强大的 Python 库,它基于 预训练 Transformer 模型,如 BERT,用于学习和操作句子级别的嵌入表示(Embedding)。这个库特别适合于处理自然语言处理(NLP)任务,能够为文本、段落和图像生成嵌入表示(Embedding),并可以用于语义文本相似度、语义搜索、聚类分析和信息检索等多种应用场景。也可以使用交叉编码器模型(Cross-Encoder models)计算相似度得分
Sentence Transformers自己的官网说:SentenceTransformers 🤗 是一个用来生成句子、文本和图像Embedding的最先进的 Python 框架。
官网地址:https://huggingface.co/sentence-transformers
Sentence Transformers 由 UKPLab 创建并由 🤗 Hugging Face 维护
通俗点说就是:Sentence Transformers这个Python库,使用它自己管理的Embedding模型,来生成一个Embedding。
2. 安装 Sentence Transformers 库。
pip install -U sentence-transformers
3. Sentence Transformers使用方法非常简单:
1.引入sentence_transformers库
2.加载一个Embedding模型
3.把一个句子编码为Embedding
from sentence_transformers import SentenceTransformer
# 加载一个名为paraphrase-MiniLM-L6-v2的预训练模型,
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
# 定义一个句子列表sentences,其中包含1个短句
sentence = ['This framework generates embeddings for each input sentence']
# 使用model.encode()方法将每个句子编码成一个固定长度的Embedding向量(384维)
embedding = model.encode(sentence)
4. 使用Sentence Transformers对Embedding做相似度比较的一个例子
from sentence_transformers import SentenceTransformer
# 1. 加载一个名为all-MiniLM-L6-v2的预训练模型,
# 这是一个轻量级、高效的句子Embedding模型,将句子转化为固定长度的Embedding向量(默认长度是384)
# 句子Embedding表示句子的语义信息,可以用于比较句子之间的相似性
model = SentenceTransformer("all-MiniLM-L6-v2")
# 定义一个句子列表sentences,其中包含3个短句。
sentences = [
"The weather is lovely today.",
"It's so sunny outside!",
"He drove to the stadium.",
]
# 2. 使用model.encode()方法将每个句子编码成一个固定长度的Embedding向量(384维)
# 变量embeddings是一个二维数组,形状为[3, 384],表示3个句子的嵌入表示
embeddings = model.encode(sentences)
print(embeddings.shape)
# 打印嵌入Embedding的形状,输出: [3, 384],说明有3个句子,每个句子的嵌入维度是384。
# [3, 384]
# 3. 计算句子之间的语义相似度。嵌入向量之间的相似度通常通过 余弦相似度 计算。
# 它衡量两个向量的方向相似性,范围为[-1, 1],值越接近1表示越相似。
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# 是一个3x3矩阵,表示每对句子之间的相似度。对角线上的值为1.0,表示每个句子与自身完全相似。
# 第一行([1.0000, 0.6660, 0.1046])表示:
# 第一个句子与自己(完全相似)相似度为1.0000。
# 第一个句子与第二个句子(语义相关性较高)相似度为0.6660。
# 第一个句子与第三个句子(语义相关性较低)相似度为0.1046。
# 其他行以此类推。
# tensor([[1.0000, 0.6660, 0.1046],
# [0.6660, 1.0000, 0.1411],
# [0.1046, 0.1411, 1.0000]])
5. Sentence Transformers库中常见的模型:
Sentence Transformers官网上下载最多的模型:
通用模型:
sentence-transformers/all-MiniLM-L6-v2
:基于 MiniLM 架构,一个轻量化的模型,适合大多数任务,速度快。sentence-transformers/all-mpnet-base-v2
:基于 MPNet 架构,更强大的句子嵌入模型,但稍慢。
多语言支持模型:
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
:支持多语言句子嵌入,支持中文。
6. Sentence-Transformers 和 Transformer 的关系
Transformer(单数)
一种深度学习模型结构,由论文《Attention is All You Need》(2017)提出。它是神经网络的一种架构,专门设计用于处理序列数据(如文本)。Transformer是许多现代NLP模型的基础,比如BERT、GPT。它是一种通用模型架构,广泛用于机器翻译、文本分类、问答、文本生成等
Transformer 成为自然语言处理、计算机视觉等领域许多模型(如 GPT、BERT、ViT)的基础。
Transformers (复数)
Transformers 是由 Hugging Face 开发的一个开源库,提供了 API 和工具,可以轻松下载和训练最先进的预训练模型。使用预训练模型可以降低您的计算成本,并节省您从头开始训练模型所需的时间和资源。这些模型支持不同模态中的常见任务,例如:自然语言处理、计算机视觉、语音识别和音频分类、多模态,是基于 Transformer 架构的工具集
官网:https://huggingface.co/docs/transformers/index
Sentence-Transformers 和 Transformers 的关系
Sentence-Transformers 是一个基于 Hugging Face Transformers 库开发的工具。具体来说:
它使用 Transformers 提供的预训练模型(如 BERT、RoBERTa、DistilBERT)作为基础架构。 在这些基础模型上,Sentence-Transformers 添加了句子级的微调任务,使得模型可以生成更有意义的句子嵌入Embedding。
三者关系
概念 | 定义 | 与其他两者的关系 |
---|---|---|
Transformer | 基于自注意力机制的神经网络架构,用于处理序列数据(如文本)。 | Sentence-Transformers 的基础架构。 |
Transformers | Hugging Face 提供的库,便于加载、微调和使用 Transformer 模型。 | Sentence-Transformers 依赖该库加载基础模型(如 BERT)。 |
Sentence-Transformers | 生成句子嵌入的工具,基于 Transformer 架构并优化了句子级语义任务。 | 基于 Transformers 库构建,用于特定任务的句子嵌入生成和语义建模。 |
简单来说,Sentence-Transformers 是基于 Transformer 的一个具体实现,依赖于 Transformers 库,专注于句子嵌入和语义相似性任务。
往日文章:
--END--