自然语言处理入门(4) 词性标注、命名实体识别、信息抽取

《自然语言处理入门》阅读笔记(4) 第七章+第八章+第九章

词性标注

  • 词性:单词的语法分类;词性的集合称为词性标注集

  • 词性标注:句子中每个单词都预测词性标签

    • 汉语中常见一个单词有多个词性(称为兼类词)
    • OOV是任何nlp的难题——如何预测OOV的词性(OOV:未登录词)
  • 词性标注视为中文分词的后续任务

    • 将${B,M,E,S}$标签与词性标签联合作为复合式标签:

      image-20211014111109535

    • 同时进行多个任务的模型:联合模型

      • 语料库必须同时标注分词和词性——语料库少
      • 联合模型的特征数目是独立模型的数十倍

语料库

  • 语料库中的句子,都可转为如下格式(PKU格式):

    image-20211014111331774

  • 人民日报语料库与PKU标注集(其中,名动词的定义较为含糊)

    image-20211014111605016

  • 国家语委语料库与863标注集

    image-20211014111546797

  • 《诛仙》语料库与CTB标注集

    image-20211014111700335

序列标注模型用于词性标注

  • HanLP中的POSTagger接口:HMM、感知机、CRF

  • 基于HMM的词性标注:

    image-20211014111907911

    • model:任意的一阶或二阶HMM
    • vocabulary:将单词映射为id
    • tagSet:存储词性标注集
    • HMM可以应对兼类词问题,但无法应对OOV
  • 基于感知机的词性标注:

    image-20211014112053870

    • 感知机词性标注器的特征模板:($x_t$为当前单词,$y_t$为当前单词的词性)

      image-20211014113029497

      • 前三个状态特征为词语级别,捕捉上下文信息,其他为字符级别,推测OOV的词性
    • 成功识别OOV的词性

  • 基于CRF的词性标注:

    image-20211014113149683

  • 词性标注评估:精确率、召回率、综合$F_1$

    • 可对每一个标签都计算一遍,或者退化为相等的准确率

自定义词性

  • 将自己关注的词语和自定义的词性,以词典的形式挂载到HanLP
  • 标注一份语料库,训练统计模型

命名实体识别

  • 词性标注仅作用于单个单词

  • 命名实体:一些描述实体的词汇,如人名、地名、组织机构名、专业术语等

    • 数量无穷
    • 构词灵活
    • 类别模糊(命名实体的区别模糊,如地名和机构名)
  • 命名实体识别:识别句子中命名实体的边界和类别——统计为主,规则为辅

    • 规则性较强的命名实体(网址、ISBN等),通过正则表达式处理,未匹配到的片段交给统计模型
    • 较短的命名实体(人名),通过分词确定边界,通过词性标注确定类别
    • 对于一些大颗粒度的语料库,分词+词性标注可以代替命名实体识别
    • 对命名实体边界外的单词,统一标注为O(outside)

基于规则的命名实体识别

  • 用于不精确地识别音译人名、日本人名,可用于应付语料匮乏地领域

  • 基于规则的音译人名识别

    • 音译人名用字较为固定

      image-20211014154756758

    • 对于待识别的文本,若音译字符连续出现,则认为来自一个音译人名

    • 音译人名较长,不易产生歧义,但不能全部收录——一套启发式规则:粗分结果中,如果某词语的备选词性含有音译人名,则从此词语向右扫描,遇到音译人名词库中的词语,则合并,否则终止扫描

      • 例如:粗分结果如下

        image-20211014154952366

      • 由于”勒“在人名词库中,合并结果为:

        image-20211014155034122

    • 此过程无法识别未知的人名片段,但能够查到较长、构词常规的音译人名

  • 基于规则的日本人名识别

    • 在文本中匹配日本人名的姓氏和名字
    • 将连续的姓氏和名字合并为日本人名,标注为nrj;存在一些黑名单规则,以区别特殊情况,如”龟山公园“
  • 基于规则的数词英文识别

    • 将相同类型的连续字符分别合并
    • 获取每个字符的类型——包括单字节、分隔符(标点符号)、中文字符、字母、数字、序号等——将类型相同的字符合并,利用类型确定词性

命名实体识别语料库

  • 1998年《人民日报》语料库

    • 只关注人名、地名、机构名,则PKU语料可视为命名实体识别语料库,其中nr为人名,ns为地名,nt为机构名

      image-20211014160106863

    • 其余复合词视为普通词汇

  • 微软命名实体识别语料库(MSRA-NE)

    • 实体类型包括:专有名词NAMEX,时间表达式TIMEX,数字表达式NUMEX,度量表达式MEASUREX,地址表达式ADDREX 五个大类及30个下属子类
    • 除命名实体外的词语没有标注词性
    • 原始数据为xml格式

基于层叠HMM的角色标注框架

  • 角色标注框架类似日本人名的思路:

    • 为构成命名实体的短词语打标签
    • 标签序列满足某种模式,则识别为某个命名实体
    • 根据HMM的预测进行标注
      • 角色标注模块的输入是分词模块的输出
      • 角色标注模块于分词模块均使用HMM,因此称为层叠HMM模型
  • 基于角色标注的中国人名识别

    • 举例:分词结果为”王国/n,维和/vn,服务员/nnt“,其中”王国维“的前半部分和后半部分是字符串在构成中国人名时充当的角色,确定粗分结果中各个词语的角色后,即可识别中国人名

    • 定义中国人名的构成角色表如下:

      image-20211014161207616

    • 根据上表编写规则,将词性标注语料转换为角色标注语料,训练HMM,利用HMM进行标注,最后通过模式匹配识别人名

  • 基于角色标注的地名识别

    • 原理类似,但需要定义新的角色标注集

      image-20211014162039385

  • 基于角色标注的机构名识别

    • 同上,但预测环节中由于机构名通常含有其他命名实体,需要进行第三次识别——层叠HMM的第一层用于得到粗略的分词结果,第二层识别其他实体,第三层识别机构名

    • 角色标注集如下:

      image-20211014162258647

  • 此框架没有考虑OOV问题,标注集需要根据具体问题手工编制,不够灵活,普通语料到角色标注语料的转换也需要专门设计

基于序列标注的命名实体识别

  • 命名实体识别可视为分词+词性标注:实体边界通过${B,M,E,S}$确定,类别通过附加类别的标签如B-nt确定

  • 将通用语料库转换为序列标注命名实体识别语料库:

    image-20211014162749200

    • 输入变量分别为词语和词性,由分词模块和词性标注模块给出
    • 输出变量为复合型标签,由${B,M,E,S}$和实体类别标签组成
  • 组合策略:

    • 组合出S-nr之类的单个单词命名实体,提供用户改写词性标签的计回
    • 将单个单词的命名实体标注为S,具体实体类型由词性标签决定
  • 特征模板:(对于HMM,只能使用特征$y_{t-1},word_t$两个特征)

    image-20211014163233591

  • 基于HMM序列标注的命名实体识别:

    • 输入分别为单词和词性序列,输出B-nt之类的命名实体识别标签

      image-20211014163341945

    • 根据B、M、E合并整个nt,以识别出”华北电力公司“

    • 无法识别的原因:

      • 语料库中,短语a没有作为实体的一部分出现过
      • HMM无法利用词性特征
  • 基于感知机序列标注的命名实体识别

  • 基于CRF序列标注的命名实体识别

自定义领域命名实体识别

  • 以上是通用领域上的语料库,无法识别专用领域中的命名实体
  • 收集文本,作为标注语料库的原料——生语料
  • 可在HanLP的标注基础上校正——先输出标注结果,然后定义新的标签,人工更新标注结果
  • 后续过程同上

信息抽取

  • 从非结构化文本中提取结构化信息的技术——基于规则的正则匹配、有监督学习、无监督学习
  • 本章使用无监督学习的方法

新词提取

  • 新词:词典外的词,即未登录词OOV

  • 新词提取:1)从生语料提取词语,无论新旧;2)用词典过滤已有的词语,得到新词——关键在于1),即给一段文本,随机选取一个片段,如何判断这个片段是否为一个词

    • 如果此片段左右搭配丰富,片段内部成分搭配固定,可认为这是一个词
    • 片段左右的丰富程度,用信息熵衡量;内部搭配的固定程度,用子序列的互信息衡量
  • 信息熵:某消息含有的信息量

    • 离散型随机变量X的信息熵:

      image-20211014164915408

    • 给定字符串S,若X定义为该字符串左边可能出现的字符(左邻字),则H(X)为S的左信息熵,同理得到右信息熵

      • 例如:

        image-20211014165130174

      • 蝴蝶的左邻字为:只、些

    • 左右信息熵越大,说明搭配越丰富

  • 互信息:两个离散型随机变量的相关程度

    image-20211014165231766

    • 互信息越大,两个随机变量关联越密切,即同时发生的可能性越大

    • 随机变量X代表一个子串,Y代表S剩余部分

      image-20211014165413024

关键词提取

  • 只需要一个文档即可得到关键词:单文档算法(词频统计、TextRank);需要多个文档得到关键词:多文档算法(TF-IDF,容易受到噪音干扰)

  • 词频统计:

    • 认为关键词会在文章中反复出现——但根据齐夫定律,词频高的还会包括一些标点符号和助词
    • 词频统计前通常需要过滤停用词
    • 流程:分词、过滤停用词、按词频取前n个(通常使用最大堆算法获得m个元素中前n大的元素,复杂度为O(mlogn))
  • TF-IDF(词频-倒排文档频次):

    • 综合考虑了词语的稀有程度:一个词语的重要度正比于其在文本中的频次,反比于包含它的文档数目,即越多文档包含它,这个词越宽泛,无法体现文档特色

    • 基本公式为:

      image-20211014170539536

      • t:单词
      • d:文档
      • TF(t, d):t在d中出现频次
      • DF(t):包含t的文档数目
    • 常用变换:加一平滑、取对数等

    • 同样涉及分词、停用词过滤

    • 需要大型语料库和较大内存

  • TextRank:

    • 是PageRank在文本上的应用——PageRank:排序网页的随机算法

      • 将互联网视为有向图,网页为节点,节点之间超链接为有向边,初始化时每个节点权重均为1,迭代的方式更新节点权重,公式如下:

        image-20211014170931995

        • d:常数因子,模拟用户点击链接后跳出当前网站的概率
        • In(V):链接到当前节点的节点集合
        • Out(V):从此节点出发链接到的节点集合
    • 单词被视为节点,每个单词的外链来自前后固定大小的窗口内单词

      image-20211014171153347

      • 窗口半径为2,则”处理“的外链为周围四个单词
      • 窗口内词语用于解释中心词,相当于给中心词投票,每一票权重被窗口词所有投出去的票平分
      • 中心词左右搭配越多,则给自己做解释的词越多——类似于互信息
      • 单词频次越高,被投票的机会越多——类似于词频统计

短语提取

  • 新词提取推广到短语提取——字符替换为单词,字符串替换为单词列表即可

关键句提取

  • 将PageRank应用到句子颗粒度上:BM25衡量句子的相似度,改进链接的权重计算,此时相似的句子会有更高的投票

  • BM25:

    • 定义Q为查询语句,有单词$q_1,…,q_n$组成,D为被检索文档,Q和D的相似度BM25定义为:

      image-20211014173514313

      • IDF和TF的定义同TF-IDF部分
      • $k_1,b$为两个常数:前者越大,TF对文档得分的正面影响越大;后者越大,文档长度对得分的负面影响越大
      • avgDL为所有文档的平均长度
      • BM25对查询语句中所有单词的IDF加权求和
  • TextRank:

    • 将一个句子视为查询语句,相邻句子视为待查询文档,得到相似度,相似度作为PageRank中链接的权重:

      image-20211014173856554

      • $WS(V_i)$为文档中第i个句子的得分
      • 迭代后得到所有句子得分,排序输出前N个句子,即为关键句
      • 不再考虑窗口问题,认为所有句子都是相邻的:
        • 句子几乎不重复
        • 文档中句子数量远小于单词的数量