M3E - Embedding 模型

devtools/2024/9/25 10:27:36/
aidu_pl">

文章目录

    • 一、关于 M3E
      • 1、什么是 M3E
      • 2、关于 MokaAI 公司
      • 3、训练方案➿
      • 4、特性🌟
      • 5、模型对比⚖️
    • 二、 使用 M3E 🔧
    • 三、微调模型🎨


一、关于 M3E

1、什么是 M3E

M3E 是由 MokaAI 公司发布的 Embedding 模型

  • github : https://github.com/wangyingdong/m3e-base

M3E : Moka Massive Mixed Embedding 的缩写

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

更新说明:(截止 2024-05-01)M3E 最后一次更新于 2023.06.24,添加微调 M3E 的教程 notebook


2、关于 MokaAI 公司

  • 官网:https://www.moka.ai
  • 微信公众号: Moka HR SaaS

2015年创办,2018 年成立了 AI 团队。

Moka 两位创始人:CEO赵欧伦(出生于1991年),UC伯克利本科毕业。

CTO李国兴比赵欧伦大一岁,斯坦福硕士毕业。大三时在 Facebook实习。

参考:AI招聘公司Moka再融1.8亿,90后学霸创始团队靠变革HR年入3000万


3、训练方案➿

M3E 使用 in-batch 负采样对比学习的方式在句对数据集进行训练,为了保证 in-batch 负采样的效果,我们使用 A100 80G 来最大化 batch-size,并在共计 2200W+ 的句对数据集上训练了 1 epoch。训练脚本使用 uniem,您可以在这里查看具体细节。


4、特性🌟

  • 中文训练集,M3E 在大规模句对数据集上的训练,包含中文百科,金融,医疗,法律,新闻,学术等多个领域共计 2200W 句对样本,数据集详见 M3E 数据集 。数据处理方法:https://github.com/wangyuxinwhy/uniem/blob/main/scripts/process_zh_datasets.py
  • 英文训练集,M3E 使用 MEDI 145W 英文三元组数据集进行训练,数据集详见 MEDI 数据集,此数据集由 instructor team 提供
  • 指令数据集,M3E 使用了 300W + 的指令微调数据集,这使得 M3E 对文本编码的时候可以遵从指令,这部分的工作主要被启发于 instructor-embedding
  • 基础模型,M3E 使用 hfl 实验室的 Roberta 系列模型进行训练,目前提供 small 和 base 两个版本,大家则需选用
  • ALL IN ONE,M3E 旨在提供一个 ALL IN ONE 的文本嵌入模型,不仅支持同质句子相似度判断,还支持异质文本检索,你只需要一个模型就可以覆盖全部的应用场景,未来还会支持代码检索

5、模型对比⚖️

参数数量维度中文英文s2ss2ps2c开源兼容性s2s Accs2p ndcg@10
m3e-small24M5120.58340.7262
m3e-base110M7680.61570.8004
text2vec110M7680.57550.6346
openai-ada-002未知15360.59560.7786

说明:

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

Tips:

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

二、 使用 M3E 🔧

您需要先安装 sentence-transformers

pip install -U sentence-transformers

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

from sentence_transformers import SentenceTransformermodel = SentenceTransformer('moka-ai/m3e-base')#Our sentences we like to encode
sentences = ['* Moka 此文本嵌入模型由 MokaAI 训练并开源,训练脚本使用 uniem','* Massive 此文本嵌入模型通过**千万级**的中文句对数据集进行训练','* Mixed 此文本嵌入模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索,ALL in one'
]#Sentences are encoded by calling model.encode()
embeddings = model.encode(sentences)#Print the embeddings
for sentence, embedding in zip(sentences, embeddings):print("Sentence:", sentence)print("Embedding:", embedding)print("")

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


三、微调模型🎨

uniem 提供了非常易用的 finetune 接口,几行代码,即刻适配!

from datasets import load_datasetfrom uniem.finetuner import FineTunerdataset = load_dataset('shibing624/nli_zh', 'STS-B')# 指定训练的模型为 m3e-small
finetuner = FineTuner.from_pretrained('moka-ai/m3e-small', dataset=dataset)
finetuner.run(epochs=1)

详见 uniem 微调教程:https://github.com/wangyuxinwhy/uniem/blob/main/examples/finetune.ipynb

Colab : https://colab.research.google.com/github/wangyuxinwhy/uniem/blob/main/examples/finetune.ipynb


伊织 2024-05-01(三)


http://www.ppmy.cn/devtools/29426.html

相关文章

【如何使用SSH密钥验证提升服务器安全性及操作效率】(优雅的连接到自己的linux服务器)

文章目录 一、理论基础(不喜欢这部分的可直接看具体操作)1.为什么要看本文(为了zhuangbility)2.为什么要用密钥验证(更安全不易被攻破)3.密码验证与密钥验证的区别 二、具体操作1.生成密钥对1.1抉择&#x…

ArkTS开发原生鸿蒙HarmonyOS短视频应用

HarmonyOS实战课程“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”已经于今日上线至慕课网(https://coding.imooc.com/class/843.html),有致力于鸿蒙生态开发的同学们可以关注一下。 课程简介 本课程以原生鸿蒙Ha…

Vue入门到关门之第三方框架elementui

1、什么是ElementUI? Element UI 是一个基于 Vue.js 的组件库,它提供了丰富的 UI 组件和一套完整的解决方案,用于快速构建现代化的 Web 应用程序。Element UI 的目标是帮助开发者快速构建出美观、易用的界面,并提供了丰富的组件&…

提升编码技能:学习如何使用 C# 和 Fizzler 获取特价机票

引言 五一假期作为中国的传统节日,也是旅游热门的时段之一,特价机票往往成为人们关注的焦点。在这个数字化时代,利用爬虫技术获取特价机票信息已成为一种常见的策略。通过结合C#和Fizzler库,我们可以更加高效地实现这一目标&…

CSS的box-shadow 用法

CSS的box-shadow属性是一个强大的工具,用于向框(盒子)元素添加阴影效果。它可以添加一个或多个阴影,并可以定制阴影的大小、模糊程度、颜色等。 基本语法 box-shadow的基本语法如下: box-shadow: [horizontal offse…

揭秘靠信息差搞钱的三个步骤!

互联网时代,所有搞钱的底层逻辑,就是信息差。谁能把信息差玩透,链接好供应链与需求链,谁就可以赚钱。 旅游卡批发这么赚钱,为什么很多人不愿意做?因为懒人太多,总想坐等收益。昨天我在常被割韭…

OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库的发展历程

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库的发展历程前言OceanBase 数据更新架构OceanBase 数据库的发展历程OceanBase 分布式数据库【信创/国产化】- OceanBase 数据库的发展历程 编辑 | 简简单单 Online zuozuo 地址 | https:…

JavaScript百炼成仙自学笔记——5

说一下你对JavaScript数组的理解 数组有四种定义方式: 方式一 var arr ["first","second","third"]; console.log(arr); ↑这种方法的好处是在定义数组的时候就可以直接对这个数组进行初始化。 方式二 var a new Array(); ↑…