# 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