大家好,我是HxShine
今天分享一篇Microsoft公司的一篇文章,Title: Improving Text Embeddings with Large Language Models:使用大型语言模型改善文本嵌入。
这篇文章探索了直接利用LLM来做embedding模型,其只需要利用合成数据和少于1000次的训练步骤就能获得高质量文本表征。
该方法分为两步:1)利用LLM生成文本embedding任务合成数据集:利用专有的大型语言模型(LLM)生成近100种语言的数十万个文本嵌入任务的多样化合成数据。2)对比损失微调:使用标准对比损失对开源的decoder-only LLM进行微调。
该方法特点总结如下:1)充分挖掘了大模型生成数据多样性还不错的特点,利用这个特点,可以利用LLM生成多样性比较好、类型丰富、以及多语言的文本表征模型数据集。2)相对于之前例如SimCSE等模型,需要在大量语料上继续做预训练以及微调,本文发现自回归的LLM只需少量监督数据就能获得一个非常不错的效果。3)多语言的检索能力也不错。
一、概述
Title:Improving Text Embeddings with Large Language Models论文地址:
1Motivation
省流版总结:
2.1 利用LLM生成训练样本
通常训练embedding模型强烈依赖正负样本数据,标注成本比较高。这里本文尝试利用专有LLM(如GPT-4)生成近100种语言的多样化合成数据,用于训练embedding模型。
背景:使用LLM合成数据,增强文本嵌入模型的多样性和鲁棒性。方法:设计了多种任务类型和语言的模板,通过LLM生成合成数据。特点: 能够覆盖广泛的任务和语言类型,提高数据的多样性和质量。
1)利用LLM列举检索任务:
2)针对每个任务,利用LLM按照要求生成训练样本:
2.2 模型训练
要点一:需要指定任务task_definition,输入用户问题。其中合成的数据用2.1中第一步LLM生成的任务定义,其他数据集人工设置固定的模版。
要点二:相似度计算方式为cos相似度,并结合温度系数超参数来调节具体值。
要点三:Loss函数为标准的InfoNCE函数,其惩罚了负样本,提升正样本的相似度分数。
3 Conclusion
结论1: 使用LLM生成的合成数据可以显著提升文本嵌入的性能。
结论2: 方法在多语言环境下表现良好,特别是在BEIR和MTEB基准上。
结论3: 本方法提供了一种更高效的文本嵌入训练策略,避免了复杂的多阶段训练。
4Limitation
二、详细内容
2.1 合成数据的统计分析
结论1: 生成了500k个样例,涵盖了150k个独特指令。包括非对称任务(query和doc不对称):short-long代表query是短文本,doc为长文本,其他可以反推。另一类任务是对称任务(query和doc语义相近,但是不对等):sts代表单语言语义相似度计算、bitext代表双语言检索任务。
结论2: 生成数据中覆盖93种语言。语言多样性不错,英语占大多数,其他语言占比也不少。
2.2 模型微调与评估
试验设置:基座模型为Mistral-7b,微调方法为Lora,rank=16。
结论1: "E5mistral-7b + full>结论4: 该方法的实验结果显示了生成语言建模和文本嵌入之间的潜在联系。
2.3 与商业闭源模型对比
结论:在BEIR Retrieval数据集和MTEB数据集都取得了SoTa。
2.4 LLM只需要少量数据做微调即可取得比较好的效果
结论一:传统数据利用大量数据结合对比学习做无监督训练可以带来不错的提升。
结论二:经过大量语料训练的自回归LLM模型已经不需要继续做预训练了,只需要少量的数据微调即可取得比较好的效果。
2.5 多语言任务上也非常有竞争力
结论一:高资源(数据量多)任务例如英语,效果比之前的mE5模型效果好,低资源任务效果相对mE5也非常有竞争力。
2.6 消融实验:instruction设置比较关键
结论一:基座模型选择也比较重要,选择LLaMA-2的基座模型比Mistral-7b作为基座模型差。
结论二:instruction的设置也非常重要,对最终结果的影响可能差4个点以上。
2.7 context长度对检索质量的影响:4k左右上下文文本表征都还不错,随后效果急剧下降。
结论:引入了一项名为个性化密码检索的新型合成任务,此任务需要在长上下文中将密钥信息编码到嵌入中。通过更改图5中的滑动窗口大小和RoPE旋转底座来比较不同变体的性能。结果显示,带有4k滑动窗口的默认配置在4k token数达到100%的准确性,但随着上下文长度的增长,准确性会迅速下降。
三、总结
结论1:利用LLM生成的合成数据可以显著提升文本嵌入的性能。 这种方法在处理多种语言时尤其有效,能够生成高质量、多样化的合成数据。
结论2:利用LLM训练Embedding模型可以非常高效。 与现有多阶段方法相比,其只需要少于1000次的训练步骤就可以拿到比较好的效果,而现有方法可能要先利用大量数据做自监督训练,然后再使用有监督数据训练,效率不高。
结论3:本文利用LLM做embedding是一个突破,但产业界还不太适用。 本文首次探索LLM做embedding,效果还不错,但模型大,推理成本也高,产业界实用性不高(bge相关模型只有M左右,本文方法模型达到7B以上),后续可以探索LLM生成和挖掘正负样本数据,利用传统方法例如双塔+SimCSE系列等模型进行训练,然后再应用到产业界。
本文转载自 NLP PaperWeekly ,作者:NLP PaperWeekly