POS标签是否具有确定性?

时间:2011-06-30 21:11:03

标签: python nlp machine-learning nltk

我一直在试图解决为什么会这样,但我希望有人可以对此有所了解。我正在尝试标记以下文字:

ae0.475      X  mod 
ae0.842      X  mod
ae0.842      X  mod 
ae0.775      X  mod 

使用以下代码:

import nltk

file = open("test", "r")

for line in file:
        words = line.strip().split(' ')
        words = [word.strip() for word in words if word != '']
        tags = nltk.pos_tag(words)
        pos = [tags[x][1] for x in range(len(tags))]
        key = ' '.join(pos)
        print words, " : ", key

我得到以下结果:

['ae0.475', 'X', 'mod']  :  NN NNP NN
['ae0.842', 'X', 'mod']  :  -NONE- NNP NN
['ae0.842', 'X', 'mod']  :  -NONE- NNP NN
['ae0.775', 'X', 'mod']  :  NN NNP NN

我不明白。有谁知道这种不一致的原因是什么?我对pos标记的准确性并不十分特别,因为我试图提取一些模板,但它似乎在不同的实例中使用不同的标签,看起来“几乎”相同。

作为解决方案,我将所有数字替换为1并解决了问题:

['ae1.111', 'X', 'mod']  :  NN NNP NN
['ae1.111', 'X', 'mod']  :  NN NNP NN
['ae1.111', 'X', 'mod']  :  NN NNP NN
['ae1.111', 'X', 'mod']  :  NN NNP NN

但我很好奇为什么在我的第一种情况下用不同的标签标记了实例。有什么建议吗?

2 个答案:

答案 0 :(得分:8)

我尽最大努力了解未使用整个布朗语料库的人发现的this

  

请注意标记器具有的单词   以前没见过,比如嫁妆,   收到无标签。

所以,我想看起来像ae1.111的内容必须出现在语料库文件中,但没有像ae0.842那样。这有点奇怪,但这是给出-NONE-标签的原因。

编辑:我非常好奇,downloaded the Brown corpus我自己,并在其中进行纯文本搜索。 111号码显示在其中34次,而号码842仅显示4次。 842仅出现在美元金额中间或一年的最后3位数字中,111单独出现多次作为页码。 775也会作为页码出现一次。

所以,我要做一个猜想,因为Benford's Law,你最终会匹配以1s,2s和3s开头的数字,而不是以8s或9s开头的数字,因为这些通常是书中引用的随机页面的页码。我真的很想知道这是否属实(但当然没有足够的兴趣自己做!)。

答案 1 :(得分:3)

从某种意义上说,“确定性”是指同一个句子每次都使用相同的算法以相同的方式标记,但由于你的单词不在nltk的数据中(事实上,甚至不是真正的单词)在真正的句子中)它将使用一些算法来尝试推断标签是什么。这意味着当单词发生变化时,你可以有不同的标记(即使变化是一个与你不同的数字),并且标记无论如何都没有多大意义。

这让我想知道你为什么要尝试将NLP用于非自然语言结构。