菜单

嵌入和向量搜索

相关源文件

目的与范围

本文档涵盖了OpenAI Cookbook中OpenAI嵌入在语义搜索、分类、聚类和推荐系统中的综合应用。它展示了从基本嵌入生成到复杂的向量搜索应用的实际实现,包括问答、文档检索和机器学习任务。

有关函数调用和工具集成的信息,请参阅函数调用和工具集成。有关文本分类的微调方法,请参阅微调

核心嵌入架构

此 Cookbook 中的嵌入系统遵循文本预处理、嵌入生成、向量存储和基于相似度的检索的一致模式。

来源: examples/Question_answering_using_embeddings.ipynb131-142 examples/Embedding_long_inputs.ipynb44-45 examples/utils/embeddings_utils.py40-50

文本预处理和Token管理

Token计数和分块

文本预处理涉及细致的Token管理,以处理模型上下文限制并优化嵌入质量。

text-embedding-3-small模型使用cl100k_base编码支持多达8,191个token。对于更长的文本,系统实现了分块策略

模型上下文长度编码
text-embedding-3-small8,191 tokenscl100k_base
text-embedding-3-large8,191 tokenscl100k_base

来源: examples/How_to_count_tokens_with_tiktoken.ipynb38-53 examples/Embedding_long_inputs.ipynb102-106 examples/Embedding_long_inputs.ipynb181-186

对于像维基百科文章这样的大型文档,系统实现了分层分段

来源: examples/Embedding_Wikipedia_articles_for_search.ipynb154-173 examples/Embedding_Wikipedia_articles_for_search.ipynb176-201

嵌入生成与存储

核心嵌入管道

嵌入生成遵循所有应用程序中的标准化模式

来源: examples/Using_embeddings.ipynb30-35 examples/Get_embeddings_from_dataset.ipynb89-95 examples/Question_answering_using_embeddings.ipynb615-619

批量处理和速率限制

对于大型数据集,系统实现了带速率限制的批量处理

来源: examples/Embedding_long_inputs.ipynb43-45 examples/Get_embeddings_from_dataset.ipynb89-95

向量搜索和相似度

相似度计算

核心搜索功能依赖于嵌入向量之间的余弦相似度

来源: examples/Question_answering_using_embeddings.ipynb608-627 examples/utils/embeddings_utils.py40-50 examples/Semantic_text_search_using_embeddings.ipynb55-79

使用HyDE进行搜索重排

为了提高搜索质量,系统实现了假设文档嵌入(HyDE)

来源: examples/Question_answering_using_a_search_API.ipynb317-330 examples/Question_answering_using_a_search_API.ipynb366-379

分类和机器学习应用

零样本分类

该系统通过比较文本嵌入与类别描述嵌入,实现了无需训练数据的分类

来源: examples/Zero-shot_classification_with_embeddings.ipynb54-76 examples/Multiclass_classification_for_transactions.ipynb119-151

传统机器学习分类

对于监督学习,嵌入作为传统分类器的特征向量

来源: examples/Classification_using_embeddings.ipynb16-43 examples/Multiclass_classification_for_transactions.ipynb465-480

聚类分析

K-均值聚类揭示了嵌入空间中隐藏的分组

来源: examples/Clustering.ipynb90-99 examples/Visualizing_embeddings_in_2D.ipynb40-55

推荐系统

基于内容的推荐

推荐系统利用嵌入相似度来查找相关项目

来源: examples/User_and_product_embeddings.ipynb24-84 examples/Recommendation_using_embeddings.ipynb39-75

向量数据库集成

支持的向量数据库

此 Cookbook 展示了与多个向量数据库提供商的集成

来源: 在提示上下文中提供的高级架构图中引用

存储模式

对于不同规模的数据,系统支持各种存储方法

缩放存储方法实现
小型(< 1K 文档)CSV + pandaspd.read_csv() 结合 ast.literal_eval()
中型(1K-100K)向量数据库Pinecone, Qdrant, Chroma
大型(100K+)分布式向量数据库Elasticsearch, Redis Cluster

来源: examples/Question_answering_using_embeddings.ipynb437-449 examples/Get_embeddings_from_dataset.ipynb89-95

问答系统

搜索-提问架构

问答系统采用两阶段方法

该系统处理了大约2,052个维基百科文章文本片段,其成本主要由GPT生成而非嵌入计算决定。

来源: examples/Question_answering_using_embeddings.ipynb82-106 examples/Question_answering_using_embeddings.ipynb419-424

性能与优化

成本分析

嵌入成本远低于生成成本

模型嵌入成本生成成本(1K token)
gpt-4o每1K token约$0.00001每次查询约$0.0025
gpt-4o-mini每1K token约$0.00001每次查询约$0.00015
text-embedding-3-small每1K token约$0.00002不适用

来源: examples/Question_answering_using_embeddings.ipynb98-105

优化策略

来源: examples/Embedding_long_inputs.ipynb89-105 examples/Embedding_long_inputs.ipynb204-216