美文网首页
中文分词

中文分词

作者: dreampai | 来源:发表于2019-04-26 12:35 被阅读0次

基于规则的分词

“基于规则的分词”思想:通过人工设立词库,按照一定方式进行匹配切分,其实现简单高效,但对新词很难进行处理。通过维护词典,在切分语句时,将句子的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不予切分。

  • 正向最大匹配
  • 逆向最大匹配:由于汉语中偏正结构较多,若从后向前匹配,可以适当提高精确度。所以逆向最大匹配比正向最大匹配法的误差要小。
  • 双向最大匹配:按照最大匹配原则,选取词数切分最少的作为结果,如果分词结果不同,则返回其中单字较少的那个。

基于统计语言模型的分词

统计语言模型:基于统计语言模型计算出每种分词后句子出现的概率,并找出其中概率最大的,就能找到最好的分词方法。

基于统计语言模型分词步骤:

  • 建立统计语言模型(N 元模型)
  • 对句子进行单词划分,然后对划分结果进行概率计算,获得概率最大的分词方法。如果穷举所有可能的分词方法并计算出每种可能性下句子的概率,那么计算量是相当大的。因此,可以把它看成一个动态规划的问题,并利用维比特算法快速找到最佳分词。统计学习算法有:**隐含马尔可夫(HMM)、条件随机场(CRF)等。

语言模型:

image.png image.png

N 元模型:当 N 越大,模型包含的次序信息越丰富,同时计算量随之增大。同时,长度越长的文本序列出现的次数也会减少,估计 N 元条件概率时,就会出现分子分母为零的情况。因此,一般在 N 元模型中需要配合相应的平滑算法解决该问题,如拉普拉斯平滑算法等

HMM 模型

HMM 将分词作为字在字串中的序列标注任务来实现的。

  • 基本思路:每个字构造一个特定词语时都占据着一个确定的构词位置(词位),现规定每个字最多只有四个构词位置:B(词首)、M(词中)、E(词尾)、S(单独成词)

  • 独立性假设:每个字的输出仅仅与当前字有关,该方法完全没有考虑上下文,且会出现不合理的情况。比如按照之前设定的 B、M、E、S,正常来说 B 后面只能是 M 或者 E,然后基于观测独立性假设,我们可能得到诸如 BBB、BEM等不合理输出。HMM 可以解决这个问题,通过设置某些转移概率为 0 。

HMM 中求解 maxP(I/O)P(O) 使用 Veterbi 算法,它是一种动态规划方法,思想是如果最终最优路径经过某个 Oi,那么从初始节点到 Oi-1 点的路径必然也是一个最优路径,因为每个结点只会影响前后两个的条件概率
P(Oi-1/Oi),P(Oi/Oi+1)

其他分词模型

  • 条件随机场(CRF):隐含马尔科夫模型,有个经典假设,就是每个状态只与它前面的状态有关,这个假设显然有偏差的。条件随机场算法使得每个状态不止与他前面的状态有关,还与他后面的状态相关。
  • 神经网络分词算法:采用 CNN、LSTM 等深度学习网络自动发现一些模式和特征,结合 CRF、Softmax 等分类算法进行分词预测。

分词的准确性

准确性标准

  • 分词的一致性:
    • 越界型错误,比如把“北京大学生”分成“北京大学-生”
    • 覆盖型错误:比如把“贾里尼克”拆成了四个字。
  • 颗粒度不一致:应用不同,汉语分词的颗粒度大小应该不同。

影响分词准确度的因素

  • 未登录词
  • 分词粒度的粗细

构建分词器

分词器支持不同层次的词的切分,根据不同的应用自行决定切分的颗粒度。

  • 首先需要一个基本词表和一个复合词表。基本词表包括像“清华”、“大学”这样无法再分的词。复合词表包含复合词以及它们由哪些基本词构成,比如“清华大学:清华-大学”、“搜索引擎:搜索-引擎”
  • 需要根据基本词表和复合词表各建立一个语言模型,比如 L1 模型和 L2 模型
  • 根据基本词表和语言模型 L1 对句子进行分词,就得到小颗粒度的分词结果。输入的是子串,输出的是词串
  • 在此基础上,再用复合词表和语言模型 L2 进行第二次分词。输入的是基本词串,输出是复合词串。词表和语言模型这两个数据库改变了,但分词器本身和前面完全相同。
image.png

在实际工程中,多是基于一种分词算法,然后用其他分词算法加以辅助。最常用的方式是先基于词典的方式进行分词,然后再用统计分词方法进行辅助。如此,能在保证词典分词准确率的基础上,对未登录词和歧义词有较好的识别。

面试问题

1、为什么 N 取值一般很小

N 元模型的大小(空间复杂度)几乎是 N 的指数函数。三元或四元甚至更高阶的模型也不能覆盖所有的语言现象。在自然语言中,上下文之间的相关性可能跨度非常大,甚至可以从一个段落跨到另一个段落。这就是马尔可夫假设的局限性。

相关文章

  • “结巴”中文分词:做最好的 Python中文分词组件

    “结巴”中文分词:做最好的 Python中文分词组件 1 jieba中文分词简介: 中文分词是中文NLP的第一步,...

  • 第3章 中文分词技术

    本章要点: 中文分词的概念与分类 常用分词的技术介绍 开源中文分词工具-Jieba简介 实战分词之高频词提取 中文...

  • 配置Hanlp自然语言处理进阶

    中文分词 中文分词中有众多分词工具,如结巴、hanlp、盘古分词器、庖丁解牛分词等;其中庖丁解牛分词仅仅支持jav...

  • 分词系统评测

    1.11款开放中文分词引擎大比拼 2.常用的开源中文分词工具 3.11大Java开源中文分词器的使用方法和分词效果...

  • python笔记 | 舆情分析如何做?

    中文分词原理及分词工具介绍 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切...

  • 中文分词工具及中文语料资源

    关键词: 中文分词;分词;自然语言处理;中文语料 最近要做中文自然语言处理相关任务,牵涉到使用中文分词工具和相关算...

  • 结巴中文分词的用法

    jieba “结巴”中文分词:做最好的 Python 中文分词组件"Jieba" (Chinese for "to...

  • python 结巴分词

    jieba “结巴”中文分词:做最好的 Python 中文分词组件“Jieba” (Chinese for “to...

  • 基于Trie 树实现简单的中文分词

    中文分词简介 中文分词是中文自然语言处理的基础,中文分词的正确率如何直接影响后续的词性标注(也有些词性标注算法不需...

  • Python中文分词及词频统计

    中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组。英文使用空格...

网友评论

      本文标题:中文分词

      本文链接:https://www.haomeiwen.com/subject/vkizgqtx.html