POS标记是确定性的吗?

我一直在试图理解为什么会发生这种情况,希望有人能对此提供一些见解。我试图标记以下文本:

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

使用以下代码:

import nltkfile = 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

我不明白这是怎么回事。有人知道这种不一致的原因吗?我对词性标注的准确性不是很在意,因为我试图提取一些模板,但似乎在不同实例中对看起来“几乎”相同的词使用了不同的标签。

作为解决方案,我将所有数字替换为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

但我很好奇为什么在我的第一个案例中它会对不同的实例标记不同的标签。有什么建议吗?


回答:

我尽力理解后发现这个来自一个没有使用整个布朗语料库的人的说法:

请注意,标记器之前未见过的词,如decried,会被标记为None。

所以,我猜像ae1.111这样的东西一定出现在语料库文件中,但像ae0.842这样的东西却没有。这有点奇怪,但这就是给出-NONE-标签的理由。

编辑:我非常好奇,自己下载了布朗语料库,并在其中进行了纯文本搜索。数字111在其中出现了34次,而数字842只出现了4次。842只出现在美元金额的中间或作为年份的最后三位数字,而111多次单独作为页码出现。775也作为页码出现了一次。

所以,我要做一个猜想,由于本福德定律,你会更频繁地匹配以1、2和3开头的数字,而不是以8或9开头的数字,因为这些数字更常作为书中随机引用的页码。我很想知道这是否属实(但当然,我自己没有兴趣去做这件事!)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注