对话语言理解模型的评估指标
数据集分为两部分:一组用于训练,一组用于测试。 训练集用于训练模型,而测试集用作训练后的模型测试,以计算模型性能和评估。 测试集不会通过训练过程引入到模型中,以确保使用新数据测试模型。
成功完成训练后,将自动触发模型评估。 评估过程首先使用经过训练的模型预测测试集中语句的用户定义意向和实体。 然后,将其与提供的标记进行比较,以建立真实的基线。 系统会返回结果,这样你便可以查看模型的性能。 对于评估,对话语言理解使用以下指标:
精准率:度量模型的精确度或准确度。 它是正确识别的正值(真正)与所有识别出的正值之间的比率。 精准率指标显示正确标记的预测类的数量。
Precision = #True_Positive / (#True_Positive + #False_Positive)
召回率:度量模型预测实际正类的能力。 精准率是预测的真正值与标记的结果之间的比率。 召回率指标显示正确的预测类的数量。
Recall = #True_Positive / (#True_Positive + #False_Negatives)
F1 分数:F1 分数是精准率和召回率的函数。 在精准率和召回率之间进行平衡时,需要用到它。
F1 Score = 2 * Precision * Recall / (Precision + Recall)
计算以下各项的精准率、召回率和 F1 分数:
- 每个单独的实体(实体级评估)。
- 每个单独的意向(意向级评估)。
- 对于模型总体(模型级评估)。
对于实体级评估、意向级评估和模型级评估,精准率、召回率和计算的定义是相同的。 但是,真正、假正和假负的计数可能有所不同。 例如,请考虑以下文本。
示例
- Make a response with "thank you very much."
- Reply with saying "yes."
- Check my email please.
- Email to Cynthia that dinner last week was splendid.
- Send an email to Mike.
使用的意向是 Reply
、sendEmail
以及 readEmail
。 实体是 contactName
和 message
。
该模型可以做出以下预测:
话语 | 预测意向 | 实际意向 | 预测实体 | 实际实体 |
---|---|---|---|---|
Make a response with "thank you very much" | 答复 | 答复 | thank you very much 为 message |
thank you very much 为 message |
Reply with saying "yes" | sendEmail | 答复 | -- | yes 为 message |
Check my email please | readEmail | readEmail | -- | -- |
Email to Cynthia that dinner last week was splendid | 答复 | sendEmail | dinner last week was splendid 为 message |
cynthia 为 contactName ,dinner last week was splendid 为 message |
Send an email to Mike | sendEmail | sendEmail | mike 为 message |
mike 为 contactName |
Reply 意向的意向级别评估
密钥 | 计数 | 说明 |
---|---|---|
真正 | 1 | 语句 1 正确预测为 Reply 。 |
假正 | 1 | 语句 4 错误预测为 Reply 。 |
假负 | 1 | 语句 2 错误预测为 sendEmail 。 |
精准率 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5
召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5
F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5
sendEmail 意向的意向级别评估
密钥 | 计数 | 说明 |
---|---|---|
真正 | 1 | 语句 5 正确预测为 sendEmail 。 |
假正 | 1 | 语句 2 错误预测为 sendEmail 。 |
假负 | 1 | 语句 4 错误预测为 Reply 。 |
精准率 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5
召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5
F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5
readEmail 意向的意向级别评估
密钥 | 计数 | 说明 |
---|---|---|
真正 | 1 | 语句 3 正确预测为 readEmail 。 |
假正 | 0 | -- |
假负 | 0 | -- |
精准率 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1
召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 0) = 1
F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 1) / (1 + 1) = 1
contactName 实体的实体级别评估
密钥 | 计数 | 说明 |
---|---|---|
真正 | 1 | 在语句 4 中,cynthia 被正确预测为 contactName 。 |
假正 | 0 | -- |
假负 | 1 | 在语句 5 中,mike 被错误预测为 message 。 |
精准率 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1
召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5
F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 0.5) / (1 + 0.5) = 0.67
message 实体的实体级别评估
密钥 | 计数 | 说明 |
---|---|---|
真正 | 2 | 在语句 1 中,thank you very much 被正确预测为 message ,在语句 4 中,dinner last week was splendid 被正确预测为 message 。 |
假正 | 1 | 在语句 5 中,mike 被错误预测为 message 。 |
假负 | 1 | 在语句 2 中, yes 未被预测为 message 。 |
精准率 = #True_Positive / (#True_Positive + #False_Positive) = 2 / (2 + 1) = 0.67
召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 2 / (2 + 1) = 0.67
F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.67 * 0.67) / (0.67 + 0.67) = 0.67
对整体模型进行模型级评估
键 | 计数 | 说明 |
---|---|---|
真正 | 6 | 所有意向和实体的真正之和。 |
假正 | 3 | 所有意向和实体的假正之和。 |
假负 | 4 | 所有意向和实体的假负之和。 |
精准率 = #True_Positive / (#True_Positive + #False_Positive) = 6 / (6 + 3) = 0.67
召回率 = #True_Positive / (#True_Positive + #False_Negatives) = 6 / (6 + 4) = 0.60
F1 分数 = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.67 * 0.60) / (0.67 + 0.60) = 0.63
混淆矩阵
混淆矩阵是用于模型性能评估的 N x N 矩阵,其中 N 是实体或意向数目。 该矩阵将预期标签与模型预测的标签进行比较。 此矩阵为模型的性能以及它所犯的错误类型提供了整体视图。
可以使用混淆矩阵来识别彼此之间过于接近且经常被弄错(产生歧义)的意向或实体。 在这种情况下,请考虑将这些意向或实体合并在一起。 如果无法合并,请考虑添加这两个意向或实体的更多标记示例,帮助模型进行区分。
下图中突出显示的对角线是正确预测的实体,其中预测标记与实际标记相同。
可以根据混淆矩阵计算意向级别/实体级别和模型级别的评估指标:
- 对角线的值是每个意向或实体的真正值。
- 意向或实体行(不包括对角线)中值的总和是模型的假正值。
- 意向或实体列(不包括对角线)中值的总和是模型的假负值。
同理:
- 模型的真正值是所有意向或实体的真正值的总和。
- 模型的假正值是所有意向或实体的假正值的总和。
- 模型的假负值是所有意向或实体的假负值的总和。
指南
训练模型后,你会看到一些关于如何改进模型的指导和建议。 建议使用一个涵盖指南中所有要点的模型。
- 训练集有足够的数据:意向或实体在训练数据中的标记实例少于 15 个时,由于没有针对该意向对模型进行充分训练,可能会导致准确性降低。 在此情况下,请考虑在训练集中添加更多标记数据。 仅当实体具有通过训练形成的组件时,才考虑向实体添加更多标记数据。 如果实体仅由列表、预生成和正则表达式组件定义,则此建议不适用。
- 所有意向或实体都存在于测试集中:测试数据缺少意向或实体的标记实例时,由于存在未经测试的方案,模型的测试性能可能会变得不太全面。 请考虑为模型中的每个意向和实体提供测试数据,以确保测试所有内容。
- 意向或实体之间的区别不明确:如果不同意向或实体的数据相似,可能会导致准确性降低,因为它们可能经常被误分类为彼此。 查看以下意向和实体,并考虑合并相似的意向和实体。 否则,请添加更多示例以更好地区分它们。 可以查看“混淆矩阵”选项卡以获取更多指南。 如果看到两个实体由于共享相同的列表、预生成的或正则表达式组件而不断被预测相同的范围,请确保为每个实体添加一个通过训练生成的组件,并将其设为必要项。 详细了解实体组件。