词性标注
1. 概述
1.1 定义
词性标注(Part-of-Speech Tagging)是自然语言处理中的一项基础任务,它为文本中的每个词语分配一个合适的词性标签,如名词、动词、形容词等。
1.2 作用
- 为句法分析提供基础
- 辅助语义理解和命名实体识别
- 提升机器翻译、文本分类等上层任务的准确率
- 消除词汇歧义
1.3 原理
1.3.1 基于规则的方法
依赖语言学专家制定的规则判断。准确率有限,难以覆盖所有情况,维护成本高。
1.3.2 基于统计的方法
利用大量已标注语料训练模型,考虑词语的上下文信息。 常用的算法:HMM、CRF、最大熵模型
1.3.3 基于深度学习的方法
使用词向量表示,自动学习特征。能够处理复杂的语言现象且准确率高。
1.4 常用工具
- jieba
- SnowNLP
- LTP(哈工大语言技术平台)
- THULAC(清华中文词法分析工具)
- NLTK(英文)
- spaCy(英文)
2. 使用 jieba库 标注词性
2.1 词性标签
CHINESE_POS_TAGS = {
'n': '名词',
'v': '动词',
'a': '形容词',
'd': '副词',
'm': '数词',
'q': '量词',
'r': '代词',
'p': '介词',
'c': '连词',
'u': '助词',
'f': '方位词',
'ns': '地名',
'nr': '人名',
'nt': '机构名',
'nw': '作品名',
't': '时间词'
}
2.2 jieba词性标注
在jieba库中常用jieba.posseg(Part-of-Speech Segmentation)模块进行词性标注。它在将文本切割成词语的同时,为每个词语标注其词性。
import jieba
import jieba.posseg as pseg
text = "微积分的本质在于连接宏观与微观世界,通过微分和积分的概念来理解变化和累积的过程。"
words = pseg.lcut(text)
print("列表输出:")
print([(word, flag) for word, flag in words])
print()
print("分行输出:")
for word, flag in words:
print(f"{word} {flag}")
列表输出:
[('微积分', 'n'), ('的', 'uj'), ('本质', 'n'), ('在于', 'v'), ('连接', 'v'), ('宏观', 'n'), ('与', 'p'), ('微观世界', 'n'), (',', 'x'), ('通过', 'p'), ('微分', 'n'), ('和', 'c'), ('积分', 'ad'), ('的', 'uj'), ('概念', 'n'), ('来', 'v'), ('理解', 'v'), ('变化', 'vn'), ('和', 'c'), ('累积', 'v'), ('的', 'uj'), ('过程', 'n'), ('。', 'x')]
分行输出:
微积分 n
的 uj
本质 n
在于 v
连接 v
宏观 n
与 p
微观世界 n
, x
通过 p
微分 n
和 c
积分 ad
的 uj
概念 n
来 v
理解 v
变化 vn
和 c
累积 v
的 uj
过程 n
。 x