专栏首页AI小白入门初学者|一起来看看词性标注

初学者|一起来看看词性标注

点击上方蓝色字体,关注AI小白入门哟

跟着博主的脚步,每天进步一点点

本文根据自己的学习过程以及查阅相关资料的理解,对自然语言基础技术之词性标注进行了相对全面的简绍,包括定义、目前的难点以及常见方法,还推荐了一大波python实战利器,并且包括工具的用法。

词性定义

维基百科上对词性的定义为:In traditional grammar, a part of speech (abbreviated form: PoS or POS) is a category of words (or, more generally, of lexical items) which have similar grammatical properties.

词性指以词的特点作为划分词类的根据。词类是一个语言学术语,是一种语言中词的语法分类,是以语法特征(包括句法功能和形态变化)为主要依据、兼顾词汇意义对词进行划分的结果。

从组合和聚合关系来说,一个词类是指:在一个语言中,众多具有相同句法功能、能在同样的组合位置中出现的词,聚合在一起形成的范畴。词类是最普遍的语法的聚合。词类划分具有层次性。如汉语中,词可以分成实词和虚词,实词中又包括体词、谓词等,体词中又可以分出名词和代词等。

词性标注就是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程,这也是自然语言处理中一项非常重要的基础性工作,所有对于词性标注的研究已经有较长的时间,在研究者长期的研究总结中,发现汉语词性标注中面临了许多棘手的问题。

中文词性标注的难点

汉语是一种缺乏词形态变化的语言,词的类别不能像印欧语那样,直接从词的形态变化上来判别。

常用词兼类现象严重。《现代汉语八百词》收取的常用词中,兼类词所占的比例高达22.5%,而且发现越是常用的词,不同的用法越多。由于兼类使用程度高,兼类现象涉及汉语中大部分词类,因而造成在汉语文本中词类歧义排除的任务量巨大。

研究者主观原因造成的困难。语言学界在词性划分的目的、标准等问题上还存在分歧。目前还没有一个统的被广泛认可汉语词类划分标准,词类划分的粒度和标记符号都不统一。词类划分标准和标记符号集的差异,以及分词规范的含混性,给中文信息处理带来了极大的困难。

词性标注常见方法

关于词性标注的研究比较多,这里介绍一波常见的几类方法,包括基于规则的词性标注方法、基于统计模型的词性标注方法、基于统计方法与规则方法相结合的词性标注方法、基于深度学习的词性标注方法等。

基于规则的词性标注方法

基于规则的词性标注方法是人们提出较早的一种词性标注方法,其基本思想是按兼类词搭配关系和上下文语境建造词类消歧规则。早期的词类标注规则一般由人工构建。

随着标注语料库规模的增大,可利用的资源也变得越来越多,这时候以人工提取规则的方法显然变得不现实,于是乎,人们提出了基于机器学习的规则自动提出方法。

基于统计模型的词性标注方法

统计方法将词性标注看作是一个序列标注问题。其基本思想是:给定带有各自标注的词的序列,我们可以确定下一个词最可能的词性。

现在已经有隐马尔可夫模型(HMM)、条件随机域(CRF)等统计模型了,这些模型可以使用有标记数据的大型语料库进行训练,而有标记的数据则是指其中每一个词都分配了正确的词性标注的文本。

基于统计方法与规则方法相结合的词性标注方法

理性主义方法与经验主义相结合的处理策略一直是自然语言处理领域的专家们不断研究和探索的问题,对于词性标注问题当然也不例外。

这类方法的主要特点在于对统计标注结果的筛选,只对那些被认为可疑的标注结果,才采用规则方法进行歧义消解,而不是对所有情况都既使用统计方法又使用规则方法。

基于深度学习的词性标注方法

可以当作序列标注的任务来做,目前深度学习解决序列标注任务常用方法包括LSTM+CRF、BiLSTM+CRF等。

值得一提的是,这一类方法近年来文章非常多,想深入了解这一块的朋友们可以看这里:https://github.com/sebastianruder/NLP-progress/blob/master/english/part-of-speech_tagging.md

最后再放一个词性标注任务数据集(人民日报1998词性标注数据集):

https://pan.baidu.com/s/1fW908EQmyMv0XB5i0DhVyQ

词性标注工具推荐

Jieba

“结巴”中文分词:做最好的 Python 中文分词组件,可以进行词性标注。

Github地址:https://github.com/fxsjy/jieba

# 安装:pip install jieba
# 国内源安装更快:pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
# 先导包:jieba.posseg.dt 为默认词性标注分词器
# 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。

import jieba.posseg as pseg
words = pseg.cut("我爱自然语言处理技术!")
for word, pos in words:
    print(word, pos)

我 r
爱 v
自然语言 l
处理 v
技术 n
! x

SnowNLP

SnowNLP是一个python写的类库,可以方便的处理中文文本内容。

Github地址:https://github.com/isnowfy/snownlp

# 安装:pip install snownlp
# 国内源安装:pip install snownlp  -i https://pypi.tuna.tsinghua.edu.cn/simple
# 使用snownlp进行词性标注
from snownlp import SnowNLP
model = SnowNLP(u'我爱自然语言处理技术!')
for word, pos in model.tags:
    print(word, pos)

我 r
爱 v
自然 n
语言 n
处理 vn
技术 n
! w

THULAC

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。

Github地址:https://github.com/thunlp/THULAC

# 安装:pip install thulac
# 国内源安装:pip install thulac     -i https://pypi.tuna.tsinghua.edu.cn/simple
# 使用thulac进行词性标注
import thulac
thulac_model = thulac.thulac()
wordseg = thulac_model.cut("我爱自然语言处理技术!")
print(wordseg)

Model loaded succeed
[['我', 'r'], ['爱', 'v'], ['自然', 'n'], ['语言', 'n'], ['处理', 'v'], ['技术', 'n'], ['!', 'w']]

StanfordCoreNLP

斯坦福NLP组的开源,支持python接口。

Github地址:https://github.com/Lynten/stanford-corenlp

# 安装:pip install stanfordcorenlp
# 国内源安装:pip install stanfordcorenlp -i https://pypi.tuna.tsinghua.edu.cn/simple
# 使用stanfordcorenlp进行词性标注
# 同时支持英文和中文的词性标注
from stanfordcorenlp import StanfordCoreNLP
zh_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27', lang='zh')
s_zh = '我爱自然语言处理技术!'
word_pos_zh = zh_model.pos_tag(s_zh)
print(word_pos_zh)

[('我爱', 'NN'), ('自然', 'AD'), ('语言', 'NN'), ('处理', 'VV'), ('技术', 'NN'), ('!', 'PU')]


eng_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27')
s_eng = 'I love natural language processing technology!'
word_pos_eng = eng_model.pos_tag(s_eng)
print(word_pos_eng)

[('I', 'PRP'), ('love', 'VBP'), ('natural', 'JJ'), ('language', 'NN'), ('processing', 'NN'), ('technology', 'NN'), ('!', '.')]

HanLP

HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。

Github地址:https://github.com/hankcs/pyhanlp

# 安装:pip install pyhanlp
# 国内源安装:pip install pyhanlp  -i https://pypi.tuna.tsinghua.edu.cn/simple
# 使用pyhanlp进行词性标注
from pyhanlp import *
s = '我爱自然语言处理技术!'
word_seg = HanLP.segment(s)
for term in word_seg:
    print(term.word, term.nature)

我 rr
爱 v
自然语言处理 nz
技术 n
! w

NLTK

NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。

Github地址:https://github.com/nltk/nltk 官网:http://www.nltk.org/

# 安装:pip install nltk
# 国内源安装:pip install nltk  -i https://pypi.tuna.tsinghua.edu.cn/simple
import nltk
s = 'I love natural language processing technology!'
s = nltk.word_tokenize(s)
s_pos = nltk.pos_tag(s)
print(s_pos)

[('I', 'PRP'), ('love', 'VBP'), ('natural', 'JJ'), ('language', 'NN'), ('processing', 'NN'), ('technology', 'NN'), ('!', '.')]

SpaCy

工业级的自然语言处理工具,遗憾的是不支持中文。 Gihub地址:https://github.com/explosion/spaCy 官网:https://spacy.io/

# 安装:pip install spaCy
# 国内源安装:pip install spaCy  -i https://pypi.tuna.tsinghua.edu.cn/simple
# 下载不了模型,需要python -m spacy download en。 The easiest solution is to re-run the command as admin(意思是用用户管理权限打开CMD下载即可)
import spacy
eng_model = spacy.load('en')
s = 'I love natural language processing technology!'
# 词性标注
s_token = eng_model(s)
for token in s_token:
    print(token, token.pos_, token.pos)

I PRON 94
love VERB 99
natural ADJ 83
language NOUN 91
processing NOUN 91
technology NOUN 91
! PUNCT 96

代码已上传:https://github.com/yuquanle/StudyForNLP/blob/master/NLPbasic/POS.ipynb

参考:

1.统计自然语言处理

2.中文信息处理报告-2016

The End

本文分享自微信公众号 - AI小白入门(StudyForAI),作者:yuquanle

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 初学者|什么是语义角色标注

    本文记录自然语言基础技术之语义角色标注学习过程,包括定义、常见方法、例子、以及相关评测,最后推荐python实战利器,并且包括工具的用法。

    yuquanle
  • 一天快速入门python

    Python 是由Guido Van Rossum在 90 年代早期设计,现在是最常用的编程语言之一。特别是人工智能的火热,再加之它的语法简洁且优美,实乃初学者...

    yuquanle
  • Macheine Learning Yearning学习笔记(六)

    Chapter 33、Why we compare to human-level performance(为什么我们要比较人类水平的表现)

    yuquanle
  • 初学者|一起来看看词性标注

    本文根据自己的学习过程以及查阅相关资料的理解,对自然语言基础技术之词性标注进行了相对全面的简绍,包括定义、目前的难点以及常见方法,还推荐了一大波python实战...

    zenRRan
  • Git Commit校验

    在我们iOS项目的根目录下执行下面命令:这条命令会在项目根目录生成package.json配置文件。

    用户6094182
  • 从惰性IO说起_Haskell笔记6

    从硬盘读文件时并不会一次性全读入内存,而是一点一点的流式读取。文本文件的话,默认buffer是line-buffering,即一次读一行,二进制文件的话,默认b...

    ayqy贾杰
  • https站点无法接入百度联盟?—— 附解决方案

    做网站这么久,从一开始的兴趣,到现在网站越来越大,流量越来越多,服务器开销也是越来越大。在不影响用户体验的情况下,适当的将流量变现,不仅可以节省服务器费用,有时...

    神无月
  • 清华,就要成为地表最强研究机构了

    虽然CS单项排名,北邮排名超过了伯克利,也不要光顾着嘲讽,就忘了这张榜上,清华才是第一。

    量子位
  • 软件国产化的应用牵此,国企大哥要带头

    信息安全在“去IOE”后国产化日益凸显,国内IT软、硬件企业正进一步抱团,合力寻求突围的路径。 6月18日举办的2014国产软件产业链合作峰会上,中国首个《大型...

    人称T客
  • iOS开发之App间账号共享与SDK封装

    上篇博客《iOS逆向工程之KeyChain与Snoop-it》中已经提到了,App间的数据共享可以使用KeyChian来实现。本篇博客就实战一下呢。开门见山,本...

    lizelu

扫码关注云+社区

领取腾讯云代金券