《这就是ChatGPT》读书笔记

今年双11只在图灵上面买了这一本书《这就是ChatGPT》,趁着周末看一下(貌似很久没有写读书笔记了,其实是很久没有看书了...

写这篇文章除了记录读书笔记之外,还有一个比较重要的任务:通过ChatGPT等AI工具阅读长篇内容来帮助我整理读书笔记。

<!--more-->

为了避免AI工具一本正经的胡说八道,我会先通读一遍整本书,然后在判断AI工具整理的内容是否正确,以评估后面是否会继续使用这种阅读方式。

1. 让AI快速阅读PDF书籍并整理

读书的好处是:书中的信息来源大概是比自媒体传播的消息要确信的多,起码有作者、编辑等一起校验过,不过读者还是应该保持自己的独立思考和分辨能力。

如果能够借助AI快速阅读书籍并掌握书中的核心,对读者来说应该是很有用的。

1.1. 调研

ChatGPT plugins现在貌似也没有对普通用户放开,因此需要调研一下其他的方案。

首先找到了一些垂直应用,比如ChatDOC,目前免费用户上传的pdf文件不能超过20页,因此需要手动将大文件拆成数个小的pdf,分开提交,比较麻烦,如果文件数量不全,得到的回复效果也不尽如人意,于是放弃了这个做法。

然后又找了一些开源的仓库,比如chatPDF、chatWeb等,看了一下源码,大概的流程是使用Python在本地读取pdf文件,将内容作为prompt,然后访问ChatGPT的接口,最后进行上下文提问。

这个过程首先需要在OpenAI的 api-keys 处创建一个秘钥,然后将秘钥配置到相关的配置文件里面,此外还需要配置一下代理。

由于OpenAI比较火热,对同一个秘钥的调用次数有限制,体验感觉也不是很好。此外,由于GPT4推出后,普通用户暂时不能升级,升级貌似还需要境外的信用卡才行,这里暂时没有探索了。

接着看了一下各家大模型提供的通用聊天几面,看看有没有直接附件上传的。

1.2. 确定方案

最后发现Claude直接支持上传附件(包括PDF等),对于免费用户来说,它直接支持一次性上传最多5个文件(每个文件小于10M),直接通过web端的聊天界面即可,不需要使用SDK啥的,非常方便(截止到2023年11月28号是这样的。

1.3. prompt

在上传文件之后,可以通过一些prompt,获取更有效的回答。

参考:聊天机器人阅读 PDF?用这25个提示词技巧,亲测有效!(ChatGPT & Claude 2)

2. 读书笔记

2.1. 背景

AGI(artificial general intelligence,通用人工智能)很可能在十年之内到来

介绍一下OpenAI的时间线(下面的时间线完全是由Claude整理的,感觉还是很强,各个时间点凌乱地分布在导读页面,感觉它整理的比我自己整理的还要全面

2015年:

  • 山姆·阿尔特曼、格雷格·布罗克曼等人联合马斯克创立OpenAI

2017年:

  • OpenAI陆续发表PPO等算法

2018年:

  • 发表GPT-1语言模型工作

2019年:

  • 发表15亿参数规模的GPT-2语言模型
  • 山姆·阿尔特曼出任OpenAI CEO
  • 微软注资10亿美元支持OpenAI

2020年:

  • 发布1000亿参数的GPT-3语言模型
  • OpenAI高管达里奥·阿莫迪等离职,创立Anthropic

2021年:

  • 发表图像-文本模型CLIP

2022年:

  • 阿莫迪等人发表构建助手Claude工作
  • OpenAI决定全力开发ChatGPT

看了这个才了解到Claude和ChatGPT的渊源。从OpenAI在发布GPT-2、GPT-3之后出去的一波人成立了一个新的公司,在22年年底是因为Claude快要推出,导致OpenAI集全公司之力优先推出了ChatGPT

2.2. ChatGPT是做什么的

ChatGPT 从根本上始终要做的是:针对它得到的任何文本产生“合理的延续”。

这就像某个外星超人在看到诸如数十亿个网页上的内容后,就可以像地球人一样正常对话了。

写一篇文章时,它实质上只是在一遍又一遍地询问“根据目前的文本,下一个词应该是什么”,并且每次都添加一个词。

每个词的出现有一定的概念,并不会在每次添加词的时候选择概率最高的那个,而是在一定范围内有随机性,否则就像输入法软件的只能联想,每次都选择第一个词,最后会得到一段很混乱的句子。

2.3. 下一个词出现的概念

ChatGPT 总是根据概率选择下一个词,但是这些概率是从何而来的呢?

以英文为例,首先从一段很大的样本里面(比如维基百科的数据),统计每个字母出现的频率,然后根据选择某个区间概念的策略,就可以生成一段随机文本。如果向里面插入一些空格,就有课程生成一些词语。

这种根据单个字母来选择要生成的下一个字母,很显然不太能创造有正确语义的句子。

在英语中,可以统计出字母对[二元(2-gram 或 bigram)字母]的概率,比如第一个字母是a,后面跟的第二个字母的概率是多少。这样,如果一次性关注两个字母,生成的正确单词可能性就越大。

如果有足够多的样本,可以对更长的字母对(三元..N元),就会发现生成的概率就更大。

生成的单词正确了,如何保证句子通顺呢?一样的思路,不仅可以统计得到单个单词的概率,还可以统计出单词对(两个单词、三个单词...N个单词)的概率,

只要单词对的足够长,就可以保证生成的文章必备很好的语义性。这感觉有点像那个“无限猴子理论”,让猴子在无限的时间内敲打键盘,也可以敲出莎士比亚全集。

要组合出n元词的词组,数据量也太大了(书中指出20元词的数量可能就已经大于宇宙中的粒子数量。

2.4. 使用大模型预测概率

要解决这个问题,需要建立一个模型,来预测词组出现的概率(这里的预测指的是即使这个词组并没有在已经统计的数据集里面看到)。ChatGPT的核心正式所谓的“大语言模型”。

如果已知了自由落体定律,中学生都可以计算出炮弹需要多久的时间才能落地。在不知道物理定律的情况下,可能会先开始做一些简单的数学上模型,比如一个公式,这个公式可能会契合大部分已经观测得到的数据。

因此,最重要的任务是为人类语言文本建立模型,语言模型简单说来就是对人类的语言建立数学模型。最早提出语言模型的概念的是贾里尼克博士,他认为让计算机理解人类的语言,不是像教人那样教它语法,而是最好能够让计算机计算出哪一种可能的语句概率最大。

这种计算自然语言每个句子的概率的数学模型,就是语言模型。

前面提到的根据n元词组推算下一个词出现的概率,可以看做是语言模型的第一个阶段,也称为统计语言模型

2.5. 使用神经网络训练模型

第二阶段是神经网络语言模型,使用神经网络来训练模型,学习单词之间的关联性和概率关系,能够利用大量的数据进行深度学习。

神经网络是一种层次化的模型,由多层神经元组成,每一层都可以对输入数据进行特征提取和转换。每一层的输出作为下一层的输入,从而形成了一种层层传递的结构。无论输入什么,神经网络都会生成一个答案,这跟人的神经系统比较相似,因此神经网络在图像识别、语音识别中比较常用。

神经网络通过逐步“根据样例训练”来学习执行这些任务,训练指的是把输入的文本数据空间投射到高维的语义空间中并进行学习,通过提供大量的“输入→输出”样例以供“学习”,然后尝试找到能够复现这些样例的权重,训练比较依赖更大的数据集,并且需要花很多人力在数据标注上。

通过不断地更新神经网络模型参数,神经网络逐渐学会了文本数据的语义并能够生成连贯自然、语义准确的文本,我们会发现最终得到了一个能成功复现我们想要的函数的神经网络,它逐渐学会了文本数据的语义并能够生成连贯自然、语义准确的文本。

神经网络的训练具有一定的“玄学”,(在某种意义上)只要我们的设置“大致正确”,通常就可以通过足够的训练来确定细节。

第三阶段是预训练语言模型,与神经网络语言模型不同的是,预训练语言模型使用无监督学习,因此不需要先标注数据或注明文本类型等信息,ChatGPT使用的Transformer架构就是一种预训练语言模型。

第四阶段是大语言模型,可以将大语言模型理解成一个非常大的预训练语言模型,尽管只是扩充了大小,但与小型的语言模型有不同的行为,以及在某些复杂任务上更为出色(这个被成为涌现能力,目前还处于争论中,也就是前面提到的”玄学问题”)

电视机有很多按钮,比如频道选择按钮,音量按钮,明亮度按钮等,用来完成多种功能。一个学习模型想要完成不同的任务,它里面也有很多可调节的“旋钮”,通过调整这些“旋钮”(我们把它们称为模型的参数),可以让模型达到理想的效果,正确完成任务。

ChatGPT的大语言模型有1750亿个这样的“旋钮”(参数),通过调整这些“旋钮”,它就学会了如何正确地写文章、回答问题等很多人类能做的事情。

ChatGPT每生成一个新的标记,都必须进行一次包括所有这些参数在内的计算。这些计算可以“按层”组织成高度并行的数组操作,方便地在 GPU 上完成。但是对于每个产生的标记,仍然需要进行 1750 亿次计算(并在最后进行一些额外的计算),因此不难理解使用 ChatGPT 生成一段长文本需要一些时间。

2.6. 嵌入

目前的语言模型,基本上是基于数字来训练的,如果要用它来处理像文本这样的东西,我们需要一种用数表示文本的方法,这就是嵌入(embedding)

embedding是一种将词汇、句子或更大的文本块转化为数值向量的方法,这些向量可以被机器学习模型理解和处理。"嵌入"这个词在此上下文中的含义是,文本信息被"嵌入"到高维空间中,每个维度都代表文本的某种特性。

比如“猫”这个单词文本,可能会在训练过程中被解析成数百个数字,这些数字都代表了这个单词某个抽象的本质特性,他们可能与语义相似性、语法关系、共现模式有关系,但具体的含义我们并不知道,最后会将这些数字放进一个高维向量中。

可以通过查看大量文本,创建很多的词向量,同时收集将一堆有关联的词(比如alligator短吻鳄和 crocodile鳄鱼在相似的句子中经常几乎可以互换),相似的词向量之间距离较近,不相似词向量距离较远(就像判断两个图形是否相似。

这种词向量有以下几个特点:

  • 捕获了词之间的语义相似性关系
  • 可以通过神经网络有效地学习获得
  • 方便后续的语义运算,通过向量运算实现语义组合
  • 是文本的分布式数值表示,便于统计学习

有了词向量,语言模型就可以通过比较两个或更多词向量之间的距离或角度,来理解词之间的关系,衡量文本之间的相似性,

embedding让语义运算有了数值基础,是神经网络模型处理语义的基石,也是 ChatGPT 等大模型的核心技术:先用神经网络学习大量文本数据,获得每个词的向量表达,然后在此向量空间中进行语义运算,从而达到理解语义的目的。

2.7. 有意义的人类语言

除了人脑之外,ChatGPT 的神经网络也可以做得非常出色。

ChatGPT证明:一个连接数与大脑神经元数量相当(有约 1000 亿个神经元,及约 100 万亿个连接)的纯粹的人工神经网络,就能够出色地生成人类语言。

那么,产生“有意义的人类语言”需要什么?

第一个是语言的语法,语言不仅仅是把一些词随机拼凑在一起;相反,不同类型的词之间有相当明确的语法规则、

第二个是逻辑,在亚里士多德发现的三段论(syllogistic)形式中,逻辑基本上用来说明遵循一定模式的句子是合理的,而其他句子则不合理。

ChatGPT“仅仅”是从其积累的“传统智慧的统计数据”中提取了一些“连贯的文本线索”。但是,结果的类人程度已经足够令人惊讶了,因此,有意义的人类语言实际上比我们所知道的更加结构化、更加简单,最终可能以相当简单的规则来描述如何组织这样的语言。

ChatGPT的成功可能向我们揭示了人类思维本质的一些基本规律。

人类语言是不精确的,这主要是因为它没有与特定的计算实现相“结合”,其意义基本上只由其使用者之间的“社会契约”定义。但是,计算语言在本质上具有一定的精确性,因为它指定的内容最终总是可以“在计算机上毫无歧义地执行”。

比如在自然语言中,“少年”这个词的范围是模糊不清的,可能指代从12岁到18岁的人。但在计算语言中,我们可以精确定义:

少年 = If[age >= 12 && age < 18, True, False]

这里使用了编程语言中的逻辑语句,明确限定了“少年”的准确年龄范围。

2.8. 利用Wolfram增强ChatGPT计算知识

可以使用自然语言通ChatGPT交流,而ChatGPT也会生成有语义化的回答,这些回答是连贯的,但这并不意味着它自信给出的所有事实和计算都一定是正确的。

而 Wolfram|Alpha 可以基于其结构化、有条理的知识进行精确计算,该语言(也是作者公司创造的)拥有大量内置的计算知识,可以帮助ChatGPT获得更准确的回答。

将两者结合,这意味着 ChatGPT 可以像人类一样与 Wolfram|Alpha“交谈”,而 Wolfram|Alpha 会将它从 ChatGPT 获得的自然语言转换为精确的符号计算语言,从而应用其计算知识能力。

3. 小结

这本书的作者是一个大牛,以至于书中有些概念并没有过多阐释,因此对于没有相关领域知识的读者来说并不是十分友好,在做笔记的时候我查阅了额外的知识,最后的笔记才勉强通顺了一些。

将PDF上传到Cluade之后辅助阅读,体验感觉还是非常好的,比如一些晦涩概念,可以直接询问

可以看见有一部分内容被我摘抄到上面的笔记中了。

感觉这是一个非常有用的技巧,虽然AI目前不能帮助我们获取完整的知识,但确实可以帮助我们加快获取知识的速度,后面我也会继续尝试这种阅读方式,至少某些科普书籍更有兴趣去阅读了~

至此,通过阅读本文,了解到了ChatGPT的产生背景、大致原理以及后续目标。

可以看出,ChatGPT的本质还是根据下一个词出现的概念,拼成类人类的自然语言,并不能保证它的回答一定是正确的,距离科幻小说中描绘的可以独立思考、独立学习的人工智能,还是有本质上的区别。

不过,正如书中介绍的一个重要观点,ChatGPT的出现,从某种程度上证明了,利用计算机来模拟人类思维,也许没有我们想象中的那么复杂。

感谢科技的发展!期待它们更近一步地发展!