LC1332 / Luotuo-Text-Embedding

Luotuo Embedding(骆驼嵌入) is a text embedding model, which developed by 李鲁鲁, 冷子昂, 陈启源, 蒟蒻等.
Apache License 2.0
259 stars 6 forks source link

English | 快速上手 | Embedding应用 | 数据 | 赞助 | 人员 | 引用 | 鲁叔的讨论

Luotuo Embedding 骆驼嵌入: Generative Text Embedding Model distilled from OpenAI API

骆驼嵌入是一个文本嵌入(text embedding)模型,由冷子昂, 刘思诣, 黄泓森, 陈舒年, 胡婧, 孙骜, 陈启源, 李鲁鲁等开发

每个作者都是第一作者,顺序是随机的。(点这里具体) 李鲁鲁发起了项目,并完成了初步的验证,提出了KL散度Loss和Hard Negative挖掘。 刘思诣完成了初步训练框架的编写,以及支撑了后面模型上传到hugging face管线。 冷子昂完成了完整的大模型和小模型的训练,包括载入数据和损失函数的实现。 陈启源准备了CNewSum的数据,做了句子切分。 黄泓森负责爬取了OpenAI Embedding的数据。 陈舒年完成了重要的几个可视化。 孙骜(即将)用我们的得到的Embedding,完成CoT的提升实验。 胡婧收集了周杰伦的歌词,并(即将)完成更多的定量实验。

骆驼嵌入是Luotuo(骆驼)的子项目之一, 后者由李鲁鲁, 冷子昂, 陈启源发起。

文本嵌入,是指将一段文本,转化为一定维度的向量(1536维),其中相近语义、相关主题的文本在向量空间更接近。拥有一个良好的文本嵌入特征,对于文本可视化、检索、聚类、内容审核等下游任务,有着重要的意义。

快速上手

中模型已经发布,大模型将看后面什么时候有空再发布。

Colab链接 细节
小模型 Open In Colab BERT 110M带可视化验证
中模型 Open In Colab BERT 352M带可视化验证
大模型 - GLM-Encoder模型带可视化验证
小模型Minimal Open In Colab BERT 110M最简代码
中模型Minimal Open In Colab BERT 352M最简代码
大模型Minimal - GLM-Encoder模型最简代码

Embedding应用

所有的应用例子都可以在colab链接 Open In Colab 中体验。

文本数据可视化

对于任意多类的数据,围绕我们发布的Embedding模型,我们准备了一个特殊的可视化代码,可以将类别展示在二维平面,并抽样展示部分文本的内容。你可以直接在 大模型链接 / 小模型链接 中 运行体验。

通过可视化看我们可以看到,OpenAI原论文的基本假设基本得到验证,即使是很写意的歌词,在中间切开,去除重复文本之后。前段歌词和后段歌词仍然能够呈现很强的相关性。(除了周杰伦的《外婆》,其他的)歌曲的前后段在特征空间中都很接近。

文本相关性测试

在OpenAI的论文(补充引用)中,使用了大量文本(补充数量)来进行自监督学习。其关键假设是,在切开的文本中,连续的两段长文本是相关的。在这个应用中,我们会在两个测试上验证这个假设。因为我们目前版本的模型的训练数据都是新闻,我们想找两批不同领域的语料,来验证模型的能力。

下面是周杰伦的第一张专辑中,一首Acid爵士风格的叙事歌曲《印第安老斑鸠》在切分后的前后歌词

前半句:沙漠之中怎么会有泥鳅 话说完飞过一只海鸥 大峡谷的风呼啸而过 是谁说没有 有一条热昏头的响尾蛇 无力的躺在干枯的河 在等待雨季来临变沼泽 灰狼啃食着水鹿的骨头 秃鹰盘旋死盯着腐肉 草原上两只敌对野牛 在远方决斗

后半句:在一处被废弃的白蚁丘 站着一只饿昏的老斑鸠 印地安老斑鸠腿短毛不多 几天都没有喝水也能活 脑袋瓜有一点秀逗 猎物死了它比谁都难过 印地安斑鸠 会学人开口 仙人掌怕羞 蜥蝪横着走 这里什么奇怪的事都有 包括像猫的狗

网文新闻测试

我们对Luotuo-BERT在网文新闻30对的数据上进行了测试。我们额外编写了一个可视化,除了热图的展示,我们还抽样展示了热图中涉及数据的文本信息。可以看到

  1. OpenAI论文的假设被基本验证。即一个文本的前段和后段呈现很强的相关性

  2. 由于我们的模型是在新闻上训练的,当前在新闻的表现上更好。

  3. 对于不同domain的文本,相关性矩阵会呈现分块对角的形式,甚至在不同类型的新闻,不同类型的网文之间,也有这样的特点。

  4. 根据我们的测试,当前的模型在其他domain的文本上,也能体现出良好的相关性。如果进一步补充其他领域的训练文本,可以使得这个特征有更好的不同领域的适应能力。

周杰伦挑战

在周杰伦挑战中,我们对比了我们训练之前的基础模型,沈向洋老师IDEA团队的Tai-102M的BERT,以及我们训练后的Luotuo-BERT的结果,同时我们还展示了Hugging Face默认的BERT-base-Chinese模型的结果。(更大BERT的结果将在周一放出)

周杰伦挑战的图见一开始tSNE可视化。

观察下图我们可以得出几个结论

  1. 相比于网文新闻测试,歌词测试要难得多。即使是人类来观察前后文本,也很难看出明显的相关性。

  2. 有一些同歌手、相近主题的歌曲,会出现分块相关的情况。

  3. 我们也对比了OpenAI的结果,通过蒸馏学习,我们的LuotuoBERT已经能够达到和OpenAI的API competitive的结果,所以我们后续考虑在KL散度Loss中,进一步加强对角先验,而不是单纯只考虑OpenAI的结构为目标概率。

更多的对比结果我们将发布在我们正在编写的报告中。

模糊问题搜索

在我们的初步测试中,LuotuoBERT已经有很强的模糊文本搜索的能力。

当然,一个更严肃的模糊搜索应该进一步建立Query特征到Answer文本的关联映射,并适当考虑传统关键词的技术。

文本聚类

在不给定类别标签的时候,我们的可视化工具也会自动对文本进行聚类。

这是一个在新闻数据上进行聚类的展示。

少样本的分类学习

例子代码

训练方法

在训练中我们使用了三项Loss, 第一项是对OpenAI的feature求MSE的Loss(其实我估计L1更好); 第二项是CSE Loss,也就是对文本对求相似度矩阵之后,横向和纵向,以对角为ground truth标签,求cross entropy; 第三项是KL散度的loss,对openAI得到的相关性矩阵P,和模型当前得到的相关性矩阵Q,按行和列分别求KL散度。

具体的内容可以看我们正在编写的报告,等定量实验完成一些后,我们会先挂出中文的arxiv,方便大家引用我们的工作。补充更多定量实验之后,我会翻译成英文。

BERT模型

对于BERT模型,我们增加了一个全连接层使得BERT的特征能够提升到1536维,并且使用沈向洋老师IDEA发布的中文CLIP模型为起点开始,进行训练,在所有数据上训练了总共5个Epoch。我们周末先放的是102M的小模型,352M的应该周一周二就会放出来。

GLM模型

对于GLM模型,对于一个句子输入,我们获得Tokenizer后每一个input token在GLM的最后一层hidden vector,然后将这个vector通过全连接,依次输入了一个BERT。

这些细节具体可以看我们正在编写的报告

数据

在骆驼嵌入的训练中,我们使用了234.5K的CNewSum数据。将新闻数据清理后,前后切开,并调用OpenAI的text-embedding-ada-002模型,得到了所有文本对的1536维数据。

我们准备公开这批数据,正在研究CNewSum和OpenAI的数据协议,并且准备申请共享这批数据的表格和网站,之后就会释放这批数据。

另外,将新闻数据训练得到的模型,应用在其他领域(比如修仙网文)可能会有一定的限制。最好再进一步加入对应domain的数据进行进一步的蒸馏训练。如果这方面您有确实的需求,也愿意覆盖数据和算力的费用,可以联系我们团队。(要是加入了部分额外domain数据的训练结果愿意公开给社区就更好了)

赞助(Sponsorship) 骆驼项目

在训练骆驼嵌入的时候,除了使用社区捐赠的经费购买的远程服务器外

我们还使用了两周 东吴证券 捐赠的A100算力,在此表示感谢!

如果你有兴趣赞助骆驼项目,请点击主项目或者查看赞助表单

If you are interested in sponsoring the Luotuo Project, please click on the major project or view the sponsorship form.

回到开头

人员

更详细的整个骆驼项目相关的人员信息,请查看骆驼项目的主页

每个作者都是第一作者,顺序是随机的。

李鲁鲁发起了项目,并完成了初步的验证,提出了KL散度Loss和Hard Negative挖掘。

刘思诣完成了初步训练框架的编写,以及支撑了后面模型上传到hugging face管线。

冷子昂完成了完整的大模型和小模型的训练,包括载入数据和损失函数的实现。

陈启源准备了CNewSum的数据,做了句子切分。

黄泓森负责爬取了OpenAI Embedding的数据。

陈舒年完成了重要的几个可视化。

孙骜(即将)用我们的得到的Embedding,完成CoT的提升实验。

胡婧收集了周杰伦的歌词,并(即将)完成更多的定量实验。

回到开头

引用

如果您在项目中使用了我们的模型、代码或者数据,请引用下面第一篇文章。

Please cite the repo if you use the data or code in this repo.

@misc{alpaca,
  author={Siyi Liu, Ziang Leng, Hongsen Huang, Shunian Chen, Jing Hu, Ao sun, Qiyuan Chen, Cheng Li},
  title = {Luotuo Embedding: Generative Text Embedding Model distilled from OpenAI API},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/LC1332/Luotuo-Text-Embedding}},
}
@misc{alpaca,
  author={Ziang Leng, Qiyuan Chen and Cheng Li},
  title = {Luotuo: An Instruction-following Chinese Language model, LoRA tuning on LLaMA},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/LC1332/Luotuo-Chinese-LLM}},
}

回到开头

鲁叔的讨论

回到开头


TODO for RELEASE

周二之前需要完成


回到开头


Report

See our in writing report here