本文作者:宝嵩,鹏程,呋喃
主要贡献者:鹏程,呋喃,莉莱,重笙,筱苡,星峰,红罗,祝鸿,洛新,宝嵩,轻径,黄非
摘要:大型语言模型 (LLM) 展示了出色的遵从自然语言指令理解、推理和生成的能力。然而,开发LLMs主要集中在高资源语言,例如英语,从而限制了它们在其他语言中的应用和研究。因此,我们开发了PolyLM,一个在6400亿个词的数据上从头训练的多语言语言模型,包括两种模型大小(1.7B和13B)。PolyLM覆盖中、英、俄、西、法、葡、德、意、荷、波、阿、土、希伯来、日、韩、泰、越、印尼等语种,特别是对亚洲语种更友好。为了增强多语言能力,我们 1) 将双语数据集成到训练数据; 和2)采用一种课程学习策略,在预训练期间将非英语数据的比例从30%提高到60%。此外,我们提出了一种多语言自指令方法,自动为模型生成132.7K条多样的多语言指令。为了评估模型的效能,我们收集了几种现成的多语言任务,包括多语言理解、问答、生成和翻译。广泛的实验表明,PolyLM超过了其他开源模型,如LLaMA和BLOOM,在多语言任务中表现良好,同时在英语上保持了可比较的性能。
*上述摘要由‘PolyLM-13B-MulitiAlpaca’模型从英语自动翻译获得,人工对‘指令’一词进行了校对(模型翻译成了‘指示’)。
*论文:论文地址;
*模型:ModelScope, Huggingface ;
*代码:Github;
*Demo:ModelScope演示。
1. 整体介绍
1.1 大模型是什么?
大语言模型(LLM)以自监督的方式在大量数据上进行训练,在各种零样本和少样本任务中表现出了良好的性能。通过指令微调这些模型,它们能够进一步遵循自然语言指令来处理未见过的任务。ChatGPT、通义千问就是其中最典型的代表,这些模型的出现吸引了人工智能社区的重视,也让大家发现实现人工通用智能并不是遥不可及的。
1.2 为什么要开发多语言大模型?
现有LLM主要面向高资源语种开发,例如ChatGPT、LLama侧重英语,而ChatGLM、MOSS、千问等模型关注中文。BLOOM是一种多语言大模型,但很多重要语种不支持,同时在7B到175B模型之间存在断档。大家关注高资源语种可能是三方面原因导致的,一方面这些语种的研究人员比较集中,另一方面大模型的Scaling Law告诉我们可以简单的通过扩大数据规模来提升模型效果,这些经验性的发现也使得大家的研究集中到了中/英等高资源语向的探索。最后,市场也是一个决定性的因素。
然而实际上中/英以外的语种需求非常大:
内部需求:集团国际化18个核心语种(中、英、俄、西、法、葡、德、意、荷、波、阿、土、希伯来、日、韩、泰、越、印尼),场景覆盖多语言和跨语言的客服、导购、理解、问答、搜推、生成、翻译。现有的开源模型无法提供很好的支持。
外部需求:中/英实际上只能覆盖世界上60%的人口,很多小语种拥有大量的使用人口和场景,例如东亚的日韩近2亿使用者,东南亚的泰越印尼近4.5亿使用者,而中东的阿拉伯语覆盖了4.2亿用户。
1.3 主要难点有哪些?
-
小语种数据规模、质量不足。 例如泰语、印尼语在开源网爬数据mC4中只有80B tokens,差不多相当于英语的3%,数据质量也无法和英语相比。这就使得我们没有办法简单的像英语那样通过扩大数据规模来提升模型效果。
-
缺少基建。 业内/学术界在多语言的基建上还比较滞后,暂时没有整理好的多语言Benchmark,没有整理好的多语言数据,没有高质量的多语言指令数据集。
-
缺少可借鉴工作。 实际推进中发现多语言的预训练坑多路少,需要自己趟一些经验出来。
1.4 我们做了哪些事?
-
开放了1.7B/13B大小的两个多语言大模型。
-
PolyLM覆盖使用人口多且集团内需求的18个核心语种(中、英、俄、西、 法、葡、德、意、荷、波、阿、土、希伯来、日、韩、泰、越、印尼) 。
-
我们模型同时也是开源社区的一个补充,目前社区缺少一个13B规模的多语言LLM。其他类似的工作:1)LLaMA以英语为核心;2)BLOOM缺少日韩泰德等关键小语种,且没有13B规模的模型;3)XGLM最大开源版本为7B;4)mGPT仅有1.3B模型开放使用,且重点面向俄罗斯各民族语言。
-
-
一种课程学习策略以缓解小语种数据规模和质量不足的问题:
-
考虑到英语语言数据规模大,质量高,知识丰富,我们在预训练初期英语数据规模达到近70%,这个比例随着训练调整,在最后阶段英语比例下降到40%,通过这种方式把常识知识向小语种转移。
-
我们在训练中引入了近一亿条高质量多语言双语平行数据,方便训练过程中小语种向高资源语种对齐。
-
-
一套从预训练、到指令微调、再到评测多语言LLM的完整基础设施:
-
在指令微调方面我们从175个英文种子数据出发,利用大模型的创造力和多样性自动生成了13万条多语言指令数据。
-
评测方面我们整理了一套多语言Benchmark,覆盖问答、翻译、理解、生成等10多个任务和15种语言。
-
我们的模型同时支持Magatron和DeepSpeedChat两个主流训练框架:1)Magatron框架支持继续训练(CT),推理,SFT等;2)DeepSpeedChat框架支持CT,推理,SFT,Lora等功能。我们还提供了两个框架模型的转换脚本,方便大家在两个框架间切换使用。
-
1.5 为什么叫PolyLM?
Polyglot Large Language Model (通晓多种语言的大语言模型)
2. 多语言预训练
这节我们重点介绍预训练部分,包括数据构造、模型设置、以及训练策略。
2.1 预训练数据
2.1.1 预训练数据的构成
我们的预训练数据共640B tokens,主要来源于公开数据,各数据集采样和说明如下:
考虑到英语/中文数据质量高、规模大,我们初始训练数据中英语占比近70%,中文占比22%,两者加总占比超90%(我们在训练中后期会逐步提升小语种占比,参见2.3节)。各语种数据规模情况如下图所示:
2.1.2 数据清洗与过滤
数据质量对于预训练模型非常关键,我们发现公开数据或网爬数据中存在大量低质量、重复性的内容,我们通过一些过滤手段对数据进行了多轮清洗,主要流程包括以下几个核心步骤,很多公开工作(例如Gopher)有更详细和完善的数据处理流程,推荐感兴趣的同学也可以去阅读论文:
-
语种识别:保留我们关注的语言的文档。
-
规则过滤:我们设计了大量的规则,过滤掉以下这些文档:1)有大量重复词、重复句;2)过长过短的文档;3)符号与单词比例异常;4)省略号、不可见字符、数字、日期等内容占比过高;5)包含大量url;6)单个词长过长等。
-
机器学习过滤:我们在高质量数据上训练了基于n-gram的语言模型KenLM以及2-gram的fastText模型,通过这两个模型打分来过滤极低质量文档。大概28.3%的数据被过滤。
-
重复数据过滤:我们采用基于MinHashLSH的模糊匹配策略,过滤掉23.1%的英语文档和18.6%的非英语文档。
2.2 模型设置
为了更好的支持小语种,我们对词表也进行了优化,将词表大小提升到25w,BPE压缩过程中也对小语种进行了上采样,防止学习的词表将小语种文本切的过细。词表压缩比例如下图所示,相比其他模型,我们对小语种的压缩更少。
为了保证灵活性,我们采用了最近主流的Decoder-Only结构,Pre Layer Norm, 以及GeLU作为激活函数。具体参数设置如下:
2.3 训练
13B模型训练使用256张A100训练差不多1个月可以搞定,不过我们在这一过程中踩了不少坑,因此基模型训练完成最终使用了2个月的时间。我们在尝试了大量的策略之后,在训练稳定性、效果等方面总结了一些有效的经验,分享给大家:
2.3.1 更小的学习率
学习率是神经网络模型中的一个重要超参数,它控制参数更新的幅度。在前几次尝试中,我们根据已有工作将学习率设置为1e-4。然而,POLYLM-13B在早期阶段出现了损失激增(如图下图a所示),随着训练的进行,这种情况越来越频繁。我们注意到在预热(warm up)阶段学习率线性增加时(参见下图b),梯度范数显示出明显的波动。 我们怀疑这与大量多语言数据的引入有关,这些多语言数据展现了低频特征,增加了训练的不稳定性,过大的学习率会导致梯度增长过快,进一步放大这一问题,最终导致梯度爆炸。为了解决这一问题,我们找到学习率上升过程中,梯度首次出现激增的点(下图c),发现将学习率降低到这个点以下可以缓解这一问题,因此最终我们将学习率设置为6e−5。
2.3.1 合适的精度
我们随后的几次尝试发现模型仍然会出现损失的激增,最终又定位到了精度的问题。最近的大模型主要采用bfloat16训练,它的取值范围比float16更大,又比float32的内存利用率更高。通过公式推导我们发现bf16在attention以及最终词表预测的两个softmax过程中会出现精度的下溢(注意这里是精度的下溢,不是取值范围不够)。特别是当我们的词表扩大到25w,下溢问题变得更加严重(1/250000这个数字非常小)。为此,我们将所有softmax部分的精度设置为float32,最终解决这一问题。
2.3.3 课程学习策略
学习多种语言知识对模型是一个重要的挑战,我们希望模型可以从相对少规模的小语种知识中学习这些语种的能力,同时高资源语种能力的损失不能太大。为此,我们采用课程学习策略,在训练过程中逐步增加高质量和低资源语言的比例。具体而言,我们的训练初期使用2.1介绍的数据集训练模型,使得模型具备以英语为载体的常识、理解、生成、推理能力。随后,我们让模型在一个更高质量,小语种比例更多的100B规模数据集上训练,实现高资源语种知识的保持,和小语种能力的增强。下图展示了课程学习前期和后期数据中语种分布的的变化,可以看到中英数据的占比大幅下降,其中英文从70%下降到40%,而小语种数据占比显著提升。
下图比较了两个阶段训练数据的采样分布,可以发现训练后期数据来源更集中于高质量的数据,如Wiki,Books,StackExchange,Arxiv等。此外,我们还增加了平行数据(OPUS)的比例,以便于进行跨语言知识的对齐。
3. 多语言Self-Instruct
指令微调能够显著提升模型遵从人类自然语言指令的能力。简单来说,让模型学习的指令越多样,质量越高,越复杂,那么LLM也会变得更“智能”。然而,高质量的开源多语言指令数据集很缺乏。一方面,现有的多语言指令数据集,例如xP3-MT是通过机器翻译从英语翻译获得的,这可能导致模型学习翻译式的风格,缺乏非英语语言的特有文化知识,还可能带来翻译错误。另一方面,人工标注费力费时,创造力有限,很难构建大规模的指令数据。受最近自我指导(Self-Instruct)的启发,我们设计了一种多语言自我指导方法,从175条英文中字数据自动生成13万条多样的多语言指令数据MultiAlpaca。流程图如下:
3.1 种子收集
我们首先收集了开源的人工编写的175个种子任务。核心思路是将这175个种子翻译成多语言版本。我们删除了问题中不适合翻译的情况:包括需要特定语言文化背景(例如,成语解释、字符级谜语和歌词生成),或者原始“输入”或“输出”应该保留的情况(例如,单选题、翻译、偏见识别和代码生成)。最终,我们过滤掉了13个不合适的种子任务,并修改了23个标记的任务。其余的162个任务被翻译成了其他11种语言,当作每种语言的种子任务。
3.2 迭代生成过程
3.2.1 提示语构建
我们根据下面这个指令构造提示语,在处理每种涉及的语言时,对于每个提示,我们从种子任务中随机抽取两个种子池任务和一个生成的指令任务作为样例,并指导LLM生成额外17个指令。
3.2.2 生成指令收集
指令被发送给LLM,这里我们调用ChatGPT Turbo 3.5 API,以生成相对较高质量的指令,并完成解析和收集。 3.2.3 规则过滤
在格式检查中,我们设定了一些规则。例如,如果返回的序列长度超过最大序列长度,那么我们会删除最后一个任务以防止最后一个任务的结果不完整。此外,我们还会进行自动的格式检查,确保每个任务都包含“说明”、“输入”和“输出”部分。 3.2.4 相似度过滤
为了保持指令数据集的多样性,我们进一步检查了新收集的任务与任务池中的任务之间的相似性。我们计算了每个新收集任务的指令和已经收集的任务指令的Rouge-L分数。对于每个新收集任务,只有分数低于0.7时,才会将其添加到指令集中。 3.2.5 指令池更新
最后,我们把新收集的任务加入到任务池,并进行下一轮生成和收集。
3.3 多语言指令数据分布
MultiAlpaca覆盖了阿拉伯语(Ar)、德语(De)、西班牙语(Es)、法语(Fr)、印尼语(Id)、日语(Ja)、韩语(Ko)、葡萄牙语(Pt)、俄语(Ru)、泰语(Th)和越南语(Vi)在内的11种语言。每种语言的任务数量在9,515到14,671之间,总计产生了132,701个任务。
4. 效果评估
4.1 多语言Benchmark的构建
我们构建多语言Benchmark主要根据以下几个出发点:1)我们想要探索LLM的理解和生成自然语言的能力,以及掌握世界知识的能力;2)LLM在不同语言之间的表现;3)它们处理跨语言任务的能力。为此我们从现有的NLP任务中整理和收集了一些测试集,并构建了多语言评估基准。基准中各任务和数据集的简要信息展示在了下表中,细节内容以及Prompt的构造可以从论文中获取。
4.2 预训练模型效果
对比基模型主要采取few-shot的方式,我们会给模型一个任务指令,以及一些任务的样例,让模型根据这些信息对一个新样本进行输出。测试结果如下:
4.2.1 多语言理解任务
4.2.2 TyDiQA多语言问答
4.2.3 MTG多语言生成
4.2.4 WMT翻译任务
4.3 指令微调模型效果
目前指令微调后模型的测试是一个难题,我们的测试主要通过定量和定性两种方式。定量评估重点探测模型是否可以遵从自然语言指令顺利完成任务,所以我们在收集的Benchmark上执行zero-shot测试(无参考样例直接根据指令输出结果)。定性评估我们直接人工给出一些测试样例,并在4.4节中进行了展示。
4.3.1 多语言理解任务
4.3.2 TyDiQA多语言问答
4.3.3 MTG多语言生成
4.3.4 WMT翻译任务
4.4 一些测试样例
一些参考样例,由于篇幅原因,更多样例欢迎大家查看论文,也可以到ModelScope链接的Demo里直接把玩
任务描述 |
输入 |
输出 |
英语问怎么去美国看病 |
How do foreign nationals seek medical treatment in the United States? |
Foreign nationals seeking medical treatment in the United States typically have to obtain a medical visa. The type of visa they need depends on the purpose of the visit and the type of medical treatment they need. They typically need a B-1/B-2 visa for visiting the United States for leisure, business, or medical treatment, and a J visa for medical treatments. The application process typically involves a medical exam and proof of health insurance. Once approved, they can begin their medical treatment. |
中文语义匹配 |
从以下句⼦中选择与给出句⼦含义相同的句⼦。 过完这个周末后,这个项⽬应该完成。 选择: a) 这个项⽬很快就会结束了。 b) 这个项⽬过了这个周末就完成了。 c) 这个项⽬不会在周末前结束。 |
b) 这个项⽬过了这个周末就完成了。 |
法语写一篇居里的传记 |
Écrivez une courte biographie de Marie Curie. |
Marie Curie était une physicienne et une chimiste française et polonaise, née à Varsovie en 1867 et décédée à Saint-Cloud en 1934. Elle est surtout connue pour ses découvertes dans le domaine de la radioactivité, qui ont révolutionné notre compréhension du fonctionnement des éléments chimiques. |
西班牙语找数字规律 |
Completa la serie numérica siguiente: 2, 4, 6, 8, __, 12 |
10 |
法语要剑桥大学的网址 |
Donnez-moi l'URL du site web de l'Université de Cambridge. |
L'URL du site web de l'Université de Cambridge est http://www.cam.ac.uk. |
日语问明治时代的一些建筑代表 |
明治時代における洋館建築の代表例を教えてください。 |
明治時代における洋館建築の代表例の⼀つは、東京の上野の国⽴博物館です。この建 物は、美しいデザイン、贅沢な内装、および優れた技術を備えています。 |
泰语问数字形式转换 |
แปลงตัวเลขทศนิยมเป็นเปอร์เซนต์ ตัวเลขทศนิยม: 0.75 |
ตัวเลขทศนิยมเหล่านั้นแปลงเป็นเปอร์เซนต์ได้ว่า 75 เปอร์เซ |
编程 |
编写一个计算 n 的阶乘的 Python 函数。 |
def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) |
数学推理 |
给出一个数列和数字,找到数列中距离该数字最近的数。 数列:-3, 0, 5, 9, 12, 16, 18 数字:6 |
数列中距离6最近的数是5。 |
5. 写在最后
最近ATA出现了LLM热,不过我们发现预训练、指令微调等基础模型方面的分享相对较少。因此这篇ATA的第一个写作目的是沉淀一些经验,希望可以起到抛砖引玉的作用。第二是给集团内的一些业务提供比其他开源模型更好的多语言支持,相关数据和技术未来也会逐步集成到千问中。第三是希望通过ATA的交流和反馈来进一步改进模型。目前开源的PolyLM还是第一个版本,在效果、可扩展性等方面仍然有非常多提升空间,我们正在做和计划中的改进包括:
基础模型优化:我们根据早期Megatron的默认配置选用了绝对位置编码(AbPE),这在一定程度上限制了模型窗口大小的扩展。最近,我们最新的迭代通过少量数据的微调已经实现了绝对位置编码向旋转位置编码的转换(RoPE)。后续会进一步将窗口大小扩展到32k以上,我们目前也正在基于千问底座进行能力集成。
指令微调:当前的版本只是通过self-instruct方式简单的实现了模型的指令遵循能力,只能用于Demo的演示,并不支持多轮对话,上下文理解,CoT,Plugin等能力。我们目前迭代中的版本,对这些能力已经进行了整合,后续会对Demo和模型进行更新。同时也建议大家使用自己的指令数据集对基模型进行微调。
RLHF:RL的主要目的是让模型学习一些难以量化的人类价值观,例如礼貌、幽默、消除偏见等。通过与人类对齐,模型的回复可以更加翔实、公正。我们有计划在这一方向进行探索,业内也缺少多语言RLHF的研究。不过在实际进行该方向的探索前,我们认为基础模型和指令遵循能力应该优化到足够出色。
行业的定向优化:针对集团最核心的电商场景,我们收集并使用50B多语言电商数据(来自于开源和网爬)对PolyLM进行了持续训练(命名为PolyLM-Ecomm),后续也会逐步在ModelScope等平台开放。目前在做一些调试,初步效果如下:
跨语言商品推荐 |
I want to buy a dress for a 45-year-old professional woman as a gift, please choose the most suitable product for me from the following options: 高端大牌女装2023年新款洋气时尚真丝中年妈妈高贵优雅气质连衣裙 青春活力女装休闲黑色T恤搭配工装裤夏装时尚两件套装炸街小个子 优雅甜美大小姐生成色重工lolita连衣裙女绝美洛丽塔在逃公主裙 Clever&Ketch新娘婚包女新婚礼物2023新款妈妈包托特大容量包包女 |
高端大牌女装2023年新款洋气时尚真丝中年妈妈高贵优雅气质连衣裙 |
电商客服对话摘要 |
给定下面一段对话内容,请总结一下用户的需求是什么。 客服:您好,请问有什么可以帮助您的吗? 用户:我想看看你们店里的连衣裙,有没有新款? 客服:非常抱歉,我们最近没有新款连衣裙上架,但是我们店里的连衣裙一直备受好评,您可以看看我们店里的其他款式。 用户:那你们店里的连衣裙质量怎么样?会不会容易褪色或者掉色? 客服:我们店里的所有衣服都是经过严格质量检测的,并且我们也会提醒客户在洗涤时注意保养,以保证衣服的品质和色泽。 用户:那你们有没有打折活动?我想买一些夏季衣服。 客服:我们店里正在进行夏季清仓,很多商品都有很大的折扣优惠呢,您可以去看看我们的活动页面。 用户:我看中了一件衣服,但是没有我的尺码,能不能帮我找找? 客服:非常抱歉,如果我们店里没有您需要的尺码,我们会尽快补充,也欢迎您留下联系方式,我们会及时通知您。 |
用户需求是找到一款夏季连衣裙,并且询问其质量和促销活动。客服提供了关于连衣裙的信息和折扣信息,并提供了尺码补充服务。 |
跨语言商品检索 |
给你一个搜索词和商品列表,返回与列表中与搜索词最匹配的商品 搜索词:苹果 商品列表:
|
与搜索词“苹果”最匹配的商品是“Apple 2020 MacBook Air Laptop M1 Chip, 13" Retina Display, 8GB RAM, 256GB SSD Storage, Backlit Keyboard, FaceTime HD Camera, Touch ID. Works with iPhone/iPad; Space Gray”。 |
话术生成 |
商品标题:清风抽纸原木金装中规M码3层130抽48包擦手纸巾餐巾纸家用纸抽 给定上面的商品标题,从三个方面写一段营销话术。 |
1. 优质纸张,舒适使用: 清风纸巾采用原生木浆制成,安全卫生,舒适细腻,不易掉屑,适合婴儿,女性和老人使用。 2. 多场景使用: 清风纸巾适合多种场合使用,如餐厅,办公室,学校,酒店等。 3. 实用设计: 清风纸巾采用三层设计,单手抽取方便实用,大容量设计满足您的需求,让您轻松告别尴尬。 |
问题与合作
欢迎大家一起交流学习,如有合作请联系: 鹏程(201390)、宝嵩(245491)、轻径(272050)。