天天看点

【词性标注】一篇文章弄懂词性标注

词性标注概述

▶ 词类

同一个词类的词具有相同的语法功能、在同样的位置中出现

划分词类的目的在于描写语句的结构规则,以基于模式自动处理成批的语料(便于自然语言处理)

词类 = 实词(content) + 虚词(function)

  • 实词——动词、形容词、代词、量词、数词
  • 虚词——连词、助词、语气词

▶ 词性

词性是对具体的词,根据其语法,兼顾其意义,将其归类的结果

▶ 词性标注

词性标注( POS tagging)就是在给定的句子中,判定每个词的语法范畴,确定词性并加以标注的过程

  • 单类词(只具有单一词性的词):可以直接查词典
  • 兼类词(具有多种词性的词):要根据上下文进行推断,即消歧
# 兼类词
import thulac
thu = thulac.thulac()
list1 = thu.cut("他是人民代表")         # 代表:n
list2 = thu.cut("他代表了人民")         # 代表:v
           

词性标注的难点在于:兼类词和未登录词的词性标注

汉语词性标注的特殊问题

❶ 形态标准

在英文中,-ing表示动名词,-ed表示过去式,-s表示名词复数…

而中文,是缺乏这种形态变化的——汉语的绝大多数词汇不具有前缀、后缀、重叠、黏附的形态变化

因此,根据形态划分中文词性,是行不通的。

某种意义上,虽然中文的形态变化匮乏,但也不是没有:

美化、绿化、现代化采用“化”为后缀;小猫、小狗、小兔子采用“小”作为前缀;商量商量、琢磨琢磨、漂漂亮亮、畏畏缩缩又是采用了“重复”的形态变化

只是这些,并不具备参考意义罢了———这样的词又有几个呢?

❷ 意义标准

英文中:good永远是形容词,fight永远是动词,plane永远是名词…

而中文,复杂太多太多——“我很好”,“这个loli好可爱”,“好”是形容词还是副词?“这人顶好”,“我到达了山顶”,“你不要顶嘴”,“顶”的词性呢?

因此,脱离了语法去谈词性,是很难具有语言学价值的。

❸ 分布标准

英文中:标准的主谓宾、定语从句、主语从句…

而中文,很难像英文这样保证某个词分布在固定的位置。一个词可能以一种奇怪的姿态与另一个词组合在一起,并出现在奇怪的位置

因此,基于分布标准进行中文词性标注也不是最好的选择。

❹ 兼类词

兼类词是中文词性标注的最大敌人———汉语中的兼类词占比达47%(悲

词性标注的思路

▊基于规则

  • 基本思想:基于上下文指定标注规则
  • 缺点:人工成本昂贵(语言学家编写规则);移植性查(一种语言一种规则);新规则与旧规则的冲突

▊基于机器学习

  • 基本思想1:有监督的机器学习(太依赖训练语料)
  • 基本思想2:无监督的机器学习(即对相似的兼类词进行聚类)
  • 基本思想3:半监督的机器学习(少量的已标注样本 + 大量的未标注样本)

▊基于规则和机器学习

  • 基本思想:上面两种思路的折中
  • 具体过程:初始词性标注(全部可能) -> 通过规则消歧 -> 通过机器学习消歧 -> 未登录词推测 -> 人工校对 -> 最终词性标注

▊感知机

  • 基本思想:感知机好比神经网络的一个神经元——它只能做而分类,即输出兴奋(1)和抑制(0);用多个感知机组成一层神经网络,进行词性的标注
  • 补充:感知机其实和二元线性分类问题的常客——SVM支持向量机十分相似,算是低阶版的SVM,也比SVM要年长很多

词性标注工具

▶ thulac

import thulac

# 默认模式(如果想只分词不标注,设置参数seg_only=True)
thu = thulac.thulac()
list1 = thu.cut('中华人民共和国万岁,世界人民大团结万岁')
print(list1)
           
【词性标注】一篇文章弄懂词性标注

▶ jieba

import jieba
from jieba import posseg

list2 = list(jieba.posseg.cut('中华人民共和国万岁,世界人民大团结万岁'))
print(list2)
           
【词性标注】一篇文章弄懂词性标注

设计词性标注器

  • 默认标注器
  • 正则标注器
  • 查询标注器
  • Unigram标注器
  • Bigram标注器
  • 组合标注器

本篇文中着重于理论,并未过多设计其代码实现

这部分内容可以戳这里>_<:《【词性标注】词性标注器设计》

继续阅读