我是自然语言处理的初学者,我有一个关于计算POS标注器准确性的基本问题(标注器使用语料库):
(不要把下面的"集合"一词与集合的数学定义混淆了。我只是把它当作一个普通的英语单词来表达一些"组"或"映射")
有不同的准确性指标,如精度/召回率和混淆矩阵。它们都需要以下两个东西作为输入参数:
1。预测结果集: POS标记器在输入上运行后,我们对输入单词的标记进行了预测。这个参数我理解;它基本上是标注器使用语料库和一些统计技术生成的。这个集合是我们的预测
2。实际结果集:该集合表示每个单词的实际标记应该是什么。这个集合是现实。
我的问题是关于第二个参数:这个集合应该如何"构造"。我是否应该手动构造一个集合,将每个输入单词映射到正确的标记?通过手动,我的意思是阅读语料库,然后为每个输入词找到相应的标签。
所以我的问题基本上是: 如果有一些代码计算post - tagger的精度,计算的精度是什么?这段代码如何知道什么是单词到标签的正确映射?如果它知道单词到标签的正确映射,那么为什么这个代码不被用来做标签本身呢?(我希望读者能理解我的困惑)。
我举个例子:
输入句: I am a boy.
预测标签: i_代词am_名词文章boy_动词。(标签的简化名称,显然标签已经做错了)
实际标注应该是: I_Pronoun am_Verb a_Article boy_Noun
我知道标签应该是什么,但是精度计算器代码如何知道实际的标签应该是什么?我是否应该为每个输入句子手动准备正确标记的映射,然后将其作为参数传递?
注意,我知道Precision/Recall的计算是如何工作的。我只是问:我如何告诉它什么是正确的标签集
正如Vsevolod Dyomkin所说,如果您希望测试您的程序,您将需要具有与现实相对应的预标记数据。您可以手动创建自己的语料库,也可以使用可用的语料库,如棕色语料库。由于您的标签之一是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]])