【问题标题】:Custom tagger NLTK 3自定义标记器 NLTK 3
【发布时间】:2016-11-18 17:21:34
【问题描述】:

我正在使用 nltk 的默认标记器来获取单词的 POS 标记,但我没有得到预期的结果:

>>> nltk.pos_tag(nltk.tokenize.word_tokenize("I want a watch"))
[('I', 'PRP'), ('want', 'VBP'), ('a', 'DT'), ('watch', 'NN')]
>>> nltk.pos_tag(nltk.tokenize.word_tokenize("Lets watch a movie"))
[('Lets', 'NNS'), ('watch', 'VBP'), ('a', 'DT'), ('movie', 'NN')]

正如您在上面看到的,pos_tag 函数正确地标记了单词watch。但在以下情况下:

>>> nltk.pos_tag(nltk.tokenize.word_tokenize("I want to read a book"))
[('I', 'PRP'), ('want', 'VBP'), ('to', 'TO'), ('read', 'VB'), ('a', 'DT'), ('book', 'NN')]

>>> nltk.pos_tag(nltk.tokenize.word_tokenize("I want to book a ticket"))
[('I', 'PRP'), ('want', 'VBP'), ('to', 'TO'), ('book', 'NN'), ('a', 'DT'), ('ticket', 'NN')]

它错误地预测了单词book 的标签。 我知道我们可以构建一个自定义标注器,但我不希望仅仅为了一个词从头开始构建一个标注器。我希望提高单词book 的标注器的准确性。我提到了这个answer,但是最新版本好像没有nltk.tag._POS_TAGGER这个方法。

是否有任何可能的解决方法?

【问题讨论】:

  • 我在我的机器 (NLTK3) 上将它正确标记为 'VB'。检查这个Python NLTK pos_tag not returning the correct part-of-speech tag
  • @MosesKoledoye 我同意您的评论,即 NLTK 并不完美。但我想修改现有算法的权重,以便它正确地为单词“book”分配标签
  • FWIW,Stanford POS 标记器(虽然速度较慢)为我提供了更好的结果。默认标记器甚至无法正确处理“The quick brown fox jumped over the lazy dog”。
  • @Ares 感谢您的洞察力。我也会尝试斯坦福标记器!

标签: python python-3.x nlp nltk


【解决方案1】:

NLTK pos_tag 默认使用PerceptronTagger。但是您可以使用已在各自数据集上训练的其他标记器

在以下情况下,使用了treebank pos tagger

import nltk

tagger = nltk.data.load('taggers/maxent_treebank_pos_tagger/english.pickle')
t = tagger.tag(nltk.tokenize.word_tokenize("I want to book a ticket"))
print(t)
# [('I', 'PRP'), ('want', 'VBP'), ('to', 'TO'), ('book', 'VB'), ('a', 'DT'), ('ticket', 'NN')]
#                                                         ^^ rightly tagged as verb

如果您仍然没有得到想要的结果,您可以更改标记器。

人们还可以评估语料库上的标注器,以了解预期的准确度:

>>> corpus = nltk.corpus.treebank.tagged_sents()
>>> tagger.evaluate(corpus)
0.9956891414041082

【讨论】:

  • 您的回答似乎很公平。有什么方法可以训练现有的训练有素的标注员吗?在您的回答中,我们能否在另一个语料库上进一步训练预训练的树库 pos_tagger?
  • @HiteshPaul 如果这个答案解决了你的问题,你可以考虑接受它。应该有解决方法来提高标记器的准确性,但这不是原始问题的一部分
  • 我尝试使用“嘿,请您为我预订一个节目吗?”这句话。但它给出了不正确的标签。有没有办法训练一个预先训练好的标注器??
  • @HiteshPaul 我还没有找到重新训练标注器的方法,但您可以继续尝试其他标注器,直到获得好的结果,请查看Stanford POS tagger
猜你喜欢
  • 2011-04-25
  • 2011-08-20
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2013-01-09
  • 2016-02-16
  • 2011-09-08
  • 1970-01-01
相关资源
最近更新 更多