# Embedding And SentenceTransformers
# 什么是Embedding?
嵌入数据(Embedding Data)是一种将高维数据映射到低维空间的技术,通常应用于自然语言处理(NLP)和机器学习领域。在NLP中,词嵌入是一种常见的应用,它将单词映射到连续向量空间中,使得语义相近的词在向量空间中距离较近。
# 什么是SentenceTransformers?
SentenceTransformers 是一个用于将句子、文本和图像生成嵌入的 Python 框架。您可以使用此框架来计算 100 多种语言的句子/文本嵌入。然后可以将这些嵌入与余弦相似度进行比较,以找到具有相似含义的句子。这对于语义文本相似、语义搜索或释义挖掘非常有用。
该框架基于PyTorch和Transformers,并提供了大量针对各种任务进行调整的预训练模型。此外,微调您自己的模型也很容易。
# 如何使用SentenceTransformers生成Embedding?
下面我将以BAAI/bge-large-zh
模型为例,演示如何使用SentenceTransformers来快速生成Embedding,和计算Embedding之间的相似性。
# 安装SentenceTransformers
框架
# 安装SentenceTransformers框架
$ pip install -U sentence-transformers
# 加载bge-large-zh
模型
# 加载 bge-large-zh 模型
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('BAAI/bge-large-zh')
# 计算Embedding
# 文本内容
sentence = "数据线pd快充iphone14适配充电线短款双头Type-C公对公雷电3线适用苹果华为三星小米手机充电宝快充短线便携"
# encode
embedding = model.encode([sentence])
print(embedding, len(embedding))
# [[-0.18654086 -0.4564763 -0.30071327 ... -0.43740666 -0.03736541
# -0.21082158]] 1
# Embedding
相似性和距离
from sentence_transformers import util
# 计算两个向量之间的相似性和距离
sentence_1 = "数据线pd快充iphone14适配充电线短款双头Type-C公对公雷电3线适用苹果华为三星小米手机充电宝快充短线便携"
sentence_2 = "小米"
embedding_1 = model.encode([sentence_1])
embedding_2 = model.encode([sentence_2])
# 计算余弦相似性
cosine_similarity = util.pytorch_cos_sim(embedding_1, embedding_2)
# 计算距离(1 - 余弦相似性)
distance = 1 - cosine_similarity.item()
print(cosine_similarity, distance)
# tensor([[0.7151]]) 0.2849287986755371