一架梯子,一头程序猿,仰望星空!
文本嵌入模型 > 内容正文

M3E 文本嵌入模型


模型介绍

M3E 是 Moka Massive Mixed Embedding 的缩写,M3E模型是文本嵌入模型(Embedding),可以将自然语言转换成稠密的向量,主要用于计算文本向量。

  • Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zh
  • Massive,此模型通过千万级 (2200w+) 的中文句对数据集进行训练
  • Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索

模型对比

M3E提供了两个不同参数量的模型m3e-small 和 m3e-base,M3E和其他模型对比如下表格:

参数数量 维度 中文 英文 s2s s2p s2c 开源 兼容性 s2s Acc s2p ndcg
m3e-small 24M 512 0.5834 0.7262
m3e-base 110M 768 0.6157 0.8004
text2vec 110M 768 0.5755 0.6346
openai-ada-002 未知 1536 0.5956 0.7786

说明:

  • s2s, 即 sentence to sentence ,代表了同质文本之间的嵌入能力,适用任务:文本相似度,重复问题检测,文本分类等
  • s2p, 即 sentence to passage ,代表了异质文本之间的嵌入能力,适用任务:文本检索,GPT 记忆模块等
  • s2c, 即 sentence to code ,代表了自然语言和程序语言之间的嵌入能力,适用任务:代码检索
  • 兼容性,代表了模型在开源社区中各种项目被支持的程度,由于 m3e 和 text2vec 都可以直接通过 sentence-transformers 直接使用,所以和 openai 在社区的支持度上相当

Tips:

  • 使用场景主要是中文,少量英文的情况,不想花钱,不想泄露私有数据,建议使用 m3e 系列的模型
  • 多语言使用场景,并且不介意数据隐私的话,建议使用 openai text-embedding-ada-002
  • 代码检索场景,推荐使用 openai text-embedding-ada-002
  • 文本检索场景,请使用具备文本检索能力的模型,只在 S2S 上训练的文本嵌入模型,没有办法完成文本检索任务

模型使用

需要先安装 sentence-transformers

pip install -U sentence-transformers

安装完成后,可以使用以下代码来使用 M3E Models

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('moka-ai/m3e-base')
# 准备一些测试文本,用于生成文本向量
sentences = [
    '* Moka 此文本嵌入模型由 MokaAI 训练并开源,训练脚本使用 uniem',
    '* Massive 此文本嵌入模型通过**千万级**的中文句对数据集进行训练',
    '* 欢迎访问 www.tizi365.com'
]
# 调用模型生成文本向量
embeddings = model.encode(sentences)
# 打印向量计算结果
for sentence, embedding in zip(sentences, embeddings):
    print("文本内容:", sentence)
    print("文本向量:", embedding)
    print("")

提示:注意首次运行代码会自动从huggingface下载模型参数,m3e-small 大概100M,m3e-base大概7,800M。参数越大模型越大,模型默认缓存目录~/.cache/huggingface/,可以通过TRANSFORMERS_CACHE 环境变量修改缓存目录。

M3E 系列的所有模型在设计的时候就考虑到完全兼容sentence-transformers,所以你可以通过替换名称字符串的方式在所有支持 sentence-transformers 的项目中无缝使用 M3E Models。


关联主题