豆瓣8.8高分神作《数学之美 第三版》之第四章读书笔记,带你了解分词的来龙去脉

1. 为什么要分词?

分词技术的起源,主要源于解决亚洲语言(特别是中文)在自然语言处理(NLP)中遇到的独特挑战。英文作为一种空格分隔的语言,在书面上天然地通过空格来界定单词的边界,这使得英文在狭义的分词层面上的处理相对直接,因为单词的界限已经明确划分。然而,对于中文而言,情况则截然不同。

在中文中,词与词之间没有明显的分隔符,这就给机器理解文本带来了困难。为了解决这个问题,我们需要通过分词技术来告诉机器如何在连续的字符流中识别出有意义的词汇单元。这一操作在中文NLP中显得尤为重要,是后续句法分析、语义理解等高级任务的基础。

但从更广义的视角来看,分词并不仅限于中文。即使在英文中,虽然单词之间有明确的空格分隔,但当我们需要识别有意义的词组或短语时,分词技术同样发挥着关键作用。此外,在处理手写英文或其他非标准字体英文文本时,由于书写风格或字迹模糊等因素,单词之间的界限可能变得不那么清晰,此时分词技术也能发挥重要作用,帮助机器准确地识别出单词和短语。

幸运的是,作者指出,尽管不同语言的分词面临的具体挑战有所不同,但分词算法的基本原理是通用的。这意味着我们可以借鉴中文分词的研究成果和算法设计,来优化其他语言的分词性能。为了更直观地解释分词技术,作者以中文分词为例,来阐述分词的基本原理、常用算法以及在实际应用中的挑战和解决方案。

2. 分词方法之“查字典”

作者以“中国航天官员应邀到美国与太空总署官员开会”为例,分词的结果通常是:“中国/ 航天/ 官员/ 应邀/ 到/ 美国/ 与/ 太空/ 总署/ 官员/ 开会”

早期的分词算法,由北京航空航天大学的梁南元教授提出,被称为“查词典法”,其核心思想是采用“最长匹配”原则。这种方法的基本操作如下:

  1. 从待分词的句子左端开始,取出一个字符,查找它是否能在词典中找到作为词的条目。
  2. 如果不能找到,则将该字符与下一个字符组合成一个二字词,再次在词典中查找。
  3. 如果二字词仍然不在词典中,则继续增加字符,直到形成的词在词典中被找到或者达到预定的最大词长。
  4. 一旦找到匹配的词,就在该词后面划一个分隔符(如“/”),然后继续处理剩余的字符序列,直到整个句子被处理完毕。

以上述中文句子为例:

  • 首先,从“中”字开始,单独的“中”不是词,但“中国”是词典中的词,因此在“国”与“航”之间划一个分隔符。
  • 接着,处理剩下的“航天官员”部分,由于“航天”是词,“官员”也是词,而“航天官”不是,因此在“天”与“官”之间再划一个分隔符。
  • 以此类推,直至整个句子被正确分词。

这种方法在1980年代由哈尔滨工业大学的王晓龙教授进一步理论化,形成了最小词数的分词理论,即句子应被划分为数量尽可能少的词组。尽管这种方法简单且有效,能够解决大部分分词问题,但在面对复杂情况时,如二义性词组和特殊词组时,其效果可能会受到限制。

例如,在分词“发展中国家”时,按照最长匹配原则,可能会得到“发展/ 中国/ 家”的错误结果,而实际上应该是“发展/ 中/ 国家”。同样,在处理“上海大学城书店”时,如果按照最长匹配原则,可能会得到“上海大学/ 城/ 书店”的结果,而理想的分词应该是“上海/ 大学城/ 书店”。

3. 分词方法之“统计模型”

在应对上述分词挑战的过程中,科学家们最初尝试通过定义和应用复杂的语法规则来寻求解决方案。然而,他们很快发现这种方法在处理复杂多变的自然语言时遇到了极大的困难,尤其是在处理如二义性词组和特殊词组等复杂情况时,单纯依赖语法规则的方法显得力不从心(正如我们在上一章的读书笔记中所提及的)。

为了突破这一困境,上世纪90年代,清华大学电子工程系的郭进博士独辟蹊径,他创新性地将统计模型引入了汉语分词的任务中。通过收集和分析大量的语料数据,郭博士训练出了能够自动学习和识别词汇模式的统计模型。这种方法显著降低了错误率,将汉语分词的错误率降低了一个数量级。

假定一个中文句子 S 的分词结果有以下几种可能:

其中 A_k 、B_mC_n 均是中文的词,因为每种情况的分词结果可能对应不同的词组数量,因此用k,m,n 三个字母来表示下标。运用统计模型来判断该输出哪个分词结果,本质上就是看哪种结果“最可信”,即谁的概率最高。如果最后输出的是 A 序列,则一定满足:

P(A_1,A_2,...,A_k)>P(B_1,B_2,...,B_m)

P(A_1,A_2,...,A_k)>P(C_1,C_2,...,C_n)

关于如何计算上述分词过程中涉及的概率值,前一章的读书笔记中介绍的“语言统计模型”为我们提供了一种高效的方法,用于快速估计不同分词方式下句子出现的概率。为了更直观地理解分词的基本工作原理,作者绘制了以下图表来概括这一过程:

4. 分词的颗粒度问题

在翻译场景中,为了保持译文的准确性和流畅性,分词的颗粒度通常需要扩大,以确保整个短语或术语能够作为一个整体进行翻译。例如,“华南理工大学”在翻译时应当保持完整,而非被拆分为“华南/ 理工/ 大学”后逐词翻译。同样,“联想电脑”在翻译时应整体对应为“Lenovo”,而非直译为“thinking computer”。

然而,在其他应用场景如网页搜索中,分词的颗粒度则需要更细。如果总是将“联想电脑”视为一个整体,那么当用户仅输入“联想”时,与“联想电脑”相关的搜索结果可能就不会被呈现。

还有一种很特殊的情况,比如“北京大学”,有的人会认为这是一个整体,而有的人就认为应该是“北京/ 大学”。面对这种谁也说服不了谁的场景,郭进博士提出了一个创新的解决方案:在输出分词结果时,对于复合词,先输出整体,再输出其嵌套结构,让使用者根据实际需求选择适合的粒度。这种方法后来被许多系统所采纳。

为了实现多层次的分词结果,我们无需对“分词器”进行大的改动,而是需要调整“词典”和“语言模型”(对照上面的图)。对于细粒度分词,我们使用“基础词表”,其中包含不可再分的基础词汇,如“北京”、“大学”、“联想”、“电脑”等,并基于这些词汇构建语言模型 M_1 。分词器则利用这些资源和模型,将输入的句子(字串)切分为细粒度的词串。

对于粗粒度分词,我们则需要“复合词表”,其中收录了由基础词组合而成的复合词,内容包括“北京大学:北京-大学”、“联想电脑:联想-电脑”等。基于这个复合词表,我们构建另一个语言模型 M_2 。此时,分词器的输入是细粒度分词的结果(词串),而输出则是粗粒度的复合词串。

尽管“分词”这一领域在科学家们的不懈努力下已经取得了显著的进展,但作者也指出,该领域的精度提升空间已相对有限,可能不再值得投入大量的研究精力。

5. 分词的误差

作者讨论了分词结果中可能出现的误差,这些误差主要分为“错误”和“粒度不一致”两类。

在“错误”的分类中,作者进一步细分为“越界型错误”和“覆盖型错误”。所谓“越界型错误”,是指分词器错误地将原本不属于同一词汇的字符组合划分在一起,例如将“北京大学生”错误地划分为“北京大学/生”,这种错误可能误导读者或机器理解文本的意思。而“覆盖型错误”则是指分词器错误地将原本属于同一词汇的字符组合拆分,如将人名“罗纳尔多”错误地拆分为“罗纳/尔多”,这同样会影响文本理解的准确性。在训练分词器时,应特别关注这两类错误,并努力减少它们的出现。

至于“粒度不一致”的问题,这往往涉及到不同人对分词粒度的主观理解。比如,“北京大学”在某些场景下可能被看作一个整体,而在其他场景下则可能被拆分为“北京”和“大学”。由于这种不一致性是基于主观判断的,因此在衡量分词器的好坏时,可以将其视为一种特殊情况,而非严格的错误。这样做可以避免因个人主观差异而对分词器的性能评估产生误导。

  • 41
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值