当年我刚开始接触自然语言处理的时候最先刷完的成套视频就是某高校计算机系录制的《自然语言处理》课程主讲老师把绪论部分讲得特别扎实。最近因为要带几个新人入门我又把第一讲自然语言处理概论重新看了一遍顺手整理成这份笔记。这一讲没有堆砌公式也没有急着讲模型结构而是先把自然语言处理NLP这门学科的任务边界、技术历史和核心难点讲透了。这篇文章会按我自己的理解重新组织顺序先讲NLP被反复误解的定义再梳理学科全景接着单独说中文NLP的特殊难点然后聊技术路线变化最后补充一点课后学习建议。适合刚接触NLP的同学也适合工作一段时间后想回来补基础的从业者。1. 这一讲到底在给听众建立什么1.1 先画地图再讲细节很多视频课的第一讲都习惯先念一遍课程大纲但这门课的第一讲不是。主讲老师从什么是语言这个朴素问题切入把语言理解成人类思维和交际的编码系统。这听起来很基础但恰恰是NLP一切工作的出发点。代码和数据本质上都是符号而自然语言是人类使用的最复杂的符号系统机器想处理它就必须先弄清楚这套系统怎么组织、怎么分层、怎么产生歧义。我现在做工程多年越来越觉得这种地图感才是这门概论最值钱的部分。很多人接到文本分类任务就直接拉一个预训练模型来微调分不出来就换更大的模型完全不看数据本身的规律。这种盲调做法不是完全不行但遇到领域迁移和badcase时几乎无法定位问题。有了层级化认识之后你会自然地去想这个错误是分词阶段引入的还是标签标准本身就矛盾是缺乏上下文还是语义角色标错了每一种可能性都对应完全不同的修法。1.2 概念不是用来背的是用来提问的我第一次看这节课时心里想分词、词性标注、命名实体识别这些名词我早就知道了有什么好学的后来真正带队做项目才明白越是简单的概念越容易被自己骗过去。比如中文里的词到底怎么划自然语言处理是一个词还是四个词如果分词结果不同下游模型理解会差多远这些问题在概论里被明确提出来就是逼着你去思考那些平时根本不会注意的定义。它是给后续全部章节埋下的钩子而不是给你一张词汇表。1.3 适合什么人回头看如果只推荐一类人来反复看这讲我的答案不是纯新手而是已经做过一两个NLP项目的人。新手看概论往往因为缺少亲身踩坑的经历很容易产生觉得懂了的错觉有项目经验的人回来看才会真正意识到当年那些badcase的根源早就被框定在这一讲里。所以这篇笔记也不是简单的课程复述更像是把我工作几年后遇到的实际问题和课程里的理论框架做一次对应。2. 自然语言处理到底在解决什么问题定义、目标与边界2.1 让机器懂人话这句口号为什么不够用NLP最通俗的定义是让计算机理解、处理和生成人类语言。问题在于理解这个词实在太模糊了。机器把你好替换成Hello算不算理解大部分人不服气可当一个系统能准确回答明天带伞吗大家又会觉得它好像真的懂了。课程在这里给出了一个重要的提醒NLP不是一个单一任务而是一族任务。理解不是一锤子买卖它由很多层子能力叠加而成需要被拆解成可定义、可评测的问题去逐步逼近。这个观点放在今天的大模型时代尤其值得回味。现在很多人觉得对话模型已经理解了人类意图但只要你把问题换一个没见过的话术表达答案可能就完全跑偏。这说明模型展示的更多是模式匹配能力而不是真正完整的理解。概论没有去争论哲学意义上的机器能不能理解而是务实地说我们先把能定义、能评测的理解子问题一个个做扎实。2.2 与人工智能、计算语言学的关系第一讲把NLP放在了一个交叉点上一边是计算语言学研究语言自身的规律另一边是人工智能关心推理和知识表达还有一翼是数学和计算机科学提供建模和工程手段。只用其中任何一边都不够。只懂语言学会把规则写得非常精美但没法扩展只懂机器学习会迷恋模型结构却看不到语言现象背后的结构。工作之后很多团队复盘项目失败原因最后都能追溯到团队知识结构太单一这个问题上。做情感分析的人只知道调BERT遇到讽刺就不会处理了做知识图谱的人以为拉出一个实体关系图就万事大吉却不知道语言的歧义让实体边界本身就站不住。可见概论里一嘴带过的定位问题实在值得多想一层。2.3 理解一句话到底需要几步光说理解很难讲清课程用例子把它具体化了。比如小明在河边跑这里的河可以是河流也可以是河岸小明吃完了苹果要理解谁吃、吃的是什么而你可真厉害到底是表扬还是讽刺得看语气和场合。为了走出这重重歧义NLP设计了一条清晰的流水线分词、词性标注、句法分析、语义角色标注、指代消解最后到篇章理解和语用判断。每一步的结果都是下一步的输入任何一个环节出错都可能让整句话的理解偏离。这种层层依赖、层层歧义的结构让自然语言处理比其他人工智能子领域更强调严谨的评测和误差分析。你没法用一个粗粒度的准确率掩盖所有问题必须逐层观察错误类型才能知道系统到底在哪里开始跑偏。3. 从词法到语用第一讲铺开的层级全景3.1 词法层看似基础其实最琐碎词法分析的任务是把连续文本切成词给每个词标上词性再把专有名词抽出来。这个层面有很多反直觉的地方中文没有空格必须先想办法从字符流里找回词的边界词性又要处理大量兼类词工作既是名词也是动词领导既指人也是一种行为。有些初学同学觉得分词工具都这么成熟了再花时间学原理没有意义。但到了垂直领域通用分词器对行业词的切法往往让人头疼。医疗文本里一个发烧咳嗽待查不同切分方式会直接改变下游实体抽取的结果。词法层像一座楼的地基看起来不起眼出了问题整栋楼都晃。3.2 句法层词与词的结构关系句法分析要回答两个问题词是怎么组成短语的句子内部的依存关系是什么。前者叫短语结构分析后者叫依存句法分析。比如这只漂亮的蝴蝶是一个名词短语内部还有一个形容词修饰关系我吃苹果里我是施事苹果是受事动词吃支配着它们。句法层最大的敌人还是歧义。我看了这本书很薄这句既可以是我看了书我注意到书很薄也可以是我看了这本很薄的书。句法结构不同表达的意思就不同。很多现代模型确实不显式输出句法树了但这不表示句法问题消失了它只是被压缩进了参数和注意力模式里。遇到长难句、嵌套从句的时候模型照样会露出句法能力不足的马脚。3.3 语义层与语用层字面之上还有意图语义层关心的是句子表达的内容谁对谁做了什么、事件发生在什么时间、指代词到底指什么。语用层则要再进一步判断说话人想达到什么目的话语在具体场景中起什么功能。课程特别提到传统处理手段能较好覆盖词法、句法和一部分语义问题但语用理解至今是开放难题。我用一张表把这四层任务、例子和难点收拢起来方便对照层级典型任务示例核心难点词法分词、词性标注、命名实体识别南京市长江大桥怎么切边界模糊、未登录词句法短语结构分析、依存分析我看这本书很薄的结构结构歧义、长距离依赖语义语义角色标注、指代消解张三说李四骂了他的他指谁指代歧义、隐含信息语用意图识别、情感分析、讽刺识别你可真厉害是褒是贬依赖上下文与常识我在实际做对话系统时最痛的永远是语用层。用户发来一句我这儿有点不舒服意图既可能是向医生求助也可能是向领导请假。词法和句法模型都正常工作但如果不结合场景意图判断就只能靠猜。这让我对概论里语用层是公开难题的判断尤其有共鸣。4. 为什么中文NLP要单独拿出来讲4.1 分词一个字的边界问题中文NLP最直观的差异就是没有空格。英文按空格天然切词中文得自己找词的边界。课程举过研究生/命/科学和研究/生命/科学这种经典例子也讨论过乒乓球拍卖完了这种让人破防的句子。回到现实项目我常年和医疗文本打交道一句患者咳嗽发热待查工具经常切得乱七八糟直接影响后续实体抽取。分词工具在通用领域已经做得不错但到了垂直领域、口语、新媒体文本依然经常翻车。这几年预训练模型兴起后很多人说反正模型用的是字级别字表不需要分词了这个说法只对了一半。字级输入虽然绕开了分词错误但模型需要自己从字符序列里学习词的组合规律数据不够多的时候照样学不明白而且词边界信息对未登录词处理仍有不可替代的辅助作用。4.2 没有形态变化却更依赖语境英文有大小写、时态、单复数这些显式标记能帮助模型快速判断成分。中文主要靠语序和虚词表达语义一个词在不同语境下可以承担完全不同的语法功能。形式标记少了独立词的线索也少了对模型来说其实是更难而不是更简单。比如他吃完了饭和他饭了吃完在可接受度上差别巨大但这种顺序敏感性很难用几条规则概括。中文的省略现象也很普遍对话里吃了没三个字既可能是问句也可能是陈述主语宾语全得靠上下文补回来。课程从语言类型学角度点出了这些差异而不是简单归结为中文比较难要多调参。4.3 语料资源的不对称性英文NLP早期就有大量公开的通用语料和评测集中文的高质量标注数据相对分散而且很多来自新闻语体换到口语或垂直领域性能掉得厉害。第一讲没有止步于抱怨资源稀缺而是引导大家理解语言类型学层面的差异这个视角我当年不懂后来做实际项目才慢慢明白。现在情况确实好多了网上已经有了不少中文开源数据和评测基准但标注口径不统一依然是常态。同一份数据这家按细粒度实体标注那家按粗粒度标注模型训练时换个规范性能就完全没法比。概论当年强调的语料决定任务上限这句话放到今天依然成立。5. 三条技术路线规则、统计与深度学习的碰撞5.1 规则时代语言学家人工写知识早期NLP系统靠人工规则。语言学家把语法知识和词典整理成规则库系统按规则做分析。这套路优点是可解释、可控适合一些封闭领域的小规模处理缺点是写规则的人永远跟不上语言实际使用的复杂度和变化速度一个语言现象没被规则覆盖系统就直接哑火。课程没有全盘否定规则方法。到今天很多信息抽取系统的兜底逻辑仍保留规则模块比如日期识别、金额抽取、证件号码校验这些都是规则发挥优势的场景。规则方法真正的瓶颈不是思路本身而是可扩展性。想清楚这一点你才不会在项目里走向两个极端要么迷信规则要么完全排斥规则。5.2 统计时代让数据说话统计方法兴起的本质是把人工写规律变成从语料中估计规律。这一阶段涌现了大量经典模型n元语言模型、隐马尔可夫模型、最大熵模型、条件随机场等。语言被看成概率分布机器通过大量语料学会哪些词经常一起出现、哪些词性序列更常见。统计方法的贡献是把NLP从实验室推向工程化应用但它的局限也很明显。早期统计模型大多依赖人工设计的浅层特征对复杂句法结构、长距离依赖建模不足。你给模型一个含三个从句的长难句它可能连主语都找不对。不过很多基础结构至今还在用比如序列标注任务里的条件随机场所以第一讲提到这些模型时总是强调后面章节会展开确实不是客套。5.3 深度学习和大语言模型改变了游戏规则深度学习用稠密向量表示词并建模上下文词向量、循环网络、注意力机制把文本分类、机器翻译、阅读理解这些任务的效果整体推高了一大截。而大语言模型的流行进一步打破了先分词、再句法、再语义的显式流水线直接用序列概率去学习语言。它能流利生成文本让人感觉语言理解好像一下子实现了。但模型依然会一本正经地胡说八道产生幻觉、因果颠倒、逻辑断裂。这个时候第一讲里的层级框架反而是最有效的诊断工具模型在生成时到底哪一层出了问题用词法-句法-语义-语用去归因往往能找到比模型不够大具体得多的答案。也正因为如此每一次范式升级都没有把基础问题彻底消灭只是把它们搬到了新的位置。范式核心思路优势主要局限规则方法专家编写规则和词典可控、可解释覆盖率低、维护成本高统计方法从语料中估计概率数据驱动、可扩展依赖浅层特征、结构建模弱深度学习方法端到端学习文本向量表示自动提取特征、效果好数据需求大、解释性差大语言模型大规模预训练加上下文预测泛化能力强、生成流畅幻觉、知识过时、推理不稳6. 看完第一讲我建议你按这个思路继续往下学6.1 先给自己上一道评测紧箍咒概论里一开篇就会接触到准确率、召回率、F1这些评价指标我强烈建议不要把这几页快进过去。任何一个NLP任务第一步不是选模型而是先定义你能接受什么错误。做分类要看每类的召回率差距做序列标注要看实体的边界和类型分别错在哪里做生成任务则要理解自动指标并不能完全反映语义质量。只有把评测想透了后面所有模型实验才不是自嗨。我这些年带人的一个习惯是换模型或加技巧之前一定先跑一个最简单的基线系统用同样的数据、同样的评测脚本跑出基准结果然后把所有改动建立在基准之上。这样每加一个东西都能清楚地看到它到底带来多少收益而不是靠感觉说好像好一点。6.2 树立语料-任务-模型的闭环意识概论里对语料重要性的强调是我当年最不以为意、现在最后悔没早听的部分。自然语言处理的进步从来都是语料、任务定义和模型三者共同演化的。现在很多项目最先遇到的瓶颈不是模型选得不够新而是训练数据质量太差、标签口径不统一。数据里一个明显的标注噪声就可能在训练时被模型当成规律学进去产生莫名其妙的badcase。如果你还在学习阶段建议找一个小而干净的任务练手比如拿一份公开的新闻语料做分词和词性标注亲手把标注格式、数据切分、评测脚本全部跑通一遍。这个过程比看十遍理论都管用。做完之后你会有一种实感原来一个模型效果不佳很多时候真的只是数据本身的问题。6.3 关于课程后续章节的观看建议这套课后面的内容会按分词、词性标注、句法分析、语义分析的顺序逐步加深。我的建议是不要只刷一遍。第一遍跟着课程理解每个任务的目标和难点第二遍重点看公式推导条件随机场、句法分析这些算法一定要自己动手推一遍不推你就永远不知道模型的前向和反向里到底在算什么第三遍回到代码和数据集上把每个模型在真实数据上跑一次比较不同实现的效果差异。当年我草草看过概论就急着去追深度学习基础一直不太牢靠后来补课才把这些内容重新缝起来。现在每次遇到模型在边角案例上丢分我都能顺着这条基础链路很快锁定大致问题范围。别急着追新模型先把语言处理的几层机制吃透后面学任何新技术都会快很多。最后说点私人体会。第一讲最打动我的不是某个具体算法而是老师反复传递的那个观念自然语言是开放的、动态的、充满歧义的处理语言是一项系统工程。这些年做项目每次碰到离谱的badcase再回头看都会觉得当初如果能把这套框架记到骨头里动手时会少很多瞎折腾。这份笔记既是写给你也是写给当年那个急于上手、却不太愿意停下来打基础的我。
阅读完成 · 觉得有帮助?