正所谓,“强中自有强中手,能人背后有人弄”。
自从OpenAI抛玉引砖之后,这个领域的砖就纷至沓来,现在林林总总都能盖得起三间北房。
每个大模型出来后,相关推文都是一片吹捧,不是在某些数据集打榜了SOTA,就是在同参数量模型中处于领先地位,亦或者在某些问题中,拥有了gpt-3.5百分之九十几的能力。但还没等它得瑟两天,又会被新的模型无情地从脸上碾过,沦落成新模型论文中的刀下亡魂。
闭眼难看三春景,出水方显两腿泥
站在使用者的角度来说,如何挑选一个适合自己的模型并不容易。每当出现一个新模型,买的推文中吹的是天花乱坠,真实使用过的用户对它的评价却褒贬不一。
主要原因是,很少有人公平客观地详细测试过这个模型的能力,都是输入少量case来看看它的结果,当结果不错的时候,衷心称赞一句"NB",不尽如人意时,就将笔记本盖子一合,气沉丹田,缓缓吐出一句"辣鸡"。
但这些少量样本无论结果好坏,其实
都不能完全体现该大模型的能力,只有经过系统测试,才能知道哪个模型好,好在哪方面;哪个模型烂,烂在哪一点。也只有这样,才能找到适合自己领域子任务的模型。
是骡子是马,牵出来遛遛
当然,很多LLM发布时,都会附带上一些数据集测试结果,比如常见的MMLU、C-Eval、GSM8K等。它们有的侧重于综合知识能力,有的侧重于推理能力,还有的则侧重于数学能力。
这些测试都很重要,但是,以榜单来作为大模型主要评判机制可能不是最优解,现在榜单已经被玩坏,很容易被拟合,从预训练到SFT微调用题库拟合,亦或者可以靠造一些特殊的prompt,方法千奇百怪,总之,这并不能完全反映模型的综合能力。
而且,作为模型的使用者,我们更在意该模型是否在我们关心的领域内,是否对我们关注的子任务有提升和帮助。为此,我们设计了多数据维度+多子任务的测评体系,以期找到更加适合自己的模型。
中文认知能力
众所周知,许多模型在训练的时候,各语言语料占比偏差是非常大的,基本都是以英文为主,中文占比非常低(当然,在这一点上,国内开源模型做的会比较好一些,中文语料占比都比较高,许多还特意针对中文做了优化)。
那么,这些模型的中文能力到底怎么样?由于我们的数据也是以中文为主,所以这个问题的答案就显得尤为重要。
针对这个问题,Github上的一位老兄就有一个项目专门在研究这个事情(见文末参考链接)。
他使用了《通用规范汉字表》、《常用國字標準字體表》以及《Unicode中日韩统一表意文字》这三个常用字符集,共计21267个汉字来进行测试。先使用WordPiece和BBPE两种方式来测试模型识字率,然后借助词token分布,画出了模型输入词向量分布和输出词向量分布,"前者为词或token进入模型时,经过embedding层所得到的最初语义表达;而后者,则是经过模型多层计算之后,最终理解的语义表达"。
通过这个工作我们能发现什么呢?
# 关于识字率,如果模型对汉字的WordPiece编码为unk_token_id,则认为模型不认识该汉字;被BBPE编码打散的越多,则说明模型对该汉字的认知程度越低
# 然后通过词表向量分布,我们可以看出该语言模型是否进行了多语言对齐:"如果同一个语义的不同语言词汇聚集在一起,就说明这个模型进行了多语言对齐“,并且我们可以直观地观察到模型对不同语言的支持程度
# 我们还可以通过向量分布,大概看出模型对于语义理解的能力:训练有效果的字词,在绘制出来后,能感觉互相之间是有连接性的,有一定的拓扑关系;而没能被充分训练的字词,明显呈现了均匀分布,互相之间没有远近关系,这应该是保持了原始的随机分布特征
数据集
数据集的选取非常重要,因为不同数据源的数据分布是不同的,即使是同一个LLM+同一个子任务,在不同的数据源中的结果可能也会有偏差,并且同一类数据源的中文数据和英文数据测试结果也可能不太一样。
所以,在构造测试数据集时,我们融合了包含中英文医疗文献、中英文患教类文章、问诊、临床试验等各维度数据,保证数据维度的丰富性和随机性。
子任务
我们设计了号称"全真七子"的七个维度子任务。
这些子任务,有些虽然是NLP领域内的常见子任务,但是它们与我们的业务强相关,能够帮我们更好地解决业务问题,提升业务能力,比如:
# "关系抽取"、"实体级情感分析"、"药品观念提取"这三个子任务,能够帮助我们更加快速地丰富自身医疗知识图谱,解析医疗文本结构化,更加精准地把控医生治疗观念,丰富医生360画像
# "实体链接"是对我们实体识别任务的加持
# "摘要抽取"、"标签抽取"、"文章是否围绕某个药品展开" 则是业务方面的强需求
我们期望通过这七个子任务,来找到更加适合我们业务的大模型。
由于不同子任务的类型不同,我们针对性地使用了不同的测评指标,以便更好地计算测评结果:
# 针对输出结果边界清晰的子任务,我们使用Micro的precision、recall、F1分数来计算指标
# 针对边界不清晰的子任务,则使用ROUGE Score、BLEU Score来计算指标
并且,我们为所有子任务研究设计了一套通用的prompt,在测评各模型能力的时候,统一使用通用的prompt,排除由于prompt不同带来的影响。在测试子任务结果时,先测试每个模型对通用prompt的理解能力是否能按照要求进行输出,这也是模型能力的一种体现。按照要求输出的结果,再使用相应的计算方式进行指标计算。
你说你公道,我说我公道;公道不公道,测过才知道
从上方各大模型在不同子任务上的表现来看,GPT-4独占鳌头,在绝大多数任务中,都取得了压倒性优势。但它也并不是万能的,在比较复杂的文本语境中,它的关系抽取能力还是没有达到我们的预期,并且在部分子任务中,我们的一些行业模型其实也和GPT-4斗了个旗鼓相当。
与之相比,国内各大模型有强有弱,但整体和OpenAI还是有着不小的差距。
现如今,各家模型层出不穷,你方唱罢我登场,只有手持统一的大模型测评体系,才能选出适合自己当前业务的大模型,不至于人云亦云。
参考链接:语言模型中文认知能力分析 https://github.com/twang2218/vocab-coverage