跳转至

词性标注

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

评论