1

我正在尝试为 Voise 助手构建一个 POS 标记器。但是,nltk 的 pos 标记器 nltk.pos_tag 对我来说效果不佳。例如:

sent = 'open Youtube'
tokens = nltk.word_tokenize(sent)
nltk.pos_tag(tokens, tagset='universal')
>>[('open', 'ADJ'), ('Youtube', 'NOUN')]

在上述情况下,我希望 open 这个词是动词而不是形容词。类似地,它将单词“close”标记为副词而不是动词。

我也尝试过使用n-gram tagger

train_sents = brown_tagged_sents[:size] 
test_sents = brown_tagged_sents[size:]
default_tagger = nltk.DefaultTagger('NOUN')
unigram_tagger = nltk.UnigramTagger(train_sents, backoff = default_tagger)
bigram_tagger = nltk.BigramTagger(train_sents, backoff = unigram_tagger)
trigram_tagger = nltk.TrigramTagger(train_sents, backoff = bigram_tagger)

我使用了来自nltk. 但它仍然给出相同的结果。

所以我想知道:

  1. 是否有更好的标记语料库来训练标记器以制作语音/虚拟助手?
  2. 是否有比 trigram 更高的 n-gram,即一起查看 4 个或更多单词,例如 trigram 和 bigram 分别查看 3 个和 2 个单词。它会提高性能吗?
  3. 我怎样才能解决这个问题?
4

1 回答 1

0

关于问题 #3

我认为这不是一个通用的解决方案,但它至少适用于您提到“做这个/那个”的上下文。因此,如果您在开头加上“to”,标注器将倾向于“理解”动词而不是形容词、名词或副词!

我使用Freeling_demo截取了这张截图,只是为了比较解释

在此处输入图像描述

具体来说,如果你想使用 Freeling,可以使用 java/python API,或者你可以只使用命令行调用它。

尊重问题 #2 我认为包含上下文对于完整的句子或大文本效果更好,对于命令基本虚拟助手来说可能不是这样。

祝你好运!

于 2018-04-12T17:30:31.720 回答