
事情是这样的。
那天晚上我躺在沙发上刷手机,老婆突然从厨房探出头来问我:"你们公司天天搞的那个NLP,到底是干啥的?"
我愣了一下。说实话,这问题要是同事问我,我能balabala讲两个小时。但面对我老婆——一个对电脑的认知还停留在"能上网就行"的人——我突然不知道从何说起了。
"就是……让电脑能听懂人话。"我试图用一句话糊弄过去。
她不依不饶:"什么叫听懂人话?我跟Siri说话它不是也能回我吗?"
得,这天没法聊了。我放下手机,拍拍沙发示意她坐过来:"行,今天我给你好好讲讲。"
"你知道电脑最大的问题是什么吗?"我问她。
"卡?"
"不是。是它其实特别傻。"
她显然不信:"傻?它能算那么复杂的数学题,能下棋赢世界冠军,还傻?"
我点点头:"对,它算数确实厉害,但它完全不懂人话。你想啊,在电脑眼里,所有东西都是0和1。什么'我爱你'、'今天天气真好',对它来说就是一串乱码。"
"那它怎么回复我消息的?"
"这就是NLP要解决的问题了。"我喝了口水,组织了一下语言,"NLP全称是Natural Language Processing,翻译过来就是自然语言处理。你可以把它理解成——教电脑学人话的一门技术。"
老婆若有所思地点点头。
我继续说:"你想啊,我们人类从小就在学说话。妈妈指着苹果告诉你'这是苹果',你慢慢就知道红红的、圆圆的、能吃的那个东西叫苹果。但电脑没有妈妈教它,它也没有眼睛、没有嘴巴、没有任何感官,它只认识0和1。"
"那怎么办?"
"所以就需要NLP这个'翻译官',帮电脑把人类的语言翻译成它能理解的形式,然后再把它想表达的东西翻译成人话回复给你。"

老婆好像有点明白了,但又好像没完全明白。这很正常,因为还有个关键问题没说——电脑到底是怎么"学人话"的?
"我给你举个例子。"我说,"比如你对手机说了一句:'今天中午吃什么'。这句话到了电脑那里,它首先要做的事情是什么?"
"听懂?"
"不,它第一步是——切词。"
"切词?"她一脸懵。
我解释道:"对,就像你切菜一样,要把一整句话切成一个一个的词。比如'今天中午吃什么',切完就变成了'今天'、'中午'、'吃'、'什么'。"
"这有什么难的?"
"对你来说不难,但对电脑来说可难了。"我强调,"你想想,中文跟英文不一样。英文单词之间有空格隔开,一眼就能看出来哪个是哪个。但中文呢?全部连在一起,密密麻麻的。"
我举了个例子:"比如'我喜欢下雨天'这句话,你怎么切?"
老婆想了想:"我、喜欢、下雨天?"
"可以。但电脑可能会切成:我、喜欢、下、雨天。甚至更离谱的:我、喜、欢下、雨、天。"
她笑了:"那不就闹笑话了?"
"对啊,所以分词是NLP的第一步,也是很关键的一步。如果这一步都切错了,后面全白搭。"
我又补充道:"而且中文还有很多麻烦事。比如'南京市长江大桥',你说应该怎么切?"
老婆想了半天:"南京市、长江大桥?"
"也可以是'南京市长、江大桥'——假设有个人叫江大桥的话。"
"哈哈哈哈哈!"她被逗笑了。
"这就是中文分词的难点,同样一个句子,不同的切法意思完全不一样。电脑必须结合上下文、语法规则、甚至常识来判断怎么切才对。"
老婆听到这里,问了一个很关键的问题:"好,就算电脑把词切对了,然后呢?它怎么知道'苹果'是能吃的水果,不是那个手机牌子?"
"问得好!"我竖起大拇指,"这就涉及到下一个概念了——词向量。"
"词向量?听着好高级。"
"其实一点都不高级,我给你打个比方。"
我站起来,走到书架旁边:"你看咱家这个书架,上面的书是不是分类摆放的?"
她点头:"对,小说放一块,工具书放一块,你那些乱七八糟的技术书放一块。"
"那我问你,如果我让你找一本'做菜相关'的书,你会去哪个区域找?"
"肯定去厨房那边的架子找啊,不会来你这个技术区找。"
"对!"我有点兴奋,"你之所以知道去哪里找,是因为你心里有一张'地图'——你知道什么类型的书放在什么位置。词向量也是这个意思。"
我继续解释:"电脑没法像我们一样'理解'词语的意思,但它可以给每个词分配一个'坐标'。想象一个巨大的图书馆,每个词都有一个专属的位置。意思相近的词,位置就靠得近;意思不相关的词,位置就离得远。"
"比如说?"
"比如'国王'和'王后'这两个词,在电脑的'地图'上就会靠得很近,因为它们都跟皇室有关。但'国王'和'香蕉'呢?可能隔了十万八千里。"
老婆恍然大悟:"哦!就是说电脑通过位置来判断词和词之间的关系?"
"差不多是这个意思。"

"那这个'位置'是谁定的?程序员一个一个手动输进去的?"老婆继续追问。
"那不得累死?中文光常用字就几千个,词语更是成千上万。"我摇摇头,"词向量是机器自己学出来的。"
"自己学?"
"对。你想想你是怎么学会一个新词的?"
她想了想:"别人说,或者看书看到的?"
"对,你是通过这个词出现的场景来理解它的意思。比如'榴莲'这个词,你可能在'水果'、'好吃'、'臭'这些词旁边见过它,慢慢就知道榴莲是一种有特殊气味的水果。"
"是这样的。"
"电脑也差不多。我们给它喂大量的文章、书籍、网页内容,让它去分析每个词经常和哪些词一起出现。'榴莲'如果总是和'水果'、'泰国'、'气味'一起出现,电脑就知道这几个词应该有某种关联,在'地图'上就会把它们放得比较近。"
"所以电脑是靠'混脸熟'来学词语的?"老婆的比喻让我乐了。
"哈哈,可以这么理解!就是看一个词它平时跟谁玩得比较多,那它们大概率就是一伙的。"
说到这里,其实已经把核心概念解释得差不多了。但还有一个词我觉得有必要提一下——词嵌入。
"词嵌入是什么?"老婆问。
"其实跟词向量是一个意思,只是叫法不同。"我解释,"你可以把词嵌入理解成——给每个词发一张多维度的'身份证'。"
"什么叫多维度?"
我想了想怎么举例:"比如说形容一个人,我们可以从很多维度来描述:身高、体重、年龄、性别、学历、收入……对吧?"
"对。"
"词嵌入也是这样。每个词不是简单地被贴一个标签,而是用很多个维度来描述。比如'苹果'这个词,可能有这样的信息:是水果吗?能吃吗?是红色吗?是圆的吗?在超市能买到吗?……"
"但电脑不会用'是'或'不是'来回答,"我补充道,"它会用数字。比如'是水果'这个维度,苹果可能是0.95,意思是非常像水果;而'是电子产品'这个维度,苹果可能是0.3,因为有个手机品牌也叫苹果嘛。"
老婆点点头:"所以词嵌入就是用一堆数字来描述一个词?"
"没错!可以这么理解。这一堆数字组合在一起,就变成了这个词在电脑眼里的'长相'。每个词都有自己独特的数字组合,就像每个人都有自己独特的长相一样。"

聊到这里,老婆突然问了一个很实际的问题:"那这些东西学了有什么用?跟我有关系吗?"
"当然有关系了,你每天都在用!"
我掰着指头给她数:"你用的手机输入法,知道你打'nh'是想输入'你好';你发语音给我,微信能自动转成文字;你在淘宝搜'显瘦 连衣裙',它知道你想买什么;你问小爱同学'明天下雨吗',它能听懂并给你回答……"
"这些都是NLP?"
"对,这些背后都离不开NLP。分词、词向量这些技术,就是让电脑能理解你说的话的基础。"
我又举了个例子:"你知道为什么现在的翻译软件比以前好用那么多吗?以前的翻译是一个词一个词硬翻,经常闹笑话。现在的翻译能理解整句话的意思,甚至能根据语境调整用词。这都是因为NLP技术进步了。"
老婆似懂非懂地点点头:"那ChatGPT呢?也是这个技术?"
"ChatGPT更厉害,它是NLP发展到一定阶段的产物。"我说,"但归根结底,它能跟你聊天、写文章、回答问题,都是建立在'理解人类语言'这个基础上的。而这个基础,就是我们今天聊的这些——分词、词向量、词嵌入。"
那天晚上我们聊了很久,老婆偶尔点头,偶尔发问,偶尔露出"我好像听懂了但又没完全懂"的表情。
最后她说了一句让我印象深刻的话:"原来让电脑听懂人话这么难。我还以为……就是输进去就行了呢。"
是啊,我们习惯了各种智能助手、智能翻译、智能推荐,却很少想过这背后需要多少技术积累。人类学说话,从出生开始,花了好几年。让电脑学会"说人话",科学家们花了几十年,而且还在继续探索。
后来老婆刷手机的时候,偶尔会突然冒出一句:"这个输入法推荐的词挺准的,是不是就是你说的那个词向量?"
我笑着说:"差不多吧。"
能让一个非技术人员对NLP产生兴趣,这大概是那次聊天最大的收获。毕竟,最好的科普,不是把简单的事情说复杂,而是把复杂的事情说简单。
而NLP的终极目标,不也是这样吗?
——让人和机器之间的交流,变得像人和人聊天一样简单自然。
