当前位置: 首页 > news >正文

自然语言处理-词性标注的基本概念

在自然语言处理过程中,进行词性标注是很有必要的一个步骤,词性揭示了一个词的类别,识别每个词的词性可以分析句子的语法和结构,从而为后续的命名实体识别、句法分析、情感分析、信息抽取以及机器翻译等文本分析任务提供必要且有用的信息。相比较英文词性标注,中文词性标注的难度要更大,很多中文词汇有多个词性,并且中文在做词性标注之前必须要对句子进行分词,这大大增加了词性标注的复杂度与难度。

本篇博客主要介绍了词性标注的基本原理与发展过程,然后提供了一些常用的统计机器学习方法或基于规则的方法进行词性标注,希望对读者产生一些启发。

词性标注的基本概念

词性是词的基本语法属性,根据词在句子中的角色与功能,词性可以分为主语、谓语、定语、状语、补语等。不同语言有不同的词性划分体系,汉语中,经常将词分为两大类:实词和虚词,其中虚词包括连词、介词、助词、叹词等,而实词主要包括名词、动词、形容词等。在英语中,词性被划分为10类,包括名词、动词、形容词、副词、连词、介词、叹词、代词和冠词。

词性标注指对句子中的每个词的词性进行标注的过程。通过词性标注可以分析句子的语法规则,短语结构和句子成分之间的关系。

词性标注集由标签与词构成,包含了一些前人标注完成的词集合。常见的词性标注集有PKU(北京大学)词性标注集、863词性标注集、CTB(Chinese Treebank,中文树库)词性标注集等,常见的英语词性标注集有布朗语料库(Brown corpus)的词性标注集、宾州树库(Penn Treebank)的词性标注集等。一个常见词性标注集如下表。

序号符号词性名称示例序号符号词性名称示例
1Ag形语素前程似锦23nt机构团体国防科大
2a形容词美丽24nx外文字符Win11
3ad副形词韶华易逝25nz其他专名京港澳高速公路
4an名形词外交26o拟声词哈哈
5Bg区别语素赤橙黄27p介词为人民服务
6b区别词慢性咽炎28q量词首次
7c连词支持与帮助29Rg代语素于斯为盛
8Dg副语素交谈甚欢30r代词本书
9d副词进一步交流31s处所词家里的空调
10e叹词32Tg时语素现阶段
11f方位词眼睛里33t时间词2025年
12h前接成分准新郎34u助词技术的特点
13i成语义无反顾35Vg动语素洗了个舒服的澡
14j简称略词科教兴国36v动词扩大
15k后接成分朋友们37vd副动词持续升温

我们可以使用Python中的NLTK库查看语料库中词性标注结果,代码如下:

import nltk# nltk.download('brown') # 如果没有下载过布朗语料库需要先进行下载,下载以后即可注释掉
# nltk.download('treebank')
print(nltk.corpus.brown.tagged_words())  # 输出结果:[('The', 'AT'), ('Fulton', 'NP-TL'), ...]
print(nltk.corpus.treebank.tagged_words())  # 输出结果:[('Pierre', 'NNP'), ('Vinken', 'NNP'), (',', ','), ...]brown_tagged = nltk.corpus.brown.tagged_words()  # 获取布朗语料库中的标记
tag_fd = nltk.FreqDist(tag for (word, tag) in brown_tagged)  # 统计词性使用频率
print(tag_fd.most_common(10))  # 输出结果:[('NN', 152470), ('IN', 120557), ('AT', 97959), ('JJ', 64028), ...]

基于规则的词性标注方法

词典

在了解到词性的基本概念与常见的词性标注集后,我们现在已经对词性标注的结果有了一个比较清晰的认知,所谓词性标注就是给不同的词打上对应的标签。

基于规则的词性标注方法是最早提出的词性标注方法,其主要根据语言学规则、专业知识和经验手动设计,也可以通过机器学习方法学习到。其基本思想是按兼类词搭配关系和上下文语境来建造词性消歧规则,主要包括词汇信息规则和上下文信息规则两类。

中文基于规则的词性标注方法步骤主要为:

  1. 构建词典和规则库。利用专家经验构建尽可能完善的词典和规则库,这种方法虽然易于实现,但仍有穷尽,无法覆盖到所有的规则。
  2. 分词。基于已构建的词典对待标注文本进行分词处理。
  3. 词典匹配。查词典,匹配待标注文本中各词所有可能的词性标记。
  4. 规则匹配。应用规则库中的规则进行词性消歧,,逐步删除初始标注结果中的错误标记。

基于上述步骤,我们来使用Python代码认识一下词典。

from nltk.corpus import wordnet as wn # 导入WordNet词典synsets = wn.synsets('help')  # 在词典中查询"love"的所有同义项
posList = [] # 保存词性信息
for synset in synsets:  # 获取词words = synset.lemma_names()  # 获取词for word in words:  # 遍历该义项中的所有词if word == 'help':  # 获取并保存“love”的词性posList.append(synset.pos())
from collections import Counterprint(Counter(posList))  # Counter({'n': 6, 'v': 4})

正则表达式

下面展示一下使用正则表达式进行基于规则的匹配,输出匹配精确度

from nltk.tag.sequential import RegexpTaggerreggexp_tagger = RegexpTagger([(r'^-?\d+(.\d+)?$', 'CD'),  # cardinal numbers(数字)(r'(The|the|A|a|An|an)$', 'AT'),  # articles(冠词)(r'.*able$', 'JJ'),  # adjectives (形容词)(r'.*(ness)$', 'NN'),  # nouns (名词单数形式)(r'.*ly', 'RB'),  # adverbs (副词)(r'.*(s)$', 'NNS'),  # plural nouns (名词复数形式)(r'.*ing$', 'VBG'),  # gerunds (动词的现在分词)(r'.*ed$', 'VBD'),  # past tense verbs (动词的过去式)(r'.*', 'NN')  # nouns (默认为名词)
])
from nltk.corpus import browntagged_sents = brown.tagged_sents()
test_data = tagged_sents[0:int(len(tagged_sents) * 0.1)]
print(reggexp_tagger.evaluate(test_data))  # 输出结果,准确率为:0.29721798738603233

基于统计机器学习的词性标注方法

常用的统计机器学习模型包括隐马尔可夫模型、最大熵模型、条件随机场等,基于统计机器学习的词性标注方法利用大规模已标注语料库训练机器学习模型,通过词的统计规律来预测词标签。其基本思想是将词性标注看作一个序列标注问题,即给定一段词预测下一个词的概率。

相关文章:

  • requests库
  • Edwards爱德华STP泵软件用于操作和监控涡轮分子泵
  • RabbitMQ-运维
  • 单调栈所有模版型题目(1)
  • 使用 NV‑Ingest、Unstructured 和 Elasticsearch 处理非结构化数据
  • vue3 ts 写一个滑动选择的日期选择器组件
  • 值拷贝、浅拷贝和深拷贝
  • 一、每日Github软件分享----QuickGo外链直达工具​
  • LeetCode面试题 17.21 直方图的水量
  • ABP vNext + EF Core 实战性能调优指南
  • 浏览器自动化与网络爬虫实战:工具对比与选型指南
  • Liunx ContOS7 安装部署 Docker
  • Vue——Axios
  • ESP32开发入门(七):HTTP开发实践
  • Spring框架(1)
  • Idea Code Templates配置
  • CCDO|企业数字化转型:机制革新与人才培育的双重引擎
  • 【库(Library)、包(Package)和模块(Module)解析】
  • 关系模式-无损连接和保持函数依赖的判断
  • WPF 3D图形编程核心技术解析
  • “80后”赵亮出任上海普陀区委副书记
  • 850亿元!2025年中央金融机构注资特别国债(一期)拟第一次续发行
  • 本周看啥|喜欢二次元的观众,去电影院吧
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 中华人民共和国和俄罗斯联邦关于全球战略稳定的联合声明