likes
comments
collection
share

语义部分标签(POS)教程

作者站长头像
站长
· 阅读数 5

简介

在这篇文章中,我们将带领大家学习Python的Spacy库中的语音部分或POS标签的教程。我们将首先了解什么是POS标签,为什么要使用它,最后看看Spacy中的一些例子。

什么是POS标签?

语篇标签或POS标签是根据语境和定义将文本中的一个词标记为一个特定的语篇的过程。用简单的语言来说,我们可以说POS标签是将一个词识别为名词、代词、动词、形容词等的过程。

语义部分标签(POS)教程

为什么使用POS标签

有些词在不同情况下使用时可以有多种功能。POS标签在这里起着至关重要的作用,可以了解该词在句子中的使用情况。POS标签在句子解析、信息检索、情感分析等方面非常有用。

Spacy库中的POS标签

Spacy提供了一系列的POS标签,如NOUN(名词)、PUNCT(标点符号)、ADJ(形容词)、ADV(副词)等。它有一个训练有素的管道和统计模型,使spaCy能够对一个标记或标签的归属作出分类。例如,英语中 "the "后面的一个词很可能是一个名词。

Spacy POS标签列表

在Spacy中,每个标记都被分配了一个来自以下列表的POS标签。

POS描述例子
ADJ形容词*大的,老的,绿色的,不可理解的,第一的*。
ADP介词*在、到、期间*
ADV副词*非常,明天,下来,在哪里,那里*。
AUX助词是,已经(做了),将(做),应该(做)*。
句子连词并且,或者,但是*。
CCONJ协调连词和,或,但是*。
定语限定词*a, an, the*
INTJ插入语*psst, ouch, bravo, hello*.
名词名词*女孩,猫,树,空气,美*。
数字数字*1, 2017, one, seventy-seven, IV, MMXIV*。
部分粒子*'s, not,*
PRON代词我、你、他、她、我自己、他们、某人*。
专业名词专有名词玛丽、约翰、伦敦、北约、HBO*。
PUNCT标点符号*., (, ), ?*
SCONJ从属连词如果,而,那*。
SYM符号*$, %, §, ©, +, -, ×, ÷, =, :),语义部分标签(POS)教程 *
VERB动词*运行,运行,运行,吃,吃了,吃了*。
X其他*SFPKSDPSXMSA*
空间空间

Spacy POS标签的例子

在Spacy库中的POS标签是非常容易的,正如下面的例子所见。我们只是把Spacy对象实例化为doc。我们遍历doc对象并使用pos_ , tag_, 来打印POS标签。Spacy还允许你通过使用spacy.explain()函数访问POS标签的详细解释,该函数也会在同一迭代中与POS标签一起打印。

In [1]:

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Get busy living or get busy dying.")

print(f"{'text':{8}} {'POS':{6}} {'TAG':{6}} {'Dep':{6}} {'POS explained':{20}} {'tag explained'} ")
for token in doc:
print(f'{token.text:{8}} {token.pos_:{6}} {token.tag_:{6}} {token.dep_:{6}} {spacy.explain(token.pos_):{20}} {spacy.explain(token.tag_)}')

[输出] :

text     POS    TAG    Dep    POS explained        tag explained 
Get      AUX    VB     ROOT   auxiliary            verb, base form
busy     ADJ    JJ     amod   adjective            adjective
living   NOUN   NN     dobj   noun                 noun, singular or mass
or       CCONJ  CC     cc     coordinating conjunction conjunction, coordinating
get      AUX    VB     conj   auxiliary            verb, base form
busy     ADJ    JJ     acomp  adjective            adjective
dying    VERB   VBG    xcomp  verb                 verb, gerund or present participle
.        PUNCT  .      punct  punctuation          punctuation mark, sentence closer

细粒度的POS标签

Spacy还提供了一个细粒度的标签,将一个标记进一步归入不同的子类别。例如,当一个词是形容词时,它进一步将其归类为JJR(比较形容词),JJS(最高级形容词),或AFX(词缀形容词)。我们可以通过使用nlp.pipe_labels['tagger']获得Spacy中的细粒度标签列表,如下例所示。

在 [2] 中

import spacy

nlp = spacy.load("en_core_web_sm")
tag_lst = nlp.pipe_labels['tagger']

print(len(tag_lst))
print(tag_lst)

[输出] :

50
['$', "''", ',', '-LRB-', '-RRB-', '.', ':', 'ADD', 'AFX', 'CC', 'CD', 'DT', 'EX', 'FW', 'HYPH', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NFP', 'NN', 'NNP', 'NNPS', 'NNS', 'PDT', 'POS', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'SYM', 'TO', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP', 'WP$', 'WRB', 'XX', '_SP', '``']

细粒度的POS标签列表

下面是一个POS标签列表,它们的描述,细粒度标签,它们的描述,形态学,以及一些例子。

POS描述:POS_Description细粒度标签描述形态学例子
0ADJ形容词AFX词缀Hyph=是Flintstones是一个***历史悠久的家庭。
1ADJ形容词JJ形容词程度=pos这是一个**好的**句。
2ADJ形容词JJR形容词,比较程度=comp这是一个**更好的**句。
3ADJ形容词JJS形容词,超限程度=sup这是***最好的句子。
4ADJ形容词PDT预设者AdjType=pdt PronType=prn醒来是***战斗的一半。
5ADJ形容词PRP$代词,占有式PronType=prs Poss=yes**他**的手臂很疼。
6ADJ形容词WDT判断词PronType=int rel它是蓝色的,***这***是奇怪的。
7ADJ形容词WP$代词,占有式Poss=yes PronType=int rel我们不知道***是谁的。
8ADP定位词IN连词、从句或介词它是在***个盒子里到达的。
9ADV副词EX存在于那里AdvType=ex**那里**是蛋糕。
10ADV副词RB副词程度=位置他跑得**快。
11ADV副词RBR副词,比较程度=comp他跑得**快了。
12ADV副词RBS副词,超限程度=sup他跑得**快。
13ADV副词WRBwh-adverbPronType=int rel***是什么时候?
14句子连接词CC连词,协调性ConjType=coor气球爆裂了,***大家都跳了起来。
15DET限定词DT限定词这**是一个**的句子。
16INTJ插入语UH插入语***Um**,我不知道。
17NOUN名词NN名词,单数或众数数字=sing这是一个**的句子。
18NOUN名词NNS名词,复数数量=plur这些是**词**。
19NOUN名词WP代词,个人PronType=int rel***是谁?
20NUM数字CD心数NumType=card我想要***三样东西。
21部分粒子POS占有式结尾Poss=是弗雷德**的**名字很短。
22部分粒子RP副词,粒子把它**回**!
23部分粒子不等式toPartType=inf 动词形式=inf我想***去。
24PRON代词PRP代词,个人PronType=prs我***希望***你***去。
25专有名词专有名词NNP名词,适当的单数NounType=prop Number=sign**Kilroy**在这里。
26专业名词专有名词NNPS名词,适当的复数NounType=prop Number=plur燧石族**是一个史前家族。
27PUNCT标点符号-LRB-左圆括号PunctType=brck PunctSide=ini圆括号 **(**也叫小括号)
28PUNCT标点符号-RRB-右圆括号PunctType=brck PunctSide=fin圆括号(也叫小括号**)**
29PUNCT标点符号,标点符号, 逗号PunctType=comm我**,**我和我自己。
30PUNCT标点符号:标点符号,冒号或省略号冒号 **:**是一个标点符号
31PUNCT标点符号.标点符号,句子接近PunctType=peri句末的标点符号**.**
32PUNCT标点符号结束语引号PunctType=quot PunctSide=fin"机器学习**"**
33PUNCT标点符号“”结束语引号PunctType=quot PunctSide=fin**””**
34PUNCT标点符号开头的引号PunctType=quot PunctSide=ini**"**机器学习"
35PUNCT标点符号HYPH标点符号,连字符PunctType=破折号ML网站 **-** machinelearningknowledge.ai
36符号标点符号LS列表项标记NumType=ord
37PUNCT标点符号NFP多余的标点符号
38SYM符号#符号,数字符号SymType=numbersign这是哈希**#**符号。
39SYM符号$符号,货币SymType=货币美元**$**是20多种货币的名称。
40SYM符号SYM符号这是一个符号**$**
41VERB动词BES助词 "是"让它**是**。
42VERB动词HVS"有 "的形式我***见过女王
43VERB动词MD动词,情态助词动词类型=mod这***可能会起作用。
44VERB动词VB动词,基本形式verbForm=inf我想去***。
45VERB动词VBD动词,过去式动词形式=fin 时态=过去式这***是一个句子。
46VERB动词语气词动词,动名词或现在分词动词形式=part 时态=pres 侧面=prog我正在***去***。
47动词(VERB动词VBN动词,过去分词动词形式=部分 时态=过去式 语态=过去式宝藏被**丢了。
48动词动词VBP动词,非第三人称单数现在时动词形式=fin 时态=pres我***想去。
49动词(VERB动词VBZ动词,第三人称单数现在时动词形式=fin 时态=pres 数词=sing 人称=3他***想去。
50X其他增加电子邮件example@gmail.com
51X其他FW外来词外国=是西班牙语中的 "你好 "是**Hola**。
52X其他GW多词表达中的附加词
53X其他XX未知
54空间空间ǞǞǞ空间
55NIL缺少标签

形态学

在语言学中,形态学被定义为分析一个词的过程,它们是如何形成的,以及它们与同一语言中其他词的关系,词的结构,以及词的部分,如词干、词根、前缀和后缀。形态学还研究了语篇、语调和重音,以及语境可以改变一个词的发音和含义的方式。

Spacy使用代币文本和细粒度的语音部分标签来产生形态学特征。

在Spacy中,形态学特征被存储在Token.morph下的MorphAnalysis中,这使得我们可以访问单个形态学特征。在下面的例子中,我们通过使用token.morph属性来迭代doc对象的标记并打印所有的形态学特征。然而,我们也可以通过使用morph.get()函数访问任何特定类型的形态学特征。token.morph.to_dict()函数以字典格式返回所有形态学特征。

In [2]:

import

[Out] :

Pipeline: ['tok2vec', 'tagger', 'parser', 'ner', 'attribute_ruler', 'lemmatizer']
I
Case=Nom|Number=Sing|Person=1|PronType=Prs
['Sing']
{'Case': 'Nom', 'Number': 'Sing', 'Person': '1', 'PronType': 'Prs'}

was
Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
['Sing']
{'Mood': 'Ind', 'Number': 'Sing', 'Person': '3', 'Tense': 'Past', 'VerbForm': 'Fin'}

heading
Aspect=Prog|Tense=Pres|VerbForm=Part
[]
{'Aspect': 'Prog', 'Tense': 'Pres', 'VerbForm': 'Part'}

towards
[]
{}

North
NounType=Prop|Number=Sing
['Sing']
{'NounType': 'Prop', 'Number': 'Sing'}

.
PunctType=Peri
[]
{'PunctType': 'Peri'}

计算Spacy中的POS标签

在下面的例子中,我们将POS标记属性传递给Doc.count()函数,该函数返回一个频率字典,key为POS属性值,其频率为值。在for循环的帮助下,我们正在打印POS标记和它的计数。

In [3]:

import

[Out] :

{87: 2, 94: 3, 84: 2, 100: 2, 85: 2, 90: 2, 92: 1}
  84. ADJ  : 2
  85. ADP  : 2
  87. AUX  : 2
  90. DET  : 2
  92. NOUN : 1
  94. PART : 3
 100. VERB : 2

计算细粒度的标签

在下面的例子中,我们将TAG标记属性传递给Doc.count(),它将返回一个频率字典,key为TAG属性值,频率为值。在for循环的帮助下,我们正在打印POS标签和它的计数。

在 [4]:

import

[输出] :

{15267657372422890137: 2, 10554686591937588953: 3, 15308085513773655218: 3, 17109001835818727656: 1, 1292078113972184607: 1, 74: 1, 12646065887601541794: 1}
74. POS : 1
1292078113972184607. IN  : 1
10554686591937588953. JJ  : 3
12646065887601541794. .   : 1
15267657372422890137. DT  : 2
15308085513773655218. NN  : 3
17109001835818727656. VBD : 1

在Spacy中实现POS标签的可视化

在Spacy中,我们可以使用dispacy.serve()函数将语篇标签和句法依赖关系可视化,该函数接收单个Doc或Doc对象的列表并返回一个漂亮的可视化。

在[6]中。

import

[Out] :

语义部分标签(POS)教程

然而,我们可以通过传递一列参数来调整显示函数,从而获得不同的可视化效果,这些参数的重要性将在下面说明。

参数

distance: 象征性凹陷之间的距离。 **compact:**颜色的紧凑性。 **color:**字体的颜色。 **bg:**可视化的背景颜色。 font:可视化中的字体风格。

In [7]:

import

[Out] :

语义部分标签(POS)教程

在Spacy中实现长文本中POS标签的可视化

长文本在一排显示时可能会变得难以阅读,所以将它们逐句可视化往往会更好。Displacy支持渲染Doc和Span对象,以及Doc或Span的列表。我们可以不把完整的Doc传给displacy.serve,而是传入一个列表doc.sents。这将为每个句子创建一个可视化。

在[8]中。

import

[Out] :

语义部分标签(POS)教程

语义部分标签(POS)教程

参考资料 -Spacy文档

The postTutorial on Spacy Part of Speech (POS) Taggingappeared first onMLK - Machine Learning Knowledge.