闻达 | M3E,开源中文 Embedding 模型新 SOTA

更新说明

  • 2023.06.08,添加检索任务的评测结果,在 T2Ranking 1W 中文数据集上,m3e-base 在 ndcg@10 上达到了 0.8004,超过了 openai-ada-002 的 0.7786
  • 2023.06.07,添加文本分类任务的评测结果,在 6 种文本分类数据集上,m3e-base 在 accuracy 上达到了 0.6157,超过了 openai-ada-002 的 0.5956

项目地址:

  • m3e-small

https://huggingface.co/moka-ai/m3e-small

  • m3e-base

 https://huggingface.co/moka-ai/m3e-base

M3E 是 Moka Massive Mixed Embedding 的缩写

  • Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zh

  • Massive,此模型通过千万级 (2200w+) 的中文句对数据集进行训练

  • Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索

  • Embedding,此模型是文本嵌入模型,可以将自然语言转换成稠密的向量

相关 GitHub 仓库:wangyuxinwhy/uniem

更新说明

  • 2023.06.08,添加检索任务的评测结果,在 T2Ranking 1W 中文数据集上,m3e-base 在 ndcg@10 上达到了 0.8004,超过了 openai-ada-002 的 0.7786

  • 2023.06.07,添加文本分类任务的评测结果,在 6 种文本分类数据集上,m3e-base 在 accuracy 上达到了 0.6157,超过了 openai-ada-002 的 0.5956

模型对比

参数数量维度中文英文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-ada-002

  • 代码检索场景,推荐使用 ada-002

使用方式

您需要先安装 sentence-transformers

pip install -U sentence-transformers

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

from sentence_transformers import SentenceTransformer

model = 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 。

  • chroma:https://docs.trychroma.com/getting-started

  • guidance:https://github.com/microsoft/guidance

  • semantic-kernel:https://github.com/microsoft/semantic-kernel

训练方案

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

特性

  • 中文训练集,M3E 在大规模句对数据集上的训练,包含中文百科,金融,医疗,法律,新闻,学术等多个领域共计 2200W 句对样本,数据集详见 M3E 数据集

  • 英文训练集,M3E 使用 MEDI 145W 英文三元组数据集进行训练,数据集详见 MEDI 数据集,此数据集由 instructor team 提供

  • 指令数据集,M3E 使用了 300W + 的指令微调数据集,这使得 M3E 对文本编码的时候可以遵从指令,这部分的工作主要被启发于 instructor-embedding

  • 基础模型,M3E 使用 hfl 实验室的 Roberta 系列模型进行训练,目前提供  small 和  base 两个版本,大家则需选用

  • ALL IN ONE,M3E 旨在提供一个 ALL IN ONE 的文本嵌入模型,不仅支持同质句子相似度判断,还支持异质文本检索,你只需要一个模型就可以覆盖全部的应用场景,未来还会支持代码检索

上述部分数据集和模型地址:

  • MEDI 数据集https://drive.google.com/file/d/1vZ5c2oJNonGOvXzppNg5mHz24O6jcc52/view

  • instructor-embeddinghttps://github.com/HKUNLP/instructor-embedding

  • Roberta 模型https://huggingface.co/hfl/chinese-roberta-wwm-ext

评测

  • 评测模型,text2vec, m3e-base, m3e-small, openai-ada-002

  • 评测脚本,具体参考 MTEB-zh 
    https://github.com/wangyuxinwhy/uniem/blob/main/mteb-zh

文本分类

  • 数据集选择,选择开源在 HuggingFace 上的 6 种文本分类数据集,包括新闻、电商评论、股票评论、长文本等

  • 评测方式,使用 MTEB 的方式进行评测,报告 Accuracy。

text2vecm3e-smallm3e-baseopenai
TNews0.430.44430.48270.4594
JDIphone0.82140.82930.85330.746
GubaEastmony0.74720.7120.76210.7574
TYQSentiment0.60990.65960.71880.68
StockComSentiment0.43070.42910.43630.4819
IFlyTek0.4140.42630.44090.4486
Average0.57550.58340.61570.5956

检索排序

T2Ranking 1W

  • 数据集选择,使用 T2Ranking 数据集,由于 T2Ranking 的数据集太大,openai 评测起来的时间成本和 api 费用有些高,所以我们只选择了 T2Ranking 中的前 10000 篇文章https://github.com/THUIR/T2Ranking

  • 评测方式,使用 MTEB 的方式进行评测,报告 map@1, map@10, mrr@1, mrr@10, ndcg@1, ndcg@10

text2vecopenai-ada-002m3e-smallm3e-base
map@10.46840.61330.55740.626
map@100.58770.74230.68780.7656
mrr@10.53450.69310.63240.7047
mrr@100.62170.76680.7120.7841
ndcg@10.52070.67640.61590.6881
ndcg@100.63460.77860.72620.8004

T2Ranking

  • 数据集选择,使用 T2Ranking,刨除 openai-ada-002 模型后,我们对剩余的三个模型,进行 T2Ranking 10W 和 T2Ranking 50W 的评测。(T2Ranking 评测太耗内存了... 128G 都不行)

  • 评测方式,使用 MTEB 的方式进行评测,报告 ndcg@10

text2vecm3e-smallm3e-base
t2r-1w0.63460.726210.8004
t2r-10w0.446440.52510.6263
t2r-50w0.334820.386260.47364

说明:

  • 检索排序对于 text2vec 并不公平,因为 text2vec 在训练的时候没有使用过检索相关的数据集,所以没有办法很好的完成检索任务也是正常的。

M3E数据集

如果您想要使用这些数据集,你可以在 uniem process_zh_datasets 中找到加载 huggingface 数据集的脚本,非 huggingface 数据集需要您根据下方提供的链接自行下载和处理。

数据集加载脚本所在仓库:wangyuxinwhy/uniem

表格内容下载地址:https://hf.co/datasets/HuggingFace-CN-community/posts/resolve/main/m3e-dataset-sheet.pdf

计划表

  • ✔️ 完成 MTEB 中文评测 BenchMark, MTEB-zh

  • 完成 Large 模型的训练和开源

  • 完成支持代码检索的模型

  • 对 M3E 数据集进行清洗,保留高质量的部分,组成 m3e-hq,并在 huggingface 上开源

  • 在 m3e-hq 的数据集上补充 hard negative 的样本及相似度分数,组成 m3e-hq-with-score,并在 huggingface 上开源

  • 在 m3e-hq-with-score 上通过 cosent loss loss 进行训练并开源模型,CoSent 原理参考这篇博客https://kexue.fm/archives/8847

  • 开源商用版本的 M3E models

License

M3E models 使用的数据集中包括大量非商用的数据集,所以 M3E models 也是非商用的,仅供研究使用。不过我们已经在 M3E 数据集上标识了商用和非商用的数据集,您可以根据自己的需求自行训练。

Citation

请使用以下格式引用此模型:

  @software {
    Moka Massive Mixed Embedding,  
    author = {Wang Yuxin,Sun Qingxuan,He sicheng},  
    title = {M3E: Moka Massive Mixed Embedding Model},  
    year = {2023}
  }

 

  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你好!很高兴回答你的问题。要在Linux服务器上安装闻达,你需要按照以下步骤进行操作: 1. 首先,确保你的Linux服务器已经安装了合适的操作系统,比如Ubuntu、CentOS等。你可以通过运行命令`lsb_release -a`或`cat /etc/os-release`来检查当前系统的版本信息。 2. 下载闻达的安装包。你可以从闻达官方网站或其他可信的来源获取到安装包的下载链接。 3. 使用命令行工具,比如使用SSH登录到你的Linux服务器。 4. 在命令行中,使用wget或curl命令下载闻达安装包。例如,使用wget命令下载安装包: ``` wget <闻达安装包的下载链接> ``` 5. 解压安装包。根据你所下载的安装包类型,使用相应的解压命令进行解压。例如,如果是tar.gz格式的安装包,可以使用以下命令解压: ``` tar -zxvf <闻达安装包文件名> ``` 6. 进入解压后的目录。使用cd命令切换到安装包解压后的目录。 7. 执行安装脚本。运行安装脚本来完成闻达的安装过程。通常,脚本名称为install.sh或类似的名称。你可以使用以下命令执行安装脚本: ``` ./install.sh ``` 8. 根据安装向导的提示,进行必要的配置和设置。根据需要,你可能需要提供一些配置信息,比如数据库连接信息、管理员账户等等。 9. 等待安装完成。安装过程可能需要一些时间,请耐心等待直到安装完成。 10. 完成安装后,你可以通过访问闻达的网页界面来进一步配置和使用闻达。 请注意,以上步骤仅供参考,具体的安装步骤可能会因为闻达版本和Linux发行版的不同而有所差异。建议在安装之前查阅闻达的官方文档或用户手册,以获取更准确的安装步骤和配置说明。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值