Embedding 模型选型:OpenAI vs BGE vs 其他开源方案

在做 RAG 系统时,Embedding 模型的选型是个绕不过去的问题。选错了,后面调再多参数也是事倍功半。 什么是 Embedding Embedding 模型把文本转成高维向量,语义相近的文本在向量空间里距离更近。RAG 的检索质量,本质上取决于 Embedding 模型对语义的理解能力。 OpenAI text-embedding 系列 from openai import OpenAI client = OpenAI() response = client.embeddings.create( model="text-embedding-3-small", # 或 text-embedding-3-large input="什么是 RAG 系统?" ) vector = response.data[0].embedding # 1536 维向量 text-embedding-3-small: 维度:1536 价格:$0.02 / 1M tokens 性价比最高,大多数场景足够用 text-embedding-3-large: 维度:3072 价格:$0.13 / 1M tokens 效果更好,但贵 6 倍,仅在对检索质量要求极高时考虑 优点:接口简单,效果稳定,中英文都好。 缺点:按量计费,数据需要发到 OpenAI,有隐私顾虑。 BGE 系列(智源) BGE(BAAI General Embedding)是智源研究院开源的中文 Embedding 模型,中文效果出色: from FlagEmbedding import FlagModel model = FlagModel( "BAAI/bge-large-zh-v1.5", query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:", use_fp16=True ) # 对查询加 instruction(重要!BGE 的查询和文档编码方式不同) query_embedding = model.encode_queries(["什么是 RAG?"]) # 文档不需要 instruction doc_embeddings = model.encode(["RAG 是检索增强生成..."]) BGE-large-zh-v1.5: ...

2023-06-12 · 1 min · Kada Liao