nltk.pos_tag()
是如何工作的?它是否涉及任何语料库的使用?我找到了一个源代码(nltk.tag
- NLTK 3.0 文档),上面写着
_POS_TAGGER = 'taggers/maxent_treebank_pos_tagger/english.pickle'.
加载 _POS_TAGGER 给出一个对象:
nltk.tag.sequential.ClassifierBasedPOSTagger
,似乎没有来自语料库的训练。当我在名词前连续使用几个形容词时,标记是不正确的(例如 the quick brown fox)。我想知道我是否可以通过使用更好的标记方法或以某种方式使用更好的语料库进行训练来改善结果。有什么建议么?
最佳答案
根据 the source code , pos_tag
使用 NLTK 目前推荐的词性标注器,即 2018 年的 PerceptronTagger
。
Here is the documentation对于 PerceptronTagger
和 here is the source code .
要使用标记器,您只需调用 pos_tag(tokens)
。这将调用 PerceptronTagger
的默认构造函数,它使用“预训练”模型。这是一个NLTK分发的pickled模型,文件位于:taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle
。这是在华尔街日报语料库上训练和测试的。
或者,您可以实例化一个 PerceptronTagger
并通过提供标记示例自行训练其模型,例如:
tagger = PerceptronTagger(load=False) # don't load existing model
tagger.train([[('today','NN'),('is','VBZ'),('good','JJ'),('day','NN')],
[('yes','NNS'),('it','PRP'),('beautiful','JJ')]])
文档链接到 this blog post这很好地描述了理论。
TL;DR:PerceptronTagger
是一个贪婪平均感知器标记器。这基本上意味着它有一个与特征相关的权重字典,它用来预测给定特征集的正确标签。在训练期间,标记器猜测一个标签并根据猜测是否正确调整权重。 “平均”表示权重调整是迭代次数的平均值。
关于python - nltk.pos_tag() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016545/