压缩即智能:Gzip实现文本生成和文本分类
最近写了一个玩具压缩续写聊天,核心的思路是使用压缩算法(比如Gzip,Zstd,Zlib等)实现本文分类和文本生成功能。
基于压缩的文本生成原理
这个思想来自于DeepMind在2023年的论文Language Modeling is Compression,核心公式如下:
原文的目标是:
即在当前序列下,下一个token的概率最大,那score也一样,context是当前序列,candidate是下一个token,选score最大的token。
整个系统架构分为3个部分:
- 基础的文本context,比如一个新闻,或者整个人类知识库
- 单词表candidate,候选的单词表,比如字母、汉字、词等等。
- 评分机制:采用一个压缩算法评估信息增量,即计算信息熵 \(I(\text{candidate}|\text{context})\)
这里文本生成任务采用的是文本续写,所以信息熵的目标是让新增的信息最小的词,就是最合适的词。
具体代码实现可参照文章:Can gzip be a language model?,实现中额外增加了beam search,提升了生成质量。
基于压缩的文本分类模型
实现了"Low-Resource" Text Classification: A Parameter-Free Classification Method with Compressors的模型,它采用了如下公式计算文本间的相似度:
其中C代表压缩器,C(xy)代表将文本xy拼接在一起,最后NCD分数越小说明文本之间越接近。
比如:
- 我的候选问题y是:今天天气如何?
- 我的候选文本x集有:{今天多云,昨天晴天}。 压缩后发现今天二字有重复,所以压缩后长度更短,NCD越低,相似度则越高。
具体代码实现可参照文章:Implementing the GZip-kNN Classification paper - Lior Sinai
但是实际实现发现效果不好,所以改成了如下公式:
可以简单理解成用户问题y相对于原始信息x的增量,增量越小,匹配程度越高。
最后完整的流程是首先输入问题计算每篇博客的文章NCD分数,将NCD分数最小的文章作为x,输入作为y,生成文本。
压缩感知的数学原理
压缩感知的数学原理不知道怎么写,如果感兴趣直接问AI吧,反正就是信息熵的那一套东西。我也不知道现在讲知识还有没有意义,谁知道呢?我就讲一点sense。
如果是纯粹的压缩感知的解释:大模型返回的是和知识库中熵最小的(概率最大的词)这个显然和Gzip的输出差别很大。这是因为Gzip的输出在预先给定的文本下没有产生任何新的知识,而大模型显然产生了超出prompt额外的知识(熵),所以我认为压缩感知不能完全解释。
当然这个对比是不公平的,因为大模型只输入prompt,它的知识隐含在参数内部,即使使用RAG给上下文注入额外的知识,它仍能够产生超越上下文的熵,而Gzip不会产生任何额外的熵。
我对大模型的阐释是:大模型和人/工具的对话就像博弈,人/工具注入环境的物理信息,使熵增加,而大模型通过回复和工具操作使熵降低,最终整个对话不会产生任何知识,熵达到均衡的状态。这也能解释模型能力的区别,好的模型收敛速度快,差的模型始终无法提供有效知识。以及为什么纯用大模型自身合成语料无法无限度提升模型能力。
需要说明的是:熵并不是一个很准确的词,就像人类社会的熵是下降的,从熵的角度看社会发展讨论的那样,熵有很多很难厘清的东西。
和马尔可夫过程的区别
语言通常采用马尔可夫模型建模,即假设语言是$P(\text_|\text)$的过程,这其实也是大语言模型的建模,但是早期连神经网络都没有,主要采用朴素贝叶斯建模,即: \(P(\text{token}_{i+1}|\text{token}_{i})\) 比如给定一篇文章,采用分词器分词,统计词频,然后计算这个条件概率。给个例子:“hello world! I say hello.”这个句子里 \(P(\text{world}|\text{hello})=0.5\),\(P(\text{.}|\text{hello})=0.5\),\(P(\text{say}|\text{I})=1\)。然后你可以输入任意一个词,通过采样的方式就可以产生一句话。
但是有几个问题:它必须使用分词器,而且很难处理不同时态的词,输入原始文本没有的词就没办法了。而Gzip的方案可以大大简化生成结构,它的词表一般建模为单个char,比如‘a',’啊‘等等文本中出现过的单词(其实任意词表都可以,甚至二进制文件都能生成),如果用户输入了本文中不存在的词,也可通过压缩算法隐式处理。
总结
做这个的目的主要是两年前看了一篇文章:为什么“压缩即智能”?算法信息论与大模型、生命、智能的联系。我个人感觉压缩确实是一个解释大模型强有力的工具,但是熵和复杂度并没有想象的那么简单。表面上看大模型只是简单预测下一个概率最大的token,但是从续写、知识生成和熵的角度,就完全不是那么回事。
评论
暂无评论,快来发表第一条评论吧!