虚拟助手的POS Tagger

时间:2018-04-10 13:38:33

标签: python machine-learning nlp nltk nltk-book

我正在尝试为Voise助手制作POS Tagger。但是,nltk的pos标签nltk.pos_tag并不适合我。例如:

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

在上述情况下,我希望open这个词是动词,而不是形容词。同样,它标记了“关闭”这个词。作为副词而不是动词。

我也尝试过使用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. 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

关于问题#3

我认为这不是一般解决方案,但它至少适用于你提到的背景"做这个/那个"。所以,如果你把"放到"在开始时,标记器将倾向于“理解”#34;动词而不是形容词,名词或副词!

我使用Freeling_demo使用此屏幕截图只是为了比较解释

enter image description here

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

尊重问题#2我认为对于完整的句子或大文本更好地包含上下文工作,可能不是命令基本虚拟助手的情况。

祝你好运!