家人们,苦长文本久矣的大语言模型(LLM),现在终于有解法了!
就在最近,香港中文大学贾佳亚团队联合MIT宣布了一项新研究,一举打破如此僵局:
发布全球首个70B参数的长文本开源大语言模型——LongAlpaca。
值得注意的是,这次团队开源的LongAlpaca不止是一个单一的大语言模型,实则是一个系列,包括:
- 中杯:LongAlpaca-7B
- 大杯:LongAlpaca-13B
- 超大杯:LongAlpaca-70B
而在它们完整训练和评测的背后,更为关键的是研究团队精挑细选、千锤百炼得来的长文本数据集LongAlpaca-12k。
并且在自研的大语言模型文本长度拓展方案LongLoRA的加持之下,在最终的结果上取得了惊艳的成绩——
只需两行代码、一台8卡A100机器,便可将7B模型的文本长度拓展到100k tokens,70B模型的文本长度拓展到32k tokens。
要知道,现在主流的大语言模型都只支持短文本的输入(LLaMa支持2k tokens、Llama2支持4k tokens);而我们在实际使用的过程中往往需要的是长文本的输入。
例如让大语言模型去解读一本小说的剧情,再如让它帮你分析一篇论文等等。
而以往开源大语言模型要想拓展文本的长度,基本上就是堆算力,动辄消耗100块以上的GPU或TPU的那种。
不仅计算资源上的消耗巨大,更是由于缺少专精的数据集,使得长文本输入得到结果也并非那么理想。
这也就是开头我们提到“苦长文本久矣”的由来了。
那么贾佳亚领衔的研究团队发布的LongAlpaca的效果具体又是如何呢?
现在一同来体验下。
“全球首个”的一手体验
既然是一手体验,我们主打的就是要把LongAlpaca从方方面面来个评测。
分析某篇论文获奖原因
首先我们小试牛刀一下,将一篇ICLR的Oral论文(共12487 tokens)“投喂”给LongAlpaca,让它帮忙分析一下获奖原因。
一篇论文的文本长度定然不会是像我们平时提问普通问题那般简短,而且通篇的文字在逻辑上也是环环相扣,极具严谨性。
而LongAlpaca在面对如此专业性的论文,依旧是给出了较为完美的回答,分别从论文提出方法的新颖性、框架的综合评价,以及实验结果等关键要素进行了分析。
最后的总结是:
总而言之,这篇论文获奖的关键原因是所提出的Domino方法和评估框架的新颖性、有效性和通用性,推动了切片发现的最新进展。全面的实验评估和定量分析为支持概念贡献提供了强有力的经验证据。
根据两篇论文分析会议风格的区别
从第一个评测内容来看,LongAlpaca对于一篇论文内容长度的处理上是完全拿捏的。
那么如果“投喂”两篇,还是对比着来看的那种,它是否依旧能hold住呢?
话不多说,直接“丢进去”:
根据这两篇论文,比较一下两个会议的区别(共25802 tokens)。
同样的,LongAlpaca依旧是从多个角度,方方面面地去回答这个问题——
论文的结构、技术的深度、理论与实验、表示法,甚至是文章的语言风格,都给出了具体的分析结果。
最后LongAlpaca给出的结论是:
CVPR的文章风格更加具备结构化和实验性,专注于描述一种计算机视觉任务的方法。
ICLR论文风格则是更灵活,专注于证明元学习见解的关键公式和理论分析。
提问名著章节
在感受完LongAlpaca对于论文的分析之后,我们继续来看下它能否拿捏更具戏剧性的小说名著。
把《西游记》的节选片段(共36870 tokens)丢进去,并提问:
在《西游记》中,孙悟空为什么在大闹天宫时期很厉害,但取经路上却屡屡受挫?
LongAlpaca按照《西游记》的故事时间线,分析了在大闹天宫时孙悟空的傲慢,后来被佛祖限制了能力,以及沿途的妖怪越发强大等种种的原因。
总结来说就是:
强大的对手、对他力量的限制、欺骗和缺乏同伴是他在旅途中失败的最初原因;但随着时间的推移,他获得了智慧、经验和战友,使他最终能够战胜更为强大的敌人。
与Llama 2同台竞技
在自身纵向的各项评测后,定然也是少不了横向的比较。
那么跟大语言模型开源界炙手可热的Llama 2相比,LongAlpaca的表现又会如何呢?
这轮我们派出的是“大杯”——LongAlpaca-13B选手,向它提出的问题是:
根据《三体》第一部中的章节(共32252 tokens),叶文洁为什么要联系外星人,而后期又为什么后悔?
LongAlpaca-13B可以说是较为精准地给出了答案:
叶文洁最初与外星人的接触既是出于理想主义,也是出于复仇,但随着时间的推移,她对人性的看法发生了变化,她意识到自己可能给全人类带来了危险,她的遗憾也随之增加。
反观Llama 2这边,同样是13B量级的大语言模型,做出的回答就有些差强人意了,大部分文字并没有围绕问题本身。
只是简单的提了一句:
最后她感到后悔,因为她意识到她的行为导致了她从未想过的后果。
总而言之,从种种的评测表现来看,LongAlpaca在处理长文本输入的难题上确实是做到了较大优化。
那么接下来的一个问题便是:
怎么做到的?
左手抓数据,右手抓策略,这便是LongAlpaca的应对之道。
在数据方面,正如我们刚才提到的,训练长文本大语言模型的难点一方面在于缺少公开的长文本对话数据。
而且此前长文本模型的训练,大多是在非对话的语料上用 “next-token-generation”的方式进行继续预训练。
这种方式虽然能够align模型对于长文本的位置编码格式,但缺点也很明显,就是很难让模型有较好的对话能力。
因此,贾佳亚团队收集了9k条长文本问答语料对,包含针对名著、论文、深度报道甚至财务报表的各类问答。
其中,论文相关问答最为详细,包括了“审稿”、“论文对比”、“会议风格对比”、“修改意见”,以及针对论文内容的提问等。
但毕竟扬了“长”也不能忘了“短”,因此贾佳亚团队还从原有的Alpaca数据集中挑选了3k左右的短问答语料混合训练。
最终,也就成功构建了我们前文提到的LongAlpaca-12k。
接下来,便是策略层面。
正如我们刚才提到的,此前在大语言模型长文本输入问题上,另一个老大难的问题便是计算资源消耗量巨大。
具体而言,主要就是集中在了自注意力机制(self-attention)的计算上——开销随着文本长度成平方次地增加。
因此,研究团队以此作为突破口,提出了在研的大语言模型文本长度拓展方案LongLoRA;与此同时,还采用了分组和偏移的方式来对全局自注意力机制进行模拟。
其中,LongLoRA具体的关键技术点就是shift short attention,我们姑且称之为偏置短注意力。
它的核心思想就是用sparse local attention(稀疏局部注意力)替换掉dense global attention(密集全局注意力)。
大概可以理解为检索时的思想,只需要将匹配度、相似性高的centext拿过来用即可。
如此一来便可以大幅降低计算资源的消耗了。
更重要的一点是,LongLoRA的训练只需要2行代码即可实现!
此外,LongLoRA还探索了低秩训练的方式。原有的低秩训练方式,如LoRA,无法在文本长度迁移上取得良好的效果。
而LongLoRA在低秩训练的基础上,引入嵌入层(Embedding layer和 Normalization layers)进行微调,从而达到可以和全参数微调(Full fine-tune)逼近的效果。
对于8k长度的模型训练,相比于全参数微调,LongLoRA将显存消耗从46.3GB降低到25.6GB。
对于64k长度的模型训练,相比于常规LoRA,LongLoRA将训练时间从90~100小时左右降低到52.4小时。
值得一提的是,LongLoRA在各类语言任务上,包括文本建模(Proof-pile、PG-19)、信息检索(topic retrieval, passkey retrieval),都展现了优异的性能。
并且LongLoRA可以仅在一台8卡A100机器上将7B模型的文本长度拓展到100k tokens,将70B模型的文本长度拓展到32k tokens,并且保持出色的语言建模性能。
如何部署?
对于如此“快、好、省”的项目,你是不是迫不及待地想要尝鲜了呢?
现在,它已经在GitHub上开源,并给出了十分详细的部署教程。
例如在安装方面,仅需要简单六步:
1、在GitHub中fork这个repo。
2、在本地机器上克隆存储库,使用git Clone并粘贴此项目的url。
3、运行如下代码:
pip install -r requirements.txt
pip install flash-attn --no-build-isolation
4、根据偏好,使用“已发布模型”和“微调模型”。
5、通过对话测试模型。
6、部署到自己的demo。
以及还有各种“杯型”的模型、训练过程代码等等,团队都在GitHub项目中详细地展示了出来。
有需求的小伙伴可戳下方链接自取了~
GitHub项目地址:
https://github.com/dvlab-research/LongLoRA
论文地址:
https://browse.arxiv.org/pdf/2309.12307.pdf