推理: false
数据集:
- bclavie/mmarco-japanese-hard-negatives
- unicamp-dl/mmarco
语言:
- ja
任务标签: 句子相似度
标签:
- ColBERT
基础模型:
- cl-tohoku/bert-base-japanese-v3
许可证: mit
库名称: RAGatouille
本文档的日语版本仍在准备中,敬请谅解。
简介
详细报告请参阅arXiv报告
若您仅想了解如何使用该模型,请直接跳转至下方的使用指南部分!
欢迎使用JaColBERT第一版,这是基于ColBERT的首个日语专用文档检索模型。
尽管评估数据集对本模型属于域外数据(而对多语言模型属于域内数据),JaColBERT仍超越了先前常用的日语文档检索模型,并接近多语言模型的性能。这展现了ColBERT类模型强大的泛化能力——即使应用于日语场景!
JaColBERT仅是初始版本:仅基于单一数据集的1000万组三元组训练而成。作为首个版本,我们期望展示该方法的巨大潜力。
本模型卡信息较为精简,旨在提供概览。此前有用户建议制作可引用版本,更多详情请参阅技术报告。
为何为RAG应用选择ColBERT类方法?
多数检索方法存在显著权衡:
- 传统稀疏方法(如BM25)虽是强基线,__但__缺乏语义理解能力,性能存在硬性天花板。
- __交叉编码器__检索方法效果强大,__但__在大规模数据集上计算成本极高:需对每个文档处理查询才能输出分数。
- __稠密检索__方法通过向量数据库使用稠密嵌入,虽轻量且表现良好,__但__数据效率低下(通常需数亿甚至数十亿训练样本才能达到SOTA性能),且多数情况下泛化能力较差。这很合理:将文档所有信息压缩至单一向量以匹配任意潜在查询,本就是极困难的命题。
ColBERT及其变体(包括JaColBERT)旨在融合各方优势:通过将文档表示为__嵌入向量集合__,我们以远低于交叉编码器的计算成本,获得了卓越性能和强大的域外泛化能力。
这种强大的域外性能可见于我们的结果:尽管未在Mr.TyDi和MIRACL上训练,JaColBERT几乎追平了在这些数据集上训练的e5稠密检索器。
在JSQuAD上(对e5属于部分域外/仅接触过英文版,对JaColBERT则完全域外),本模型超越了所有e5模型。
此外,该方法__所需数据量远少于稠密嵌入__:为达到当前性能,JaColBERT v1仅训练了1000万组三元组,而多语言e5模型需数十亿样本。
训练
训练数据
模型基于MMARCO日语分片(含困难负样本)训练。包含困难负样本的数据集可在HuggingFace获取。
当前阶段我们未在其他数据集上训练或进行数据增强。期待未来工作或支持相关实践者(欢迎联系)。
训练方法
JaColBERT在8块NVIDIA L4 GPU上训练单周期(每个三元组单次遍历),总耗时约10小时。
模型初始化自东北大学优秀的bert-base-japanese-v3,并显著受益于名古屋大学构建强日语SimCSE模型等研究成果。
我们尝试了多种训练配置,包括不同批量大小(每GPU 8/16/32)和学习率(3e-6, 5e-6, 1e-5, 2e-5)。最佳结果来自5e-6(3e-6结果非常接近)。更高学习率在早期评估中始终表现较差而被弃用。所有配置均采用10%总步数的预热。
应用了批内负样本损失,未使用任何蒸馏方法(基于现有模型分数)。
结果
下表对比了JaColBERT与先前日语专用模型及当前多语言SOTA(multilingual-e5)的结果概览。
需注意:JaColBERT在所有三个数据集上均为域外评估,而JSQuAD对e5属于部分域外(仅接触英文版),MIRACL和Mr.TyDi对e5则完全域内——这可能助推其强劲表现。实际应用中,我们相信通过适度快速(>2小时)微调可缩小差距。
(具体评估方法+代码参见技术报告。*表示最佳单语/域外结果。粗体为全局最佳。_斜体_表示该任务对模型属于域内。)
|
JSQuAD |
|
|
|
MIRACL |
|
|
|
MrTyDi |
|
|
|
Average |
|
|
|
R@1 |
R@5 |
R@10 |
|
R@3 |
R@5 |
R@10 |
|
R@3 |
R@5 |
R@10 |
|
R@{1|3} |
R@5 |
R@10 |
JaColBERT |
0.906* |
0.968* |
0.978* |
|
0.464* |
0.546* |
0.645* |
|
0.744* |
0.781* |
0.821* |
|
0.705* |
0.765* |
0.813* |
m-e5-large (域内) |
0.865 |
0.966 |
0.977 |
|
0.522 |
0.600 |
0.697 |
|
0.813 |
0.856 |
0.893 |
|
0.730 |
0.807 |
0.856 |
m-e5-base (域内) |
0.838 |
0.955 |
0.973 |
|
0.482 |
0.553 |
0.632 |
|
0.777 |
0.815 |
0.857 |
|
0.699 |
0.775 |
0.820 |
m-e5-small (域内) |
0.840 |
0.954 |
0.973 |
|
0.464 |
0.540 |
0.640 |
|
0.767 |
0.794 |
0.844 |
|
0.690 |
0.763 |
0.819 |
GLuCoSE |
0.645 |
0.846 |
0.897 |
|
0.369 |
0.432 |
0.515 |
|
0.617 |
0.670 |
0.735 |
|
0.544 |
0.649 |
0.716 |
sentence-bert-base-ja-v2 |
0.654 |
0.863 |
0.914 |
|
0.172 |
0.224 |
0.338 |
|
0.488 |
0.549 |
0.611 |
|
0.435 |
0.545 |
0.621 |
sup-simcse-ja-base |
0.632 |
0.849 |
0.897 |
|
0.133 |
0.177 |
0.264 |
|
0.454 |
0.514 |
0.580 |
|
0.406 |
0.513 |
0.580 |
sup-simcse-ja-large |
0.603 |
0.833 |
0.889 |
|
0.159 |
0.212 |
0.295 |
|
0.457 |
0.517 |
0.581 |
|
0.406 |
0.521 |
0.588 |
fio-base-v0.1 |
0.700 |
0.879 |
0.924 |
|
0.279 |
0.358 |
0.462 |
|
0.582 |
0.649 |
0.712 |
|
0.520 |
0.629 |
0.699 |
使用指南
安装
JaColBERT需通过ColBERT+RAGatouille运行。执行以下命令安装所有依赖:
pip install -U ragatouille
更多使用示例可查看GitHub仓库的examples
部分。
特别说明:示例01展示如何构建/查询索引,04展示如何将JaColBERT用作重排序器,06展示如何进行内存检索而非索引查询。
注意:RAGatouille支持元数据功能,如需使用请参考示例!
无索引的文档编码与查询
若不构建索引,使用非常简单:加载模型后,先encode()
文档,再search_encoded_documents()
:
from ragatouille import RAGPretrainedModel
RAG = RAGPretrainedModel.from_pretrained("bclavie/JaColBERT")
RAG.encode(['文档1', '文档2', ...])
RAG.search_encoded_documents(query="您的查询")
后续调用encode()
会追加到现有内存集合。清空集合请运行RAG.clear_encoded_docs()
。
索引构建
为使ColBERT采用的延迟交互检索生效,需先构建索引。
类比使用e5等嵌入模型将文档存入向量数据库的过程。
索引构建是最耗时的步骤,但检索极快。以下为默认配置示例:
from ragatouille import RAGPretrainedModel
RAG = RAGPretrainedModel.from_pretrained("bclavie/JaColBERT")
documents = [ "麦当劳小份薯条的热量是多少?麦当劳官网显示:小份薯条含230卡路里,番茄酱25卡路里,番茄酱包15卡路里。"]
RAG.index(name="我的首个索引", collection=documents)
索引文件默认存储在.ragatouille/colbert/indexes/{索引名}
。
完成!等待运行结束即可生成索引及其所有表示(默认压缩为2比特)。
检索
索引创建后,检索同样简单!若在同一会话中且RAG
仍加载,可直接搜索新索引。
否则需从磁盘加载:
RAG = RAGPretrainedModel.from_index(".ragatouille/colbert/indexes/我的首个索引")
随后执行查询:
RAG.search(query="宫崎骏创立了哪家动画工作室?")
> [{'content': '1984年4月,宫崎骏在杉并区成立个人工作室"Nibariki"。\n\n\n=== 吉卜力工作室 ===\n\n\n==== 早期作品(1985–1996) ====\n1985年6月,宫崎骏、高畑勋、德间康快和铃木敏夫共同创立吉卜力工作室,由德间书店投资。首部作品《天空之城》(1986年)沿用《风之谷》原班人马。场景设计灵感源自希腊建筑和"欧洲都市模板"。',
'score': 25.90448570251465,
'rank': 1,
'document_id': 'miyazaki',
'document_metadata': {'entity': '人物', 'source': '维基百科'}},
{'content': '宫崎骏(日语:宮﨑 駿,1941年1月5日-)是日本动画师、导演及漫画家。作为吉卜力联合创始人,他以精湛的叙事和动画电影创作获得国际赞誉,被公认为动画史上最具成就的电影人之一。\n出生于日本东京都,宫崎骏早年即对漫画和动画产生兴趣,1963年加入东映动画。早期担任动画师,后与导演高畑勋合作。',
'score': 25.572620391845703,
'rank': 2,
'document_id': 'miyazaki',
'document_metadata': {'entity': '人物', 'source': '维