昨天我在群里发消息,打了“晚上吃啥”,还没打完,输入法就已经把“要不点外卖”推到候选栏第一位了。
说实话有点吓人。它怎么知道我要说这句话?我又没告诉它我懒。
这件事背后站着的东西,叫自然语言处理。英文是Natural Language Processing,圈内人一般简称NLP。听起来特别高大上对吧?但你每天可能已经用了上百次,只是没意识到而已。
它不是你想象的那种“理解”
先说一个特别容易跑偏的地方。
很多人以为,机器“懂”人话,就像我们读小说那样,脑子里会浮现画面和情绪。不是的。完全不是。
机器看到的“晚上吃啥”这几个字,首先会被拆成一堆小小的碎片。比如“晚”“上”“吃”“啥”……这个过程叫分词,中文里尤其麻烦。因为英文单词之间有空格,中文没有。“南京市长江大桥”这句话,机器可能切成“南京市/长江大桥”,也可能切成“南京/市长/江大桥”。差一点,意思就飞了。
切完之后,每个词会被转成一串数字。就是我们常说的“向量”。你可以把它想象成给每个词发一张坐标卡,意思相近的词,坐标就靠得近。比如“开心”和“高兴”的坐标几乎挨着,而“开心”和“桌子”就离得很远。
然后机器拿着这些数字,去做概率计算。“晚上吃啥”后面接“要不点外卖”的概率,可能比接“要不做个番茄炒蛋”高出那么一点。就靠这一点,输入法把你的心思给猜了。
所以你看,它本质上是在做一场非常庞大的填空题。给它前文,让它猜后文。就这么朴素。

那些年我们被它气到的瞬间

知道它是在“猜”之后,很多事情就说得通了。
比如你问语音助手“今天天气怎么样”,它给你播了一条新闻。不是它蠢,是它把“天气”这个词听成了别的音,然后顺着错误的输入一路算下去了。输入错了,后面全乱套。
再比如翻译的时候,你把“干货”翻成英文,翻出来的是“dry goods”。字面意思倒是对的,干……货……可谁都知道咱们说的“干货”是指有用的、扎实的内容。机器哪知道这些弯弯绕绕,它只知道这个词在字面上长什么样。
还有个挺经典的段子。顾客在餐厅说“这菜太咸了”,翻译软件翻给外国服务员看,对方点点头,给了他一杯水——因为软件理解的是“咸”这个味道,而不是“我不满意”这个态度。
对吧?这就是问题所在。人类说话,一半意思在字面上,另一半飘在语气、场景和潜台词里。机器目前主要抓的是字面那一半。
那为什么有时候又觉得它特别神?
因为这些年它确实进步了很多。
大概十来年前,机器翻译还经常闹笑话。现在呢?你拿手机拍一份外文菜单,翻译出来大致能看懂。你在国外问路,语音翻译也能帮你应付。这背后是模型读过的文本量,从百万级别涨到了千万甚至亿级别。读得多,见得广,猜得就准。
还有一个变化是预训练加微调这套玩法。先用海量文本让它泛读,再拿特定任务的数据让它精读。就像一个人先广泛涉猎各种书,再专门去学一个手艺,上手会快很多。
所以今天你让它写个请假条、改个病句、把一段话缩成三句,它通常表现得还行。但你对它说一句反话,它可能就当真了。

说到底,它在靠近,但还没到
自然语言处理这几年确实让人眼前一亮。它在搜索、输入法、翻译、客服、语音助手这些地方,已经钻进了我们日常的缝隙里。你打个字、说句话、搜个东西,背后都有它在跑。
但它跟人还是不一样。人的理解是带体温的。你听到“我妈今天出院了”,你会知道该高兴还是该追问。机器听到这句话,可能只是提取出“出院”这个事件,然后问你:“需要帮你预约下次复诊吗?”
这就是差别。它做得越来越像,但还差那么一口气。
不过话说回来,它做它擅长的,我们做我们擅长的。它快速处理海量文本,我们负责品味弦外之音。这个分工,目前看还算合理。
下次你打字的时候,看着候选栏里那几个词,可以稍微留个心。那是自然语言处理在你眼皮底下干活呢。它不神秘,也不万能。就是一堆概率,加上比我们快得多的计算速度。
而已。