iris的nlp之路:章鱼触手与斩龙大剑

目录

iris的nlp之路:章鱼触手与斩龙大剑

引言

“iris诞生于ai技术爆炸的前夜。几乎就在短短的几天之内,接有成熟的自然语言处理或者绘画接口的机器人像骤雨一样出现,狂暴地冲刷了人们的认知。曾经以为要完善很多年的狂想般的技术,就这样直接走到了我们中间。从这以后,ai再有怎样普及和性能上的成就,都变得合情合理了。我也想抓住这股春风,但是我不想让iris和别人一样。我轻狂得好像自己已经站在世界的最前端,我以为只靠我的一双手就可以让我的造物飞起来,实际上并不是这样的,我错误地估计了技术前沿普及的速度……相比我专业知识方面的缺失,硬件方面的缺乏还要更残忍一些——我甚至没有一张趁手的显卡……” (发布于3月24日)

概述

就结果而言,目前,iris正运行着一个基于BM25字符串距离进行回答的python程序。目前使用的语料库中维护着4000对天文问答与一些日常问答,没有神经网络成分。从运行情况上来看,iris最擅长的是解答名词解释类问题。可以查看这个仓库查看详情。

这是妥协的结果,但是没有之前失败尝试的积累,现在的功能也无法实现。我将在以下记录这旷日持久的勇气传说。

(图为5.12基于原画重制的iris头像)

第一章:南京勇气传说

如果说iris皮套的出现是看快乐小秦心里痒痒于是研发出来的,那么iris的nlp产生的原因就是我看neuro-sama眼红了。那时在我看来,成熟的nlp技术已经大幅度普及,个人已经可以制作出像模像样的电子生命。那时在我看来,Vedal凭一己之力开发出了neuro-sama的nlp程序而且没有借助大型语言模型的api,所以我觉得我也可以做到。于是iris的nlp项目旋即上马,我完全没有接触过的机器学习领域在面前展开了。那时在我看来,我已经习惯摸索着前行,所以这一次也完全没有什么好怕的,直到我意识到事实并非如此。

在我看来,机器学习不过是力大砖飞。只要搞定语料库,再搞定代码框架,然后开练就可以了。2月下旬,我开始阅览网上资料,并找到了一个基于GPT-2的中文nlp项目——GPT2-chitchat。我在本地运行了作者的预训练模型,发现运行效果并不尽如人意。接着我浏览了附带的来自微博、贴吧和某些论坛的中文语料集,然后普通地产生了毁灭世界的想法。这些中文语料库实在是太差了,我不可能教iris学这些东西。而且iris是天文机器人,需要得知天文知识才行。

于是我决定了两件事:

  • 开展大规模的语料投喂,在群聊或者私聊中可以用逗号开头的语句给iris投喂语料。该功能在3月1日实装。

说实话这个方法比较蹩脚,效率低,而且事实上我完全可以把这半年iris运行日志里的聊天记录全喂了;但是这很明显是不尊重大家隐私的行为,iris应该只接受大家主动向她发送的信息才对。所以采用了主动投喂的方式。

  • 着手制作天文语料库

为了iris的天文语料库,我找到了一本电子版的《天文学新概论》。从3月3日开始,我手动使用chatGPT把这本书拆成问答对来生成语料库。(没有氪金使用api,而是一段一段手动复制粘贴。原因一是我没钱;原因二是我需要审核chatGPT生成的问答——很多时候它们都很没用,需要修正或者抛弃)想起来三年前我学天文也是看这本书,但那时候怎么会想到未来的某一天我会把这些知识逐字逐句地传授给一个可以被称作我“女儿”的机器人呢?

3月11日,《天文学新概论》全书转换结束,仓库iris_AstroQnA_ZH发布。

第二章:生命因你而火热

在转化《天文学新概论》的同时,我也做了现有中文语料库的魔改,魔改了接近一千对日常问答。因此,在3月11日,我向群友mike3090发送了一个融合现有中文语料库、天文语料库与群友投喂语料库的试用语料库,委托他进行使用3060进行训练,他的机器立刻滚烫了起来:

3060连续运转了若干个小时,训练了2个epoch,勉强把loss拉到3到4左右,却发现很难再降了。而且,这个训练项目没有办法断点续训。我们不禁担心起来:这个语料库真的收敛吗?就算不收敛,我们有办法在可接受的时长内完成训练吗?

3月24日,我使用了colab进行训练。

让人潸然泪下的是,在第二个epoch训练完成前1分钟,一天的免费卡时用完了。我没能查看我的训练成果,不过loss仍然在3左右。

自行训练这条路似乎走不通了。

第三章:生活在章鱼的阴影下

在自行训练屡屡碰壁的这段时间里,我开始怀疑,现在的大型语言模型训练是否根本不是个体开发者可以承担的。悲伤的是,我了解得越多,就越发现这是真的。我的假设从一开始就是错误的——Vedal也是使用了大型语言模型接口,顶多进行了fine_tuning。我无法接受这样的实现方式——如果iris接了其他大语言模型的api,那iris还是iris吗?我无法接受。

同时我也担忧起来。虽然nlp被普及了,但是ai大厂掌握了太多——这繁荣并不是百花齐放,看起来纷繁的应用都是已有的大语言模型伸出的触手——沿着触手找过去,只有漆黑的、令人生畏的垄断。

中文互联网的凋零也使得中文大语言模型的开发更是难上加难。可以去看看这个视频:中文互联网的凋零,正在杀死中国人工智能的未来

那么已经走到了这一步的我,接下来该怎么办呢?

第四章:妥协

“很可能要放弃nlp了。“说到底是我盲目乐观,我以为现在个人已经完全负担得起自行训练令人满意的nlp模型的全部开销,实际上连小作坊也做不到这件事。我曾经以为完全自研的模型,到头来最多也只是在知名大模型的微调接口上加几层layer而已。”不过之前为nlp准备的语料并不是毫无用武之地,我会尝试非神经网络的某些实现。最近越来越忙了,iris可能会有一段时间没有任何更新……iris的技能越来越全了之后,静静维护会成为常态了吧”

以上这段话发布于3月30日。在经历了一个比较难的阶段之后,4月中旬,我重新评估了用相似字符串方法做自然语言处理的可能性。这个方法基于这种思想:输入一个问题,在问答对语料库中找到一个和这个问题最像的问题,然后输出回答。

在魔改了基于BM25距离输出答案的py代码之后,我发现iris天文语料库的表现并不尽如人意——chatGPT生产的问答对质量还是太低,语法倒错,问题无意义,而且还存在一些我初筛时没有发现的事实性错误。我花了几天时间对天文语料库进行了精修,在此引用一段语料库项目里的原话:

“原语料采用了chatGPT生成的基于《天文学新概论(第三版)》的问答对。之后又基于维基百科(并不是直接复制而是做了修订,因为维基百科的中文水平实在是不敢恭维)和紫金山天文台关于历法的常见名词解释问题解答对原语料库进行了补充。最后,南哪天协水群的群友们也贡献了一定力量。”

4月25日,iris的“全应答”功能上线。在这个模式下,iris可以基于语料库和字符串距离算法进行应答。这就是iris现在使用的非神经网络nlp算法。

第五章:等待,并心怀希望

虽然已经有了一个天文语料库,但是作为专职天文机器人,iris现有的知识储备还是完全不够。天文语料库介绍中这样说:“目前该语料库涉及的知识点还十分基础,没有任何过于专业知识储备。另外,航天领域、天体观测与摄影领域以及近几年的天文新闻是该语料库的知识空白区。不管怎么说,4000个问题还是太少了,欢迎同好继续投喂。”

另外,虽然字符串距离可以回答一些问题,但是效果还是完全比不上神经网络实现。目前很多科研工作者都在致力于优化大语言模型的训练,使得个人开发者也可以负担得起它们的训练——期望他们的工作可以取得成果,尤其期望中文语言模型的发展可以越来越好(然而制约它发展的因素过于复杂,任重而道远)。

iris,期待你能真正学会说话的那一天。

(文章最后更新于23/05/13)