本文来自微信公众号:超级王登科(ID:),作者:DK本人,原标题:《我用自己的10万条微信聊天记录和280篇博文,做了自己的数字克隆AI》,头图来自: 《机械时代》剧照
除了驾驶飞机、烹饪完美的肋骨烤肉、获得六块腹肌以及为公司赚大钱之外,我一直想完成的一件事就是实现一个聊天机器人。
与多年前单纯通过关键词匹配来回应的小黄鸡相比,现在已经可以媲美人类的智能了。 聊天AI一直在进步,但和我想象的有些不同。
我在微信上和很多人聊天,有的人聊天多,有的人聊天少。 我也可以分组讨论。 我还可以写博客和公众号。 我可以在很多地方发表评论。 我也发微博了。 这些都是我在网络世界留下的痕迹。 在某种程度上,这些东西构成了世界对我的看法。 从这个角度来说,他们也构成了我。 将这些数据——我对不同消息的回复、我写的每一篇文章、每句话、我发布的每条微博等——整合到一个神经网络模型中来更新参数。 理论上,你可以获得我的数字副本。
原则上,这和说“请扮演一个叫小王的人,经历是XXX”是不同的。 虽然以你的智慧,这样的表现毫不费力,可能是假的,但实际参数并没有改变。 更像是“玩”而不是“重塑”,文本的数千亿个参数没有一个被改变,它从你之前的文本中获取一些信息,然后用它的智慧来对付你。
我喜欢在文章中写一些不太有用的比喻,并且喜欢在最后做一些总结。 与人聊天时,喜欢用“ok”来应对,同时用“fuck”来表达惊讶。 我的性格之一 有时我沉默寡言,有时我却能言善道。 这些是我能感知到的一些特征。 除此之外,还有更多固定的习惯是我自己无法察觉的,但这些细微而模糊的东西,我却说不出来。 ,就像你在介绍自己的时候,你可以介绍的很丰富,但是离真实的你还是很远,有时甚至是完全相反,因为当我们认识到自己的存在的时候,其实就是在表演自己。 只有当我们无意识地意识到自己的存在并融入生活时,我们才是真正的自己。
发布后,我们将根据兴趣学习大文本模型的技术原理。 对于个人爱好者来说,在任何一个方面或更小的垂直领域取得突破的可能性已经不复存在。 同时,它不是开源的。 除了使用之外,没有什么可以考虑的。
然而这两个月出现的一些开源文本预训练模型,比如大名鼎鼎的 llama 和 llama ,让我开始产生了克隆自己的想法。 上周,我准备尝试一下。
首先,我需要数据,足够的数据,这些数据都是我生成的。 最简单的数据源就是我的微信聊天记录和博客。 因为微信聊天记录还没有完全清除,从2018年到现在,我手机里的微信账号就占了80G的存储空间。 我总觉得有人占据了我家里的一块空间。 现在如果我能用这里的数据,我就放弃80G了。
我备份了几年前的微信聊天记录,找到了我当年使用的工具。 它是一个开源工具,名为,我将把链接放在文章末尾。 使用此工具,您可以在计算机上进行备份。 将手机上微信的所有聊天记录导出为纯文本格式,这是一个需要耐心的操作,因为首先需要将整个手机备份到电脑上,然后这个工具会从手机上读取微信记录。备份文件并导出。
我花了大约4个小时备份,然后快速导出了我所有的微信聊天记录,这些记录按照聊天对象导出到了很多文本文件中。
这包括群聊和一对一聊天。
然后我就开始做数据清理。 我在大多数组中都潜水了很多。 我过滤掉了一些我比较活跃的小组。 另外,我还过滤掉了一些和个人的聊天记录。 我和他们聊了很多,他们也很喜欢我。 我获取了聊天记录并执行了此操作。 最后,大约 50 个聊天文本文件对我来说就足够了。
我写了一个脚本来遍历这些文本文件,找出我所有的演讲,以及前面的一句话,将它们格式化成对话,然后存储在json中。 这样我就有了自己的微信聊天数据集。
这时候我也让同事用爬虫爬取了我自己的所有博文。 当他抓取并发送给我后,我想起来其实可以使用博客后端内置的导出功能直接导出它们。 虽然博客数据也很干净,但是一开始我不知道怎么用,因为我要训练的是聊天模型,而博客文章都是长段落,不是聊天,所以我第一次训练。 只使用微信的这些纯聊天记录。
我选择-6b作为预训练模型。 一方面,其中国效应已经练得足够好。 另一方面,它的参数是60亿。 我的机器可以毫不费力地运行。 另一个原因是,已经有几个针对它的微调训练计划(我将在文末列出)。 另外,它也可以简称为6B,而且我做的6pen和6同姓,这也让我更倾向于使用它。
考虑到我的微信聊天数据最终可用的有10万条左右,所以我设置了一个比较低的学习率,增大了epoch。 前几天的一个晚上,#觉前,我写完了训练脚本,开始运行。 我去#觉了,希望醒来时能完成跑步,但那天晚上我几乎每小时都会醒来。
早上起床后,模型就开始训练了。 不幸的是,损失并没有下降得很好,这意味着训练了 12 个小时的模型效果不是很好。 但我是深度学习的新手。 我可以运行它而不会报告错误。 值得庆幸的是,我并没有失望,而是开始与这个模型进行对话。
为了增加仪式感,我不想在黑暗的终端中使用笔记或聊天。 我找到了一个开源的前端聊天页面,稍微修改了一下,部署了模型,封装了API,然后用前端页面来调用。 通过这个API,你可以实现更像这样的聊天。
请不要笑我。 我用自己的10万条微信聊天记录来训练模型。 以下是我与他(或者它?)的第一次对话:
我又尝试了一下,结果还是不太好。 我不是那种没有优化到极致就不好意思采取行动的人,所以我毫不害羞地直接发给了几个朋友,他们给我的反馈是,有点像你,他们给我发了截图谈话同时回来。
在第一个版本中,这个模型确实和我有一些相似之处。 我说不清楚,但感觉有点像这样。
如果你问他你在哪里读的大学或者你的家乡在哪里,他不会用准确的信息回答,他一定是错的,因为我的聊天记录里问我这个的人并不多。 ,从某种角度来说,这个模型并不理解我,他就像一个克隆人。
当我收到内容为A的微信消息并回复B时,有一些原因。 其中一些原因存储在我大脑中的七到八十亿个神经元中。 理论上,如果我生成足够多的数据,也许是数千亿,那么参数足够大的人工智能模型就可以非常接近我的大脑。 10万可能少了一点,但仍然足以让模型的60亿个参数改变一些部分,使其比原来的预训练模型更类似于我。
另外,他还有一个更大的缺点,就是说不出几句话,回答也很简短。 虽然这很符合我很多时候的微信聊天风格,但这并不是我想要的。 我想让他多说一点。
这时,我突然想到了我的博客。 如何将这些博客转化为问题和答案? 我想,通过我的精心构造,他成功地将我博客文章中的一段文字变成了多个对话。 问答:
有时会返回一些不符合格式的内容,所以我写了一个校对脚本,将所有不符合规则的返回修改为标准json,字段名称不变。
然后我把它封装成一个接口,放在香港的一台服务器上。 我在电脑上写了一个脚本,将我的博文分成500字,批量转换成问题和答案。 由于界面速度的原因,我几乎又花了一个晚上才将我的两百多篇博客文章转换成近 5000 个对话数据集。
这时,我面临一个选择。 如果将博客对话添加到微信对话数据集中进行训练,博客对话的比例会太低,影响可能很小。 换句话说,它与之前的模型不会有太大的不同; 另一种选择是简单地使用文章中的数据来训练新模型。
我向 6pen 的算法人员寻求帮助。 在确定模型权重可以融合并找到从他那里获取融合脚本的方法后,我采用了后一种方法。
5000个问题和答案,训练速度很快,一两个小时就够了。 下午,我一边写文档,一边看了一下训练进度。 上班前训练完成后,我开始整合模型,让之前用微信聊天记录训练的模型,和我博客上训练的模型融合起来。
两种型号的重量可以自由配置。 我尝试了多种不同的比例。 考虑到模型收敛过程中损失仍然存在一定的反弹,我也尝试了不同步数的模型版本。
我和这些模型聊了一晚上,想找出效果最好的那个,但我发现似乎很难找出来。 这些模特有一些不同的行为,有的比较#躁,有的像舔狗,还有的特别高。 有的很冷漠,有的很热情,然后我才意识到,从某种程度上来说,这可能就是我不一样的一面。 虽然这样的理解肯定会让从事深度学习、熟悉原理的人嗤之以鼻,但也不至于损失什么。 浪漫的。
最终,我发现聊天和文章这两个模型的权重比是7比2,并且使用步骤6600中保存的模型,大多数时候融合效果更好。 当然,也可能已经是半夜两点了。 ,我的判断受到了影响,但无论如何我还是选择了他作为最终的模特。
我和他聊了很多。
显然,他离我很远。 他不能帮我写代码或写文案,而且他不够聪明。 因为训练数据不包含多轮对话,所以他对多轮对话的理解更差。 同时,他也不太了解我。 除了知道自己的名字(也就是我的名字)之外,他其实无法准确回答我的很多其他信息。 不过,他常常会说几句简单的话让我知道。 有一种熟悉的感觉,也许这是幻觉,谁知道呢。
一般来说,目前存在的所有众所周知的大型文本模型都是用大量数据进行训练的。 训练过程将尝试包含全人类生成的所有信息。 这些信息使得模型的数亿个参数得以不断优化。 例如,将参数增加4,将参数减少17,然后得到更智能的神经网络模型。
这些模型变得越来越聪明,但它们更像人类而不是个体,当我使用自己的数据重新训练模型时,我得到了完全不同的东西,一种更接近个体的东西。 模型,虽然无论是我生成的数据量还是我使用的预训练模型的参数量和结构可能都无法支持一个与我的大脑类似的模型,但是尝试这个还是很有趣的。
我重新部署了这个网页,并在中间添加了一层保护,所以现在每个人都可以尝试与这个数字版本的我聊天。 服务是我祖传的V100服务器提供的,而且只有一台,所以如果人多的话,可能会出现各种问题,我会把链接放在最下面。
您主动地、发自内心地生成的数据越多,您将来就越有可能获得离您更近的数字副本。 这可能会产生一些道德甚至伦理问题,但这是大概率会发生的事情。 如果我积累了更多的数据,或者有更好的预训练模型或者训练方法,我可能会随时再次尝试训练。 这不会是一个盈利或任何与商业相关的项目。 这在某种程度上也是我自己追求自己的方式。
这样一想,生活似乎就不那么孤单了。
PS,与我的数字克隆在线聊天:
我使用和参考的项目:
1.:
2.-6b:
3.:
4.:
5.:
6.:
7.美洲驼: