一文通透Text Embedding模型:从text2vec、openai-ada-002到m3e、bge-CSDN博客

コンテンツ

前言

本文已经是今年的第31篇大模型相关的技术文章了,如果说

  • 半年前にブログを書いていた時は、主に個人の興味と読者のニーズからでした
  • しかし、23年のQ3にLLMプロジェクトチームが設立されて以降、ブログを書くことは個人の興味と読者のニーズに加えてプロジェクトの必要性も含まれるようになりました このように、三者を兼ね備えることができることは、ブログを書く上での幸運であると実感しています

私たちと私たちの会社は、ブログ、コース、内部トレーニング、プロジェクトを通じて、先進的な大規模モデル技術をさらに良く、より速く、さまざまな業界のビジネスシーンに実装し、何百万もの企業の実際のビジネスに力を与える方法について共に議論することを非常にうれしく思っています

而本文一开始是属于:因我司第三项目组「知识库问答项目」而起的此文《知识库问答LangChain+LLM的二次开发:商用时的典型问题及其改进方案》中的1.2节(该1.2节初稿来自我司LLM项目团队第三项目组的bingo),但为把Text Embedding模型阐述的更为精准、全面,特把那部分的内容抽取出来,不断完善成此文

最終的には、可能な限り、既存のオンライン資料と比較してより詳細になります

第一部分 衡量文本向量表示效果的榜单:MTEB、C-MTEB

1.2 《MTEB: Massive Text Embedding Benchmark(海量文本嵌入基准)》

判断哪些文本嵌入模型效果较好,通常需要一个评估指标来进行比较,《MTEB: Massive Text Embedding Benchmark(海量文本嵌入基准)》就是一个海量文本嵌入模型的评估基准

  • 论文地址:https://arxiv.org/abs/2210.07316
    MTEB包含8个语义向量任务,涵盖58个数据集和112种语言。通过在MTEB上对33个模型进行基准测试,建立了迄今为止最全面的文本嵌入基准。我们发现没有特定的文本嵌入方法在所有任务中都占主导地位。这表明该领域尚未集中在一个通用的文本嵌入方法上,并将其扩展到足以在所有嵌入任务上提供最先进的结果
  • github地址:https://github.com/embeddings-benchmark/mteb#leaderboard

1.2 中文海量文本embedding任务排行榜:C-MTEB

Chinese Massive Text Embedding Benchmark中可以看到目前最新的针对中文海量文本embedding的各项任务的排行榜,针对不同的任务场景均有单独的排行榜。

任务榜单包括:

  • 検索
  • STS
  • ペア分類
  • 分類
  • 再ランキング
  • クラスタリング

其中,在本地知识库任务中,主要是根据问题query的embedding表示到向量数据库中检索相似的本地知识文本片段。因此,该场景主要是Retrieval检索任务。检索任务榜单如下:

目前检索任务榜单下效果最好的是bge系列的bge-large-zh模型,langchain-chatchat项目中默认的m3e-base也处于比较靠前的位置

第二部分 text-embedding-ada-002

2.1 模型简介

text-embedding-ada-002はOpenAIが提供する埋め込みモデルであり、ただし、使用するにはAPIを呼び出す必要があります。以下の特徴を持っています:

  • 统一能力:OpenAI通过将五个独立的模型(文本相似性、文本搜索-查询、文本搜索-文档、代码搜索-文本和代码搜索-代码)合并为一个新的模型 在一系列不同的文本搜索、句子相似性和代码搜索基准中,这个单一的表述比以前的嵌入模型表现得更好
  • 上下文:上下文长度为8192,使得它在处理长文档时更加方便
  • 嵌入尺寸:只有1536个维度,是davinci-001嵌入尺寸的八分之一,使新的嵌入在处理矢量数据库时更具成本效益

2.2 模型使用

以下是OpenAI官方文档中给出的用于文本搜索的代码实例

1. from openai.embeddings_utils import get_embedding, cosine_similarity
2. def search_reviews(df, product_description, n=3, pprint=True):
3. embedding = get_embedding(product_description, model='text-embedding-ada-002')
4. df['similarities'] = df.ada_embedding.apply(lambda x: cosine_similarity(x, embedding))
5. res = df.sort_values('similarities', ascending=False).head(n)
6. return res
7. res = search_reviews(df, 'delicious beans', n=3)'

第三部分 m3e模型

3.1 m3e模型简介

M3E(Moka Massive Mixed Embedding,m3e-base模型下载地址:https://huggingface.co/moka-ai/m3e-base,m3e GitHub地址:GitHub - wangyingdong/m3e-base),其

要約する
本文介绍了MTEB和C-MTEB两个海量文本嵌入基准榜单,以及OpenAI的text-embedding-ada-002模型和m3e模型。MTEB包含8个语义向量任务,涵盖58个数据集和112种语言,而C-MTEB则是针对中文海量文本embedding的排行榜。text-embedding-ada-002是OpenAI提供的一个embedding模型,具有统一能力、上下文长度为8192和嵌入尺寸为1536个维度的特点。m3e模型使用了in-batch负采样的对比学习的方式在句对数据集进行训练,并使用了指令数据集,基于Roberta系列模型进行训练。