zoukankan      html  css  js  c++  java
  • NLP系列——(二)分词

    1、分词简述

    • 在做文本处理的时候,首先要做的预处理就是分词
    • 英文
      • 英文单词天然有空格隔开容易按照空格分词
      • 但是也有时候需要把多个单词做为一个分词,比如一些名词如“New York”
    • 中文
      • 中文没有空格,因此分词是一个需要专门去解决的问题
    • 中英文分词原理类似

    2、分词当中的基本问题

    • 分词规范
      • 对于一句话,使用不同的词语界定方式,可以组合出很多种分词结果
      • 我们在衡量一个分词模型的好坏时,我们首先需要确定一个统一的标准,即所谓Golden Data
      • 大家所有的模型都在统一的数据集上进行训练和评测,才具有可参考性
    • 歧义切分
      • 交集型切分歧义
        • 若满足 AJ、JB 同时为词(A、J、B分别为汉字串),则将汉字串AJB称作交集型切分歧义
        • 此时汉字串 J 称作交集串
          • 大学生(大学/学生)
          • 研究生物(研究生/生物)
          • 结合成(结合/合成)
      • 组合型切分歧义
        • 若满足A、B、AB同时为词,则汉字串 AB 称作多义组合型切分歧义
          • 起身(他|站|起|身|来/明天|起身|去北京)
          • 学生会(我在|学生会|帮忙/我的|学生|会来|帮忙)
    • 未登录词的识别
      • 未登录词
        • 一种是指已有的词表中没有收录的词
        • 另一种是指训练语料中未曾出现过的词(OOVOut Of Vocabulary
          • 训练集以外的词
          • 通常情况下未登录词和OOV是一回事,此处不加以区分
      • 分类
        • 新出现的普通词汇
          • 如网络用语当中层出不穷的新词
          • 专有名词
            • 在分词系统中我们有一个专门的模块,命名体识别(NER name entity recognize),用于对人名、地名以及组织机构名等单独进行识别
            • 专业名词和研究领域名称
              • 这个在通用分词领域出现的情况比较少
              • 如果出现特殊的新领域,专业,就会随之产生一批新的词汇
              • 其他专用名词
                • 如新产生的产品名、电影、书籍等等
      • 经统计,汉语分词出现问题更多是由于未登录词造成的,因此分词模型对于未登录词的处理将是衡量一个系统好坏的重要指标

    3、常用的汉语分词方法

    • 常见分词方法
      • 正向最大匹配法(FMM)
      • 逆向最大匹配法(BMM)
      • 双向扫描法
      • 基于统计模型的分词方法(HMM、n 元语法等)
    • 基于词典的分词方法
      • 步骤
        • 从大规模的训练语料中提取分词词库
        • 统计词频
        • 通过逆向最大匹配、N-最短路径等分词方法对句子进行切分
      • 优点
        • 非常直观,可以很容易的通过增减词典来调整最终的分词效果
      • 缺点
        • 过于依赖于词典,导致这种方法对于未登录词的处理不是很好
        • 当词典当中的词出现公共子串的时候,会出现歧义切分的问题
          • 需要语料库足够的丰富,从而能够对每个词的频率有一个很好的设置
    • 基于字的分词方法
      • 步骤
        • 事先编制好的词典
        • 通过查词典的方式作出最后的切分决策
      • 原理
        • 将分词过程看作是字的分类问题,其认为每个字在构造一个特定词语时都占据着一个确定的构词位置(词位)
        • 对句子中的每个字赋予了一个词位,即BEMS中的一个标签,这样我们就完成了分词的目的
      • 四种词位
        • B(Begin)
        • E(End)
        • M(Middle)
        • S(Single)
        • 自然语言处理/可以/应用/在/诸多/领域
        • 自B 然M 语M 言M 处M 理E 可B 以E 应B 用E 在S 诸B 多E 领B 域E
      • 特点
        • 传统的语言学问题转换为了一个更加容易建模的序列标注问题
      • 建模方法
        • 可以用最大熵模型为每个字进行标签分类
        • 可以利用 HMM 将其看作一个解码问题
        • 可以考虑句子间的时序关系,利用判别模型CRF来建模
        • 深度学习中的 LSTM 也可以用在这里进行建模

    4、中文分词工具(以jieba为例)

    • Jieba分词工具
      • 语料库的作用
        • 对词语的频率进行统计,作为登录词使用
        • 对单字在词语中的出现位置进行统计,使用 BMES 模型进行统计,供后面套 HMM 模型 Viterbi 算法使用
    • 支持四种分词模式:
      • § 精确模式
      • § 全模式
      • § 搜索引擎模式
      • § paddle模式
      • 处理思路
        • § 加载词典 'dict.txt'
        • § 从内存的词典中构建该句子的 DAG(有向无环图)
        • § 对于词典中未收录词,使用 HMM 模型的 viterbi 算法尝试分词处理
        • § 已收录词和未收录词全部分词完毕后,使用 dp 寻找 DAG 的最大概率路径
        • § 输出分词结果
        • 试图将句子最精确地切开,适合文本分析;
        • 把句子中所有的可以成词的词语都扫描出来,
        • 速度非常快,但是不能解决歧义
        • 在精确模式的基础上,对长词再次切分
        • 提高召回率,适合用于搜索引擎分词
        • 利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词

    5、基于词典的匹配方法

    • 正向最大匹配(MM)
      • 从左向右取待切分汉语句的m个字符作为匹配字段
        • m为大机器词典中最长词条个数
      • 查找大机器词典并进行匹配
        • 若匹配成功,则将这个匹配字段作为一个词切分出来
        • 若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配
      • 重复以上过程,直到切分出所有词为止
    • 逆向最大匹配(RMM)
      • 与 MM 刚好相反,是 MM 的逆向思维
        • 匹配不成功,将匹配字段的最前一个字去掉
      • 实验表明,逆向最大匹配算法要优于正向最大匹配算法
    • 双向最大匹配算法(BM)
      • 代码:https://github.com/senpai-a/chinese-word-segmentation
      • 将 MM 得到的分词结果和 RMM 的到的结果进行比较,选择最优的分词方法
      • 优点
        • 据SunM.S. 和 Benjamin K.T.(1995)的研究表明
          • 中文中90.0%左右的句子,MM 和 RMM 完全重合且正确
          • 只有大概9.0%的句子两种切分方法得到的结果不一样,但其中必有一个是正确的(歧义检测成功)
          • 只有不到1.0%的句子,要么两种方法分词结果相同且是错的,或者两种方法分词结果不同但两个都不对(歧义检测失败)
          • 由于上述原因,正是双向最大匹配法在实用中文信息处理系统中得以广泛使用

    6、基于统计的分词方法

    • N-gram
      • 特点
        • 某个词的出现依赖于其他若干个词(条件概率)
        • 我们获得的信息越多,预测越准确
      • N-gram 模型是一种语言模型(Language Model,LM)
        • 语言模型是一个基于概率的判别模型
        • 它的输入是一句话(单词的顺序序列)
        • 输出是这句话的概率,即这些单词的联合概率(joint probability)

          

    • 分词方法
      • § N-gram 本身也指一个由 N 个单词组成的集合,各单词具有先后顺序,且不要求单词之间互不相同
      • § 常用的有 Bi-gram (N=2) 和 Tri-gram (N=3)
        • 例:对于图上面这句话“I Love deep learning”,可以分解为如下 Bi-gram、Tri-gram
          • Bi-gram:{I, love}, {love, deep}, {love, deep}, {deep, learning}
          • Tri-gram :{I, love, deep}, {love, deep, learning}
      • 计算原理:马尔可夫链
        • § 假设一个字符串 s 由 m 个词组成,因此我们需要计算出 P(w1,w2,⋯,wm) 的概率(单词的联合概率)
        • § 根据概率论中的链式法则得到如下:
        • § 由于上式计算量太大,因此引入马尔科夫假设
          • 则上式简化为
          • 其中每一项的条件概率,通过极大似然估计,也就是统计频率得到
          • n=1,即一元模型(Uni-gram)
          • 取 n=2,即二元模型(Bi-gram)
          • 取 n=3,即三元模型(Tri-gram)
        • 此处 n 可以取的很大,但是现实中一般 bi-gramtri-gram 就够用了
        • n 如果取得太大,会导致参数空间过大和数据稀疏严重等问题,因为词同时出现的情况可能没有
        • 例:对于图上面这句话“I Love deep learning”,可以分解为如下 Bi-gram、Tri-gram
        • 马尔科夫假设:一个词的出现仅与前面的 n-1 个词有关
  • 相关阅读:
    10 Iterable之遍历Map、Set、Array
    9 Map和Set
    8 循环
    5 字符串
    6 数组
    4 数据类型
    2 变量
    实现简单的邮件收发器(十二)
    10.19 初识django
    10.18 数据库之索引优化方案
  • 原文地址:https://www.cnblogs.com/snailt/p/13409069.html
Copyright © 2011-2022 走看看