词性标注作为NLP领域的一项基本任务,其与分词任务同等重要,是很多任务的基础,比如句法分析,命名实体识别等。命名实体识别在一定程度上也属于标注任务,不过,难度相比一般的词性标注而言,上升了不少。对于词性标注而言,不论是中文还是英文,其难点在于对于不同的语境,词性的多变化;另一方面,随着社会的发展,很多词都会潜移默化的产生额外的词性。相信这些现象,大家都有所感触,也经常遇到这些情况,就不再举例了。从技术来说,词性标注也依赖于分词,不同的分词,对于结果的标注也会不同,比如“读书”,如果分词结果为“/读/书/”,那显然是“动词+名词”的序列结构;如果是“/读书/”,则是“名词”的单个词性。因此在进行词性标注任务时,一般都需要先将句子进行分词,然后基于分词的结果再进行词性标注。

目前,词性标注的方法也比较多,在AI领域,有很多词性标注器,这些方法都已经嵌入到成型的自然语言处理工具包中,比如jieba软件,HanLP,NLTK等。然而,从自然语言的层面上来看待词性标注问题,不同的语言,词性标注的难度截然不同,比如英文和中文。对于英文而言,分词不仅相比中文要简单,而且词性标注也相比中文要简单,即使单独通过词的形态学来处理也可以获得很高的标注准确率,这里的词的形态学指的是词的结构,包括前缀,后缀,时态等等,英文的时态丰富,前缀、后缀具有明显的区分标志,甚至不用考虑上下文,就可以获得很好的标注效果。而中文缺少形态变化,不能从词的形态来识别词性;另外一个难点在于,对于不同的词性标注器,其拥有属于自己的一套标注符号集,也就是说,使用不同的标注器,标注的词性可能相同,但是,符号不同,不统一,因为,词类的划分粒度和标记符号不同,目前还没有一个统一的标准,比如LDC标注语料中,将中文词性划分为33类,而北大语料库则分为26类。词类划分标准和标记符号的不统一,以及分词规范的含糊,都给词性标注带来了很大的困难。还有很多问题还未解决,因此,看似这些已经基本解决的NLP基础问题,其实还需要投入很大的研究精力来挖掘潜在的价值。

词性标注算法从目前的使用情况来看,主要分为两类,一种是基于规则的方法,主要指的是基于字符串匹配的词典查找算法;另外一种是基于数据驱动的方法,比如机器学习方法。首先,基于字符串匹配的词典查找算法,主要过程为:先对句子进行分词,然后从词典中查找每个词语的词性,对其进行标注即可。这种方法非常简单,但是无法解决一词多词性问题。而采用机器学习方法的词性标注算法,比如HMM,CRF等方法具有非常好的效果。对于HMM,其包括3个量,初始状态概率向量、状态转移概率矩阵、观测概率矩阵。在具体的词性标注问题上,观测序列为分词后的句子,状态序列(或者标记序列、隐状态序列都一个意思)为经过标注后的词性标注序列。而模型的3个量可以通过大量的语料计算得到。这样,对于标注问题,很容易计算得到HMM模型参数,再结合分词后的原句子序列,便将问题转换为模型的预测问题,即已知模型和观测序列,来预测标记序列(或者说状态序列)。这是HMM的经典应用场景。

在工业界,比较常用的中文处理软件包括jieba,hanLP等,在这里,以jieba软件为例,并对其原理进行剖析。jieba的词性标注的结果,对于每个词的词性,采用和ICTCLAS兼容的标记法。使用方法如下:

# -*- coding:utf-8 -*-
import jieba.posseg as pseg
words = pseg.cut("我喜欢研究算法")
for word, flag in words:print("%s %s" % (word, flag))

运行后,结果如下:

下面对pseg.cut()的原理进行一波分析:

1.准备工作:首先检查词典是否初始化好,如果没有则先初始化词典,比如上面的“红色字体”显示。将句子的编码解码为unicode编码格式。根据正则表达式进行匹配,将输入文本切分成一个个的句子。

2.遍历句子组成的列表,对每一个句子进行单独分词和词性标注。

3.如果句子中含有未登录词,使用HMM进行处理。

jieba分词的主程序源码如下:

def cut(self, sentence, cut_all=False, HMM=True):'''本函数的主要作用是将句子切分成词参数:- sentence: 要被切分的句子,必须是unicode编码,如果是其他编码,必须要解码为unicode- cut_all: 选择的切分方法,是采用全模式还是精确模式。对于全模式,是为了把句子中所有的可能成词的词语都切分出来,速度快,但是不能解决歧义。而精确模式,试图将句子进行最精确的切分,一般是我们最想要的结果,适合文本分析。- HMM: 是否使用HMM,一般对于含有未登录词的句子的分词,采用HMM会获得更好的分词效果'''sentence = strdecode(sentence)    # 将句子解码为unicode编码# 模式选择,对于不同的模式,选择不同的正则表达式对象if cut_all:re_han = re_han_cut_allre_skip = re_skip_cut_allelse:re_han = re_han_defaultre_skip = re_skip_default# 设置不同模式下的cut_block的分词方法if cut_all:cut_block = self.__cut_allelif HMM:cut_block = self.__cut_DAGelse:cut_block = self.__cut_DAG_NO_HMMblocks = re_han.split(sentence)# 先采用正则表达式进行粗切分,通过yield返回词语生成器,生成器的好处是可以节约内存for blk in blocks:if not blk:continueif re_han.match(blk):for word in cut_block(blk):yield wordelse:tmp = re_skip.split(blk)for x in tmp:if re_skip.match(x):yield xelif not cut_all:for xx in x:yield xxelse:yield x

分词之后,便可以进行词性标注了,这里主要介绍如何使用HMM来对未登录词进行处理。通过大规模的语料计算,可以计算得到HMM的参数,然后结合模型的预测算法,将观测序列(分词之后的句子)转换为标注序列(状态序列)。这样便完成了未登录词的词性标注。

最后,做个总结。jieba作为一个高效的NLP软件包,它可以在分词的同时完成词性标注,因此标注的速度是非常快的。而且,在整个过程中,通过字典查询的方法识别词的词性,通过HMM模型来完成对未登录词的词性标注,从而达到对整个句子的分词和词性标注。但是,字典查询的方式无法解决一词多词性的问题,因此,在精度上还是有所欠缺的。关于jieba软件的更多细节,请参见官方源码https://github.com/fxsjy/jieba。

自然语言处理之词性标注相关推荐

  1. 【自然语言处理】词性标注(北大,宾州)

    文章目录 词性标注规范 前言 北大词性标注集 宾州词性标注集 词性标注规范 前言 词性标注在中文领域暂无统一的标注标准,最常见较为主流的是北大和宾州词性标注集. 北大词性标注集 词性编码 词性名称 注 ...

  2. 自然语言处理之——词性标注和命名实体识别

    1. 摘要 基于上次分享的分词技术介绍,本次继续分享在分词后与词相关联的两个技术:词性标注和命名实体识别.词性是词汇基本的语法属性,也可以称为词类.词性标注的行为就是在给定的中文句子中判定每个词的语法 ...

  3. 自然语言处理:词性标注

    步骤一:导入 jieba 库,对文本内容进行分词处理. 导入 jieba 库的 posseg 模块,对文本进行分词标注. 步骤二: 词性统计: 导入 pandas 库,提取出标注返回结果的每项元素的 ...

  4. 自然语言处理基础技术之词性标注

    声明:转载请注明出处,谢谢:https://blog.csdn.net/m0_37306360/article/details/84502176 另外,更多实时更新的个人学习笔记分享,请关注: 知乎: ...

  5. 自然语言处理6 -- 情感分析

    系列文章,欢迎阅读 NLP预训练模型1 – 综述 NLP预训练模型2 – BERT详解和源码分析 Transformer家族1 – Transformer详解和源码分析 自然语言处理1 – 分词 自然 ...

  6. 分词与词性标注--第一周学习总结07-28

    分词与词性标注--第一周学习总结07-28 词性标注与自然语言处理 相关概念 理论基础 算法依赖 应用领域 个人学习笔记 HMM(隐含马尔可夫模型) 分词与词性标注 自然语言处理 相关学习链接推荐 词 ...

  7. Machine Learning | (2) sklearn数据集与机器学习组成

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  8. 资源 | 机器学习必知的15大框架,欢迎补充!

    来源:机器学习算法与Python学习 本文约4000字,建议阅读8分钟. 本文向我们介绍了机器学习中必须掌握的15个大框架. 机器学习工程师是开发产品和构建算法团队中的一部分,并确保其可靠.快速和成规 ...

  9. 干货丨机器学习必知的15大框架

    文章来源:云栖社区 不管你是一个研究人员,还是开发者,亦或是管理者,想要使用机器学习,需要使用正确的工具来实现.本文介绍了当前最流行15个机器学习框架. 机器学习工程师是开发产品和构建算法团队中的一部 ...

最新文章

  1. opencvsharp 如何提取十字交叉点坐标_如何提取OpenFOAM计算结果的体心坐标
  2. TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞
  3. 当我们在谈深度学习时,到底在谈论什么(二)--转
  4. oracle数据库用户密码将要过期处理办法(ORA-28002)
  5. 牛客 - Across the Firewall(最大流)
  6. 面试中说这些话,到手的offer很容易飞
  7. 如何看计算机几核,windows7系统怎么看CPU是几核的?win7查看CPU是几核的方法
  8. Nuget 管理报repositories.config 访问路径被拒绝 解决办法
  9. tensorflow之variables_to_restore
  10. matlab的基本使用
  11. 基于开源SDN控制器的下一代金融云网络的研究与实践
  12. 计算机术语中bug指的是,你知道电脑漏洞为什么叫bug吗?
  13. 3DES解密之网页解密(xhr断点及追栈)
  14. Kubernetes 核心概念介绍
  15. 怎样恢复win10分区误删的数据
  16. 阿里YunOS推开放平台 提高开发者体验
  17. the installation cannot continue as the installer file may be damaged. Download the installer file
  18. 差分隐私理论入门科普
  19. react 前端 实现打印机打印功能
  20. 2021陇剑杯线上——机密内存取证

热门文章

  1. 触摸控件与显示控件介绍
  2. 使用CAS实现SSO.
  3. 使用 VMware 16 RHEL7.7 虚拟机静默安装 Oracle 19c RAC
  4. ​Au入门系列之二:波形编辑
  5. Route命令使用详解
  6. CSMA/CD 协议
  7. Python中reshape函数参数-1的意思?
  8. base64图片压缩到指定大小
  9. Distiller量化学习(1)
  10. 系统突然变慢的处理方案