翻书接词的小游戏,离聊天 AI 有多远?
语言模型:从香农的翻书接词到大语言模型
1948 年,香农没用电脑,只用一本书玩了个游戏:随便翻一页找个词,再翻到别处找到它,记下后面跟着的那个词,一直接下去。我们在课上也玩了,接出来的一串,挨着的两三个词都像话,连起来却读不通。换个玩法,把前面的词都带上再找,会怎样?今天的聊天 AI,玩的也是这一招。
上一篇讲到,1950 年,图灵把"机器能思考吗"换成了一个聊天游戏。今天,很多人真的在跟聊天 AI 说话。问它"周末想和朋友出去玩,天气预报说会下雨,怎么安排好?",它很快写出一长段建议,读起来像一位懂得很多的专家。
可这一长段建议,没有人事先写好。上一篇还讲过,聊天 AI 背后最重要的部分叫大语言模型(英文 Large Language Model,简称 LLM),它从非常多的文字里学出了"后面通常接什么"。这一篇要看的,是它到底怎样一个字一个字把话说出来。
这件事,可以先从一本书、一个翻书的小游戏看起。
翻一本书,试试"后面接什么"
1948 年,美国贝尔实验室的数学家、工程师克劳德·香农做了一个实验。他想让人看看:只按"后面通常接什么"来挑词,接出来的文字能有多像英文。
他没有用电脑,用的是一本书。先随便翻开一页,挑一个词记下来。再翻到另一页往下读,读到这个词,就把紧跟在它后面的那个词记下来。然后拿这个新词再翻、再找、再记。书里某个词后面越常跟着哪个词,这样翻找时就越容易碰上它。
我们也这样玩过。大家从手边的书里随便翻,找一个词,再找它后面跟的词,记下来,接着往下接。香农用这个办法接出来的英文,开头是这样的:
THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THEREFORE ANOTHER METHOD FOR THE LETTERS……
翻成中文,大意是"头和在正面攻击一位英国作家,这一点的性格因此是另一种方法,为了那些字母……"。香农在论文里指出,里面连着的四五个词,都能放进正常的句子;可整段读下来,不知道在说什么。
王笑鱼就问了同一件事:这一串词,连起来真的是人能说出来的话吗?大家发现,一两个词看着像,凑成一段就不像了。
问题出在哪?每接一个词,只看了前面 1 个词,就像只看见"带",分不出该接伞还是笔。
换一种玩法:把前面的话都带上
香农也写到,再多看一个词会很有意思,可工作量会变得极大:要对上的词越多,书里一模一样的一段就越难找。
我们换了个玩法试。第一次只找 said 后面的词,得到 fish;这一次不只找 fish,而是找"said fish"后面跟着的词,得到 eat;再找"said fish eat"后面的词……
原来只看最后一个词,现在把前面的话都带上。这一换,感觉完全不一样了:只看一个词时,后面能接的东西很多、很杂;把前面的话都带上,能接的范围就窄了,接出来的更像人话。前面的话变了,后面能接的也跟着变。
翻书这个办法太慢:眼睛在书页上找字,比电脑扫描慢多了。我们干脆改成全班用嘴接。
先起个头:"我的书包……"
有人接:"很。"
有人接:"小。"
有人接:"又。"
有人接:"很。"
接出来的句子,有时通,有时怪,大家一边接一边笑。这种玩法,有了个名字:迷你语言模型(mini language model)——每次接龙,都把前面的话全带上。
还有一条路:把规则写进去
玩着玩着,有人提出了另一个办法:能不能先确定主谓宾,按语法把句子搭起来,再接?这是另一条路——不靠接龙,靠人把规则写进去。先看看它走了多远。
早先做机器翻译,人们就是想把语法规则一条条写进去,让电脑按规则把一种语言翻成另一种,这一路叫规则派。1954 年,美国乔治城大学和 IBM 一起做了个演示:词典里只有 250 个词,语法规则只有 6 条,翻了六十多句俄语,用的还多是挑好的短句。十几年后,有人做了一次评估,结论是:这样翻,离真正能用还很远。
后来,统计派换了个办法:不给电脑写规则,而是给它看大量现成的翻译,让它自己从里面找规律。1990 年,IBM 的研究者用了大约 1 亿词的英文和对应的法文(加拿大议会记录),让程序从这些例子里统计:什么样的词后面常接什么样的词。他们用来算"下一个词"的语言模型,也是看前一个词猜下一个,和翻书接词一个道理。
一句话:有的东西靠人写规则教,有的东西靠从例子里学。 大语言模型走的是后一条路。
从一本书,到海量文字
香农翻的是一本书。今天的大语言模型,看的是多得多的文字。
它不是人一页页翻,而是靠训练:拿一段真实文字,遮住后面,让它猜下一个字;猜完对照原文,猜错了就调整一点。练得越多,它对“后面通常接什么”就越算越准。
它每接一步,做的还是同一件事:看着前面全部的文字,算出下一个字各种接法的可能性,再挑一个接上。 接上的字,又成了下一次的前文。
每一步只接 1 个字,刚接上的字也成了下一步的前文。大语言模型实际每一步接的单位叫词元,有时是一个字,有时是几个字,有时只是半个词。
下一个字是某个字的可能性有多大,叫作概率。按概率挑,有点像抽签:"伞"的签放得多,"雨"的签放得少,"笔"的签几乎没有。多数时候抽到"伞",偶尔也会抽到"雨"。所以同一个问题问两次,回答可能不一样;不过抽中的几乎总是说得通的接法。
要让"伞"的概率最大,模型得从文字里掌握:下雨会把人淋湿,伞能挡雨。这已经不只是哪个字常跟着哪个字,而是关于世界的知识了。人们写下的文字里,记着数不清的这类事情。这些知识,就体现在它算出的概率里。 它没有淋过雨,下雨和伞的关系全部来自文字。
不过,概率大不等于一定对。文字里本来就有写错的地方,模型也可能把关系学偏,于是会一本正经地接出错话。读起来像专家,不能证明说得对。
总结与回顾
翻书接词的小游戏,和今天的聊天 AI,做的是同一件事:看着前文,按概率挑下一个,接上,再继续。
离得远,远在两处:
| 年份 | 谁 | 每一步看多少前文 | 概率从哪里来 |
|---|---|---|---|
| 1948 年 | 香农 | 前面 1 个词 | 翻一本书 |
| 今天 | 大语言模型(LLM) | 前面很长一段文字 | 从海量文字里学出来 |
只看前面 1 个词,挨着的两三个词像话,整段却乱;前文带得越多,接出来越像人话。中间,人们也试过把规则写进去,最后走通的是从例子里学:一本书里的规律有限,海量文字里,有语言的规律,也有关于世界的知识。
大语言模型,是用海量文字训练出来、专门算下一个字概率的语言模型。 接龙的动作一直很简单,像专家一样的回答,靠的是每一步的概率。概率大,只是说这一步更可能被挑中,不等于一定对。
下次用聊天 AI 时,你可以请它只接一个字:"外面下雨了,出门记得带"。再把"下雨了"换成别的事,看看它接的字会不会跟着变。