中文分词的前世今生

-- 从“切哪儿都头疼”到“各语言一刀切”

说起自然语言处理(NLP)里的中文分词往事,真是让人感慨。曾经,“这串汉字哪儿切一刀才对”是个让学者们抓耳挠腮的大难题。如今看看大模型的处理方式,这事儿咋就这么轻松化解了呢?从“切哪儿都不对”到“各语言一刀切”,这背后的故事,值得我们聊一聊。

分词的“切刀焦虑症”:哪儿切都有坑

中文书面语言单词之间没空格,汉字们挤在一起,词概念的边界全靠猜。比如“南京市长江大桥”,你切成“南京市/长江大桥”,就是南京的一座大桥;可要是切成“南京/市长/江大桥”,就变成了一个名叫江大桥的南京市长,所指桥与人完全两个不同实体。再比如“研究生命真苦”,切成“研究/生命/真苦”是说生命科研的艰辛,切成“研究生/命/真苦”就成了调侃苦逼学生的说法了。还有“乒乓球拍卖会”,是“乒乓球/拍卖会”(卖乒乓球)还是“乒乓/球拍/卖会”(球拍交易会?)。随便想想,脑子里都能冒出一堆让人捧腹的分词纠缠。

过去为了治这“边界歧义”的毛病,学者们使出了浑身解数。词典分词靠查大词典,统计模型靠大数据猜,句法规则还得讲点句内关系,可不管多高明的招数,总有奇葩句子跳出来给你一记“回马枪”。你刚觉得“这分法靠谱”,下一秒就有人甩个更大的语境出来,说明你切得离谱。说到底,最终决定分词合理的是篇章语义,比句法分析需要更长的上下文,传统NLP根本搞不定。于是,“中文真是太难了”的传说就这么传开了,连带着各种分词笑话成了圈内人茶余饭后的谈资。

从“死磕边界”到分词的彻底解放

大模型根本性解决了分词问题不仅仅是个理论声称,也是众所周知的现实了。只要模型不是那种小打小闹的“迷你版”,而是个神经层数多、脑容量大的“狠角色”,分词方式的影响就跟挠痒痒似的,基本可以忽略。你用单个汉字分,行;用词组分,也行;甚至突发奇想,把汉字拆成笔画或者像素点,理论上也能玩得转——前提是你不怕电脑跑得满头大汗。关键是,句子里的信息一点没丢,分词只是把大块肉剁碎方便下锅,味道还是那个味道。以前的各种分词纠结,词典的、词法的、句法的、逻辑语义的等等矛盾,现在都成了伪问题。“南京市长江大桥”到底是桥还是市长?“研究生命真苦”是说科研还是叹人生?这些纠结压根不用人操心,自注意力机制早就把更大的篇章上下文摸得透透的,分分钟给你定位清楚。初始切分的所谓“错误”,经不起上下文语义的相互“注意”和渗透。再乱的切词,模型也能从一团乱麻里理出头绪,不像传统NLP,一步错就可能步步错。

大模型登场:切哪儿?

Transformer带着“自注意力机制”上场,告诉大家:切哪儿不那么关键了!单个汉字行,词典分词也行,甚至脑洞大到把汉字拆成像素点——只要算力扛得住,随你怎么玩儿。但更牛的还在后头:效率最高的切法压根儿不纠结逻辑,也不盯着语义,而是直接祭出普适的数据驱动的“信息压缩”大法。

啥叫信息压缩?简单说,就是把语言当成一串数据,用最经济的方式“打包”,让信息量最大、冗余最少。比如,常见的词组“长江大桥”老一块儿出现,那就打包成一个单位;“南京市”也常连着,那就别拆开。而像“的”“了”这种高频小零碎,就单拎出来。这样切,既不费脑子,也不挑语言,中文、英文、日文都能用。Transformer再一挥“注意力魔法棒”,每个元素都能跟全篇其他元素充分勾搭,篇章上下文信息一点不漏,包括发生远距离关系的元素。模型就像个超级聪明的厨师,不管你把食材切多细、多粗,它都能自适应地炒出一盘好菜。只要模型够大、层数够深,最后端上桌的语义味道都差不多。无论系统选择了切成“南京/市长/江大桥”还是“南京市/长江大桥”?别慌,模型最终自己会搞明白到底指的是人、还是桥。

其实大模型像BERT用的WordPiece、GPT玩的BPE(Byte Pair Encoding),都是信息压缩法。这些方法不问“这词啥意思”,只看数据中“哪些组合出现多、切开浪费少”,然后一刀下去,干净利落。结果呢?不管句子多怪,模型都能自适应调整,语义照样抓得准。

数据驱动的切法最经济

拿最流行的GPT来说。GPT(Generative Pre-trained Transformer)是OpenAI搞出来的,初代在2018年,后面GPT-2、GPT-3一路迭代,都用的是BPE通用切词法。BPE本来是个压缩算法,1994年Philip Gage提出,后来被GPT拿来分词。GPT用的是“byte-level BPE”,直接把文本转成UTF-8字节流(在 UTF-8 编码中,一个汉字通常由 3 个字节 表示,例如:“你” 的 UTF-8 编码是 e4 bd a0,占 3 个字节),再按频率合并字节对。这样有个好处:基础词汇表只有256个字节(涵盖所有可能的UTF-8字符),然后靠频率合并子字符串,词汇表可以视数据规模扩展到10万到百万。比如“人工智能”,如果语料里“人工智能”整体出现频率很高,可能整个是个token;如果“人工”和“智能”分开更常见,就拆成“人工”和“智能”。再比如“大数据”,可能直接是“大数据”,也可能切成“大”和“数据”(取决于语料统计)。词表固定以后,切词就是一个机械的最大匹配(maximum match)查词典的操作,与传统NLP中最简单的分词法一样。

那問題來了:这种简单粗暴的tokenizer 是不是會切錯?答案其實是——會,但不怕。為什麼?因為:

一、tokenizer 不需要基于語義,分出的词也不必是意义完整的语素,它的任務只是把文字序列分解为token序列。

二、真正理解語境和篇章的是後面的 Transformer 模型,尤其是其中的自注意力(self-attention)机制,它负责一步步融合上下文窗口中所有相关tokens 之间的相互影响和关系,包括远距离依赖关系。我们知道,只有篇章才能真正消解歧义,而 self-attention 就是解碼歧義的大杀器。换句话说,模型通过注意力机制透過上下文窗口中相关的「左右文」,把切分错了的序列重新「黏合」成語義上的整體,反映在每个token的内部向量表示的不断更新上。這種「上下文重建語義」的深度理解能力,是傳統 NLP无法企及的,因為以前的句法语义分析建立在固定的分词基础之上——一旦切錯就难以挽回。而現在是「先切碎、再讓模型自己組裝」,語義成了 self-attention 經過訓練後自然學出的關係結構。

结语:注意力魔法的“降维打击”

大模型这一波操作,把中文分词的“边界歧义”难题踩在脚下,告诉我们:语言这玩意儿,核心在上下文,边界只是个铺垫。自注意力机制就像个魔法棒,轻轻一挥,不管你是切得细如发丝,还是粗如大饼,模型都能笑眯眯地说:“没事儿,我自己会调整。” 效率最好的分词法也不是基于逻辑或语义,而是以信息压缩为基础的通用切分,适用于包括中文在内的各种语言。

 

【相关】

发布者

立委

立委博士,出门问问大模型团队前工程副总裁,聚焦大模型及其AIGC应用。Netbase前首席科学家10年,期间指挥研发了18种语言的理解和应用系统,鲁棒、线速,scale up to 社会媒体大数据,语义落地到舆情挖掘产品,成为美国NLP工业落地的领跑者。Cymfony前研发副总八年,曾荣获第一届问答系统第一名(TREC-8 QA Track),并赢得17个小企业创新研究的信息抽取项目(PI for 17 SBIRs)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理