【问题标题】:Parameters for calculating accuracy of part of speech tagger词性标注器准确度计算参数
【发布时间】:2014-08-04 20:44:39
【问题描述】:

我是自然语言处理的初学者,我有一个关于计算词性标注器准确性的基本问题(标注器使用语料库):

(不要将下面的“集合”一词与集合的数学定义混淆。我只是用它作为一个普通的英语单词来传达一些“组”或“映射”)

有不同的准确度指标,例如 Precision/Recall 和 Confusion 矩阵。这两者都需要以下两件事作为输入参数:
1. 预测结果集:在 POS Tagger 在输入上运行之后,我们对输入词的标签进行了预测。这个参数我理解;它基本上是标注器使用语料库和一些统计技术生成的。这个集合是我们的预测
2. 实际结果集合:这个集合代表什么每个单词的实际标签应该是。这个集合是现实
我的问题是关于第二个参数:这个集合应该如何“构造”。我是否应该手动构建一个将每个输入单词映射到 正确 标签的集合?手动,我的意思是阅读语料库,然后找到每个输入单词对应的标签。

所以我的问题基本上是:如果有一些代码可以计算 POS-Tagger 的准确度,那么计算出的准确度是多少?该代码如何知道单词到标签的正确映射是什么?如果它确实知道单词到标签的正确映射,那么为什么不使用 this 代码来进行标签本身呢? (我希望读者能理解我在这里的困惑)。

我将举这个例子:
输入句子:我是男孩。
预测标签:I_Pronoun am_Noun a_Article boy_Verb。 (标签的简化名称,显然是标签做错了)

实际标注应该是:I_Pronoun am_Verb a_Article boy_Noun
知道标注应该是什么,但是准确度计算器如何代码知道实际的标记应该是什么?我是否应该为每个输入句子手动准备正确标签的映射,然后将其作为参数传递?

请注意,我知道 Precision/Recall 的计算方式。我只是在问:我如何告诉它正确的标记集是什么

【问题讨论】:

  • 你是对的:你需要“手动”准备词标签映射。这通常是通过将语料库的一部分(至少 20%)分离为测试数据而不将其用于训练来完成的。另请注意,在 POS 标记的情况下,准确率和召回率是相同的,所以您可以只说准确率。
  • 感谢@VsevolodDyomkin
  • @VsevolodDyomkin 为什么精确率和召回率相同?我不明白..我认为每个标签都会有不同的精度/召回率(精度和召回率不同)。就像所有其他分类一样,它们会有不同的真阳性、假阳性、假阴性……对吗?我要做 TAGWISE 精确召回..
  • 如果你计算每个标签,那么是的,精度/召回率会有所不同,但如果你计算一个聚合指标,它会是一样的,因为你有N 点你需要预测和如果你得到M 正确,那么你的精确度是M/N - 并且回想一下,你有N 建议并且你得到相同的M 正确,所以它也是M/N

标签: machine-learning nlp scikit-learn pos-tagger


【解决方案1】:

正如 Vsevolod Dyomkin 所说,如果你想测试你的程序,你需要有与现实相对应的预先标记的数据。您可以手动创建自己的,也可以使用可用的,例如brown corpus。由于您的标签之一是 scikit-learn,我假设您使用的是 NLTK,这使您可以直接通过 nltk.download() 使用它。

虽然我不知道实现细节,但一旦你处理了预测集和实际集,你应该能够使用 scikit-learn 提供的函数,例如confusion_matrix。例如,

predicted_tags = ['NOUN', 'VERB']
real_tags = ['NOUN', 'PRONOUN']
confusion_matrix(y_true, y_pred)

将返回

array([[1, 0, 0],
       [0, 0, 1],
       [0, 0, 0]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2020-12-11
    • 1970-01-01
    • 2021-05-10
    • 2013-11-20
    • 1970-01-01
    相关资源
    最近更新 更多