使用 OpenAI 的 text-embedding-3-large 模型生成文档向量
1. 模型特点
OpenAI 的 text-embedding-3-large
模型是功能最强大的嵌入模型之一,具有以下特点:
- 高维嵌入:默认生成 3072 维的嵌入向量,可以捕捉更丰富的语义信息。
- 支持长文档:能够处理长达 8192 个 token 的文档,适合处理长篇文本。
- 多语言支持:在多语言任务中表现出色,适用于多种语言的文本处理。
- 套娃表示学习:采用套娃表示学习技术(MRL),允许开发者通过指定维度参数来调整嵌入的大小,从而在性能和成本之间进行权衡。
2. 适用场景
text-embedding-3-large
模型适用于多种自然语言处理任务,包括但不限于:
- 语义搜索:通过比较嵌入向量的相似度,实现文本内容的语义搜索。
- 文档检索:在知识库中检索与查询最相关的文档。
- 文本分类:将文本自动分类到预定义的类别中,如情感分析、新闻分类等。
- 问答系统:理解用户的问题并从大量文本中找到最合适的答案。
- 聚类分析:按主题对大量文本分组,如用户反馈分类。
- 异常检测:识别很少相关的离群值。
- 多样性测量:分析相似性分布。
3. 使用方法
3.1 初始化模型
from langchain_openai import OpenAIEmbeddings
# 初始化 OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
3.2 嵌入单个文本
text = "This is a test document."
# 嵌入查询
query_result = embeddings.embed_query(text)
print("Query embedding (first 5 elements):", query_result[:5])
3.3 嵌入多个文档
documents = ["Document 1", "Document 2", "Document 3"]
# 嵌入文档
doc_result = embeddings.embed_documents(documents)
print("Document embedding (first 5 elements of first document):", doc_result[0][:5])
3.4 指定嵌入维度
# 创建 1024 维的嵌入
embeddings_1024 = OpenAIEmbeddings(model="text-embedding-3-large", dimensions=1024)
# 嵌入文档
embedded_text = embeddings_1024.embed_documents([text])
print("Embedding dimension:", len(embedded_text[0]))
4. 实际应用示例
4.1 语义搜索
from openai import OpenAI
import pandas as pd
import numpy as np
# 初始化 OpenAI 客户端
client = OpenAI()
# 定义获取嵌入的函数
def get_embedding(text, model="text-embedding-3-large"):
text = text.replace("\n", " ")
return client.embeddings.create(input=[text], model=model).data[0].embedding
# 创建数据框
df = pd.DataFrame({
"text": ["This is a test document.", "Another document for testing.", "A third document."]
})
# 计算嵌入
df['embedding'] = df['text'].apply(lambda x: get_embedding(x, model='text-embedding-3-large'))
# 计算相似度
query_embedding = get_embedding("test document", model='text-embedding-3-large')
df['similarity'] = df['embedding'].apply(lambda x: np.dot(x, query_embedding))
# 按相似度排序
res = df.sort_values('similarity', ascending=False)
print(res)
4.2 文档检索
from langchain_community.vectorstores import FAISS
# 创建向量存储
vectorstore = FAISS.from_documents(documents, embeddings)
# 检索最相关的文档
query = "test document"
docs = vectorstore.similarity_search(query, k=3)
for doc in docs:
print(doc.page_content)
总结
text-embedding-3-large
模型在处理长文档和多语言任务时表现出色,适用于多种自然语言处理任务。通过指定维度参数,可以在性能和成本之间进行权衡,灵活应用于不同的场景。