NLP从零开始------5基础文本处理之词性标注

1.词性规范

        现代汉语中的词性可分为实词和虚词,共有12种词性。实词有名词、动词、形容词等;虚词有副词、介词、连词等。中文词性通常会通过一些简单字母编码对词性进行标注,如动词、名词、形容词分别用“v”、“n”、“adj”表示。

        词性标注是指为分词结果中的每个词标注一个词性的过程,也就是确定每个词是名词、动词、形容词或其他词性的过程。 中文词性标注相比与英文词性标注有一定的难度,这是因为中文不像英文可以通过词的形态变化判断词的词性。一个中文词可能有多种词性,在不同的句子中表现的意思也大不相同。例如,“学习能使我进步”这句话,“学习”是名词,而“我要好好学习”这句话,“学习”是动词。 基于规则的词性标注。 基于规则的标注方法是较早的一种词性标注方法,这种方法需要获取能表达一定的上下文关系及其相 关语境的规则库。一个好的规则库的获取是比较困难的,主要的获取方式是通过人工编制繁杂的语法或语义信息的词典 和规则系统,比较费时费力,并且难以保证规则的准确性。

        基于统计的词性标注。 上世纪七十年代末到八十年代初,开始得到应用。具有代表性的是基于统计模型(n元语法模型和马尔 可夫转移矩阵)的词性标注系统,通过概率统计的方法进行自动词性标注。 基于统计的方法主要有基于最大熵的词性标注、基于统计最大概率输出的词性标注和基于隐马尔科夫 模型(HMM)的词性标注。 基于统计的标注方法会抑制小概率事件的发生,受到长距离搭配上下文的限制,但有时通过规则的方 法会更为容易实现。 基于规则的标注和基于统计的标注方法在使用的过程中,各有所长,但都存在一些缺陷。因此,就有了将基于规则与统计相结合的词性标注方法,此方法具有效率更高,处理能力强等特点。

        事实上,中文的词性标注至今还没有统一的标注标准,使用较为广泛有宾州树库和北大词性标注规范。本文采用北大词性标注规范,部分词性编码如下表所示。

        上面展示了部分词性标注的编码及其注解,通过这个标准可以对一些句子段落进行词性标注。 句子“在1998年来临之际,我十分高兴地通过中央人民广播电台、中国国际广播电台和中央电视台,向全国各族人民,向香港特别行政区同胞、澳门和台湾同胞、海外侨胞,向世界各国的朋友们,致以诚挚的问候和良好的祝愿!”的标注结果如下图所示。

2.jieba词性标注

        jieba词性标注是基于规则与统计相结合的词性标注方法。jieba词性标注与其分词的过程类似,利用词典匹配与HMM共同合作完成词性标注。其词性标注流程可概括为以下两个步骤。

         如果是汉字,那么将基于前缀词典构建有向无环图,对有向无环图计算最大概率路径,同时在前缀字典中 查找所分词的词性。 如果没有找到,那么将其标注为“x”(表示词性未知)。 如果在标注过程中标志为未知,并且该词为未登陆词,那么通过HMM进行词性标注。

        如果不是汉字,那么使用正则表达式判断词的类型,并赋予对应的词性,其中“x”表示未知词性“m”表示 数词,“eng”表示英文词。

                                                jieba词性标注的流程如下图所示。

        

以“去森林公园爬山”为例,jieba词性标注的流程如下:

         1. 加载离线统计词典。离线统计词典放在chapte\data文件夹下。词典的每一行有3列,第一列是词,第二列是词频,第三列是词性。离线统计词典部分内容如下表所示。

词频

词性

1号店

3

n

1號店

3

n

4S

3

n

A

3

n

……

……

……

BB

3

n

……

……

……

        2. 构建前缀词典。 通过离线统计词典构建前缀词典。

        如统计词典中的 词“森林公园”的前缀分别是“森”、“森林”、 “森林公”“公园”的前缀是“公”;“爬山”的 前缀是“爬”。 统计词典中所有的词形成的前缀词典如下表所示。

前缀

词频

词性

   

123402

v

   

742

n

   

8581

ng

   

5628

n

   

1914

zg

   

4046 

v

   

23539 

n

  森林

 5024

n

森林公园

3

n

  爬山

117

n

        3. 构建有向无环图。

        首先,基于前缀词典对输入文本“去森林公园爬山”进行切分。对于“去”,没有前缀,没有其他匹 配词,划分为单个词;对于“森”,则有“森”“森林”和“森林公园”3种方式;对于“林”也只有 一种划分方式;对于“公”,则有“公”“公园”两种划分方式,依次类推,可以得到每个字开始的 前缀词的切分式。

        然后,构建字的映射列表。在jieba分词中,每个字都是通过在文本中的位置标记,因此可以构建一个 以每个字开始位置与相应切分的末尾位置构成的映射列表。构成的映射列表如下图所示。

位置

映射

注解

0

0: [0]

表示00映射,即开始位置为0,末尾位置为0对应的词,就是“去”

1

1: [1,2,4]

表示111214的映射,即开始位置为1,末尾位置为分别为124的词,则有“森”“森林”和“森林公园”这3个词

2

2: [2]

22

3

3: [3,4]

3334,“公”“公园”

4

4: [4]

44,“园”

5

5: [5,6]

5556,“爬”,“爬山”

6

6: [6]

66,“山”

        最后,根据映射列表构建有向无环图。对于每一种切分,将相应的首尾位置相连。最终构成一个有向 无环图,如下图所示。

  

        4. 计算最大概率路径。

        得到有向无环图后,每条有向边的权重(用概率值表示)可以通过前缀词典的词频获得。在有向无环图中,从起点到终点存在多条路径,每一条路径代表一种分词结果。 在所有的路径中,需要计算一条概率最大的路径,也就是在所有切分结果中选取概率最大的一种切分。 jieba利用动态规划法计算概率最大路径,通过从句子的最后一个字开始倒序遍历句子的每个字的方式,计算不同分词结果的概率对数得分。 得到概率最大路径后,就可获得分词的结果,同时在前缀字典中查找所分词的词性,得到分词后的词性标注。

        5.jieba词性标注在实际应用中使用psg.cut函数命令实现,不需要另外编写命令。对“去森林公园爬山”进行词性标注代码如下图所示。

import jieba.posseg as psg
sent='去森林公园爬山。'
for w,t in psg.cut(sent):
    print(w,'/',t)

得到如下结果

D:\ana\envs\nlp\python.exe D:\pythoncode\nlp\jiw.py 
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\86130\AppData\Local\Temp\jieba.cache
Loading model cost 0.550 seconds.
Prefix dict has been built successfully.
去 / v
森林公园 / n
爬山 / n
。 / x

进程已结束,退出代码为 0

        词性标注结果中“。”被标注为x。因为句号是标点符号的一种,所以被标注为未知词性。

         在实际应用,一些字典中不存在的词被标注为未知词性“x”,这对词性统计等处理结果会有一定的影响,因此在使用jieba自定义字典时,要尽可能完善词典信息。

  • 32
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值