如何覆盖由nltk的POS\u标记分配给文本的POS标记?

2024-04-28 08:22:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用nltk中的pos_tag来标记一组(未标记)技术文档中的文本,得到了很好的结果,但它总是将“authenticated”之类的单词标记为动词,有时它可以用作形容词。换言之,仅仅改变标签并不是每次都有效。在

有没有一个好的方法来覆盖或更正考虑到上下文的标记结果?在


Tags: 方法文档标记pos文本tag动词标签
1条回答
网友
1楼 · 发布于 2024-04-28 08:22:34

不幸的是,你的问题归结为“如何改进我的标记?”。答案是,你需要建立一个更好的标签。所有非琐碎的标记都考虑到了上下文,所以这不仅仅是添加上下文敏感度的问题;它已经存在,只是在某些情况下失败了。

NLTK标记模型允许您“链接”标记器,这样每个标记器都可以占用另一个标记器的位置(例如,ngram标记器返回到未知单词的regexp标记器上)。它是这样工作的:

t0 = nltk.DefaultTagger('N')
t1 = nltk.UnigramTagger(traindata, backoff=t0)
t2 = nltk.BigramTagger(traindata, backoff=t1)

traindata这是一个列表已标记句子的标准NLTK形式:每个句子都是(word, tag)形式的元组列表。(如果有理由,您可以为每个标记使用不同的训练语料库;您肯定希望使用一致的标记集)。例如,这里有一个两句话长的训练语料库:

^{pr2}$

Tagger t2(您将使用的那个)将构建一个bigram模型;如果它看到未知的输入,它将回到使用unigram模型的t1;如果这也失败了,它将遵从t0(它只是将所有内容标记为“N”)。

您可以添加一个特殊用途的retagger来改进默认标记,但是您必须首先确定它要做什么,这当然是您首先要求的。

如果nltk标记器一次又一次地犯相同类型的错误,您可以将一组更正集合起来,并在此基础上训练一个重新标记者。您需要多少数据取决于错误的一致性。我从来没有尝试过,但是Brill-tagger是通过连续应用重新标记规则来工作的,所以也许它是正确的工具。

另一种方法是尝试构建自己的特定领域的标记语料库:使用nltk标记器标记训练集,手动或半自动地进行更正,然后在其上训练标记器,并尝试在新数据上获得比默认nltk标记器更好的性能(也许通过将两个标记器链接在一起)。

相关问题 更多 >