token和语义的gap

转载文章

系列的前言

Rethinking LLM是一个新的系列,
用来记录一些我关于LLM的一些本质问题的思考。

Rethinking是AL/ML领域论文的一个黑话,
可以简单理解为标题含有Rethinking的文章
一般是对一些本质的问题的深入思考。

虽然我是尽量以之前的科普文风来进行阐述的,
但是说实话这类的主题
就是没有办法让很多没有琢磨过LLM的读者看懂的。

某种意义上
真的是"姜太公钓鱼,愿者上钩",
希望这一类的文章能够找到
能看懂它并且产生共鸣的读者。

语义层面

一直以来,
程序员处理信息都是在一个比较微观的层面,
以NLP来说,
就是在字符、词、sub-word、token的层面来进行的。

NLP希望能够对自然语言进行一些理解,
但是在DL方案和LLM方案之前,
也只能是以一个微观粒度进行处理。

但是其实我们知道,
同一个意思可能是有很多种不同的措辞方式的,
例如:

prompt:请用10种方式表达下面这个意思:这个事情很困难。
以下是gpt-4的回答,temperature=0。
--------
1. 这个问题非常棘手。
2. 这个任务相当艰巨。
3. 这件事情充满了挑战。
4. 这个问题真的很难解决。
5. 这个事情让人头疼。
6. 这个任务需要付出巨大的努力。
7. 这个问题真是难以应付。
8. 这件事情让人不知所措。
9. 这个任务令人望而生畏。
10. 这个问题真是让人费解。

这10句话的意思其实是类似的,
但是在微观层面来说是完全不同的序列
单纯从编辑距离来看也很难将它们聚集在一起,
并且和其他意思分开。

语义是可以由微观的token序列来表达的,
token序列并不是语义的一个很好的表示方式:
同一个意思表达方式不唯一,
很难低成本的进行相似性比较。

直到有了LLM,
人类才真的有了一个较为通用的语义处理工具
并开始正视语义处理的问题,
以及思考如何在语义处理的层面进行编程

严格来说,
NLP应用了embedding和DL之后,
人类就有了一些语义处理的能力,
但是它还不够通用。

token级的扰动并不能有效影响语义

在[基于LLM的程序开发:策略开发基础(1)]中,
我讲了目前LLM生成文本过程中
引入的随机性
并且由此引发了一些思考,
没有看过的读者可以去看一下这篇文章的详细说明,
这里我再一次简单介绍一下。

从OpenAI的API(或者其他LLM API)
可以看到手工指定生成文本过程中引入随机性程度大小的参数,
这个参数控制的是在token生成过程中
引入的随机性的大小。

大家一般用的ChatGPT对话模式
是设置有一个不小的随机性进入的。

如果理解了LLM的运行过程,
一般人就会对这个现象感到疑惑:
为什么我们明明引入了不少的随机性,
但却没有感觉到“输出的文本词不达意,甚至构不成合理的句子?”

这里同样使用GPT-4的一个例子:

prompt: 请换一种方式表达下面这个意思:这个事情很难。

以下是GPT-4的10次回答,temperature=1.8,回答具有随机性,仅供参考。

处理这个问题颇具挑战性

这个任务的难度颇高。

这个任务相当具有挑战性。

这个问题颇具挑战性。

办这件事很颇具挑战。

这个事情的难度很大。

这个问题非常具有挑战性。

这件事情充满了艰巨。

这个事件非常具有挑战性。

这件事非常地具有挑战性。

要注意,
这个例子和上一个是不同的。

本次的10次调用中,
LLM都是独立生成的,
看不到context中出现另外的别的回答。

完全是靠temperature=1.8来引入足够大的随机性来产生不同的问答。

之所以选用1.8

是因为在我这,设置更大的temperature的,

GPT-4的API开始变得无法返回结果,

原因未知。

虽然我们引入了较大的随机性,
但仍然能够生成同样语义的回答。

在句子中,
我们随机修改一些字,
会导致句子不合语法。

但是LLM能够在下一个token的生成过程中考虑它,
并且仍然给出来一个通顺的下一个token,
而且生成这下一个token的过程中仍然引入了随机性!

这有点像是随机扰动少量像素一般是并不会影响图片的语义,
虽然句子是有语法要求的,
但是LLM能够在生成的过程中自动适应这些扰动的。

能够对局部进行扰动并且不影响结果,
说明局部对整体的影响是很小的。
而且每个局部对整体的影响都是很小的。

语义是一个较为高层次的概念的,
类似于高维度空间中的平面,
我们可以扰动这个平面上的采样点,
但是并不妨碍我们对于整体平面的观感。

这带来了一个问题:
我们很难,通过在token层面的处理来鲁棒地实现,理解高层语义的含义,
至少不用DL等黑盒方案的时候是做不到的。

要求token级精确的问题

当然了,有一些问题需要token级别的精确度。
比如说生成一个json格式的文本,
错了一个token,就不符合json了。

这种情况其实不是本文要讨论的高层语义问题了。

上面temperature>1.8的时候可能也是因为LLM原始生成的字节流无法正确进行UTF8解码,所以OpenAI在尝试反复的重试生成,但是一直是没有成功的,所以是没有办法返回的。

但是这个也只是我的猜测。

不过目前openai的token切分确实并没有考虑到汉字边界,
当引入的随机性过于大的时候确实是有可能破坏utf8编码要求的可能性。

题外话 - 更大的temperature

简单讨论一下当引入的随机性过大时候的现象。

直观想象就能够哦知道,LLM对于token随机性的兜底是有限度的,
超过了某个限度,结果就可能会变得很糟糕的。

上面的gpt-4在更高的temperature下是无法返回结果的,
所以只能够修改使用gpt-3.5-turbo:

prompt: 请换一种方式表达下面这个意思:这个事情很困难。

以下是gpt-3.5-turbo的20次回答,temperature=1.9,回答具有随机性,仅供参考。

难度系统非常高

这件事十分具有挑战的难度。

这真是一个艰难的难题。

这件事情非常具有挑战性。

这件事情非常棘手。

这个任务很棘手。

这是一个艰巨的挑战。

这就问难对处。

此事措态十 “拗角透棘/Tú jiǎ tòu jiá” - There are many thorns interwoven within this issue making it difficult to accomplish.

这对所涉及者来说颇具挑战性。

这个事情有一定难度。

这个问题非常具有挑战性。

这是一项挑战性任务。

这个问题非常具挑战性/不容易解决。

这毫不容易。

这是一个艰难的问答。

这件事十分具有挑战性。

这是一个异常具有挑战性的事情。

This situation poses considerable challenges.

这几乎是个愚人所难的任务。

可见其中的一些结果已经开始出现了问题。

不过仍然是跟要求有关的。

当temperature提高到了2的时候,gpt-3.5-turbo也难以返回结果了。

token层面策略失效的影响和语义层面策略的思考

从上面的例子中,我们已经看到了,对于token层面和语义层面的巨大gap,
这让我们反思“之前大家习惯的token层面的策略是否在语义层面还有效”。

单就从比较哪个文本的语义可能性更大的角度,
单纯的计算token序列的概率大小是否是合适的近似就是个问题。

我对此(这个方法是合适的近似)是很怀疑的。

同样的,在LLM的Context Window与短期发展展望中我提到的NBCE方案
只是在最后token层面进行多context融合,
这个方法是否能够有效解决语义层面的各种信息融合也让我怀疑。

目前的LLM的文本生成策略(decode)也都是基于token的,
人类如果不调用LLM就几乎没有语义级的处理手段,
我们能够让LLM重新生成一个回答,
但是没有办法控制的是,生成一个同样的语义但是措辞不同的回答,
还是生成了一个另外语义的回答。

也许,我们应该尝试设计一种“有语义层面感知,以及能够在多个语义输出结果之间进行选择”的decode策略。

我目前对于token级别的策略,在语义层面是否还很有效,是保持默认怀疑态度的。

我目前也没有看到什么好的(不依赖LLM的)语义策略架构方式,
来完善LLM自己。

希望我们或者人类,未来在这方面能够有好的答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值