Text Embedding 是自然语言处理(NLP)中的一个核心技术,它指的是将文本(如单词、短语、句子或段落)转换为固定大小的实数向量,这些向量可以捕获文本中的语义信息,使得语义上相似的文本在嵌入空间中具有相似的向量表示。这种转换使得文本数据能够被计算机理解和处理,从而可以在各种NLP任务中使用。
Text Embedding 特点
- 语义相似性:在嵌入空间中,语义上相似的单词或文本通常具有相近的向量表示。
- 上下文敏感性:某些嵌入方法(如BERT)可以生成上下文相关的嵌入,即同一个单词在不同的上下文中可能有不同的嵌入表示。
- 维度:嵌入向量的维度是一个超参数,可以根据任务和数据集进行调整。
应用场景
- 文本分类:使用嵌入向量作为文本表示,输入到分类模型中进行训练。
- 信息检索:通过计算嵌入向量之间的相似度来检索相关的文本。
- 问答系统:将问题和答案转换为嵌入向量,然后计算它们之间的相似度来找到最佳答案。
- 语义相似度计算:直接计算两个文本嵌入向量之间的相似度(如余弦相似度)来评估它们的语义相似性。
Text Embedding 常用模型介绍
1、OpenAI的text-embedding模型
1.1、text-embedding-ada-002
text-embedding-ada-002
是 OpenAI 于 2022 年 12 月提供的一个 embedding 模型,但用户需要调用接口并付费使用。
模型特点:
- 统一能力:OpenAI 通过将五个独立的模型(文本相似性、文本搜索-查询、文本搜索-文档、代码搜索-文本和代码搜索-代码)合并为一个新的模型,使这个单一的表述在一系列不同的文本搜索、句子相似性和代码搜索基准中,比以前的嵌入模型表现得更好。
- 上下文:上下文长度为 8192,这使得它在处理长文档时更加方便。
- 嵌入尺寸:这个模型的嵌入尺寸只有 1536 个维度,是
davinci-001
嵌入尺寸的八分之一。这使得新的嵌入在处理矢量数据库时更具成本效益。
模型使用:
from openai.embeddings_utils import get_embedding, cosine_similarity
def search_reviews(df, product_description, n=3, pprint=True):
embedding = get_embedding(product_description, model='text-embedding-ada-002')
df['similarities'] = df.ada_embeddi