如何评估序列到序列模型?

数据挖掘 机器学习 分类 评估 顺序
2022-02-24 08:46:22

我想知道如何评估可变长序列到序列的预测?假设我有以下YY^

Y=[["1","2","2"],["3","2","2"],["1","3","2","2"]]

Y^=[["1","3","2"],["3","3"],["1","3","2"]]

我是否应该使用二进制比较,其中任何不匹配都计为 0,而任何完全匹配都计为 1?还是应该通过逐字符比较来计算常规精度?

我在这里担心的是,一方面,如果这是一个数字预测,那么任何数字不匹配都会破坏整个数字,所以不匹配在哪里并不重要;另一方面,为了找到改进训练集的方法,哪些数字往往会被错误计算,这将是一件好事。

另外:该任务是一个数字 OCR,因此 - 与可以容忍轻微误译的机器翻译工作相比 - 任何数字不匹配都可能导致严重的业务问题(例如不同的发票金额)。此外,我想知道哪些个别数字更容易被误读,所以我也需要一种方法来获得这种统计数据。

1个回答

关于您的担忧,您没有理由只选择一种评估指标。如果有几个值可以让您对系统性能有不同的看法,请计算所有这些值。评估应取决于您的具体用例,因此重要的是这些值与系统在现实世界问题中的好坏性能相关

即使我不确切知道您的系统应该做什么[在问题编辑之前编写,见下文补充],也许您可​​以参考如何在语音和文本识别任务中测量性能。在那里你有一个参考和一个由字符组成的预测序列,这些字符形成单词。参考和预测的长度不一定相同。性能是在字符和单词级别(字符错误率(CER)和单词错误率(WER))测量的。在单词级别测量时,即使只有一个字符是错误的,整个单词也是错误的。在这两种情况下,主要思想是计算参考和预测之间的levenshtein/edit 距离(在单词或字符级别),然后除以参考的长度。

在你的例子中

Y=[["1","2","2"],["3","2","2"],["1","3","2","2"]]

Ŷ=[["1","3","2"],["3","3"],["1","3","2"]]

在内部括号级别,三个内部括号的编辑距离将为 1+2+1=4,因为在第一个中,“3”被“2”(一次编辑)替换,在第二个中,“3”被替换为插入“2”和“2”(两次编辑),在最后一种情况下再次插入“2”(一次编辑)。参考的总长度是3+2+3=8。所以最终的性能指标是 4/8。

我不确定您的案例中的每个内括号是否都是不同的样本(即 Ŷ 是整个数据集)或者 Ŷ 是单个样本并且您有类似于字符和单词的东西。但无论如何,如果你在 Ŷ 和 Y 之间进行编辑距离并除以 Ŷ 的长度,那么你就有 3/3,因为所有三个括号都是不同的。

对问题编辑的附加响应:如果任务是数字 OCR,那么您将计算字符错误率。使用编辑距离也可以为 10 个数字中的每一个计算一个错误值。这将通过计算每个数字中有多少编辑操作对应于错误。为此,您可以在 python 中使用 python-Levenshtein 包中的 editops 函数(https://rawgit.com/ztane/python-Levenshtein/master/docs/Levenshtein.html#Levenshtein-editops)。