伪标签与负例提升智能助手技能匹配准确率

“伪标签”与负例如何帮助智能助手匹配技能与用户请求

让机器学习系统为自己的样本打标签,可以提升其性能。

动态仲裁与多标签挑战
某中心的智能助手现已拥有超过10万个技能。为了更便捷地使用这些技能,我们开始采用一种称为动态仲裁的技术。对于其中的数千个技能,用户不再需要记住特定的技能名称或调用模式(例如“助手,告诉X做Y”)。相反,用户只需提出请求,动态仲裁系统就会找到处理该请求的最佳技能。

当然,面对如此多的技能,可能有好几个都能处理某个特定的用户话语。例如,“发出大象的声音”这个请求,可以由AnimalSounds、AnimalNoises、ZooKeeper等技能处理。

在训练助手将话语与技能匹配时,每个训练样本通常只标注一个技能的名称。这并不妨碍助手学习将多个技能与每条话语相关联,但确实增加了难度。使用标注了多个相关技能的话语进行训练,将有助于确保助手为每条话语找到最佳匹配。

然而,准确的多标签标注很难实现,因为这需要标注者熟悉所有10万多个技能的功能。此外,助手的技能库会随时间变化,单个技能的功能也会更新,因此标注数据可能很快过时。

自动化的多标签标注方法
在今年的国际声学、语音与信号处理会议(ICASSP)上,我们(以线上方式)提出了一种自动化方法,为智能助手动态仲裁系统的训练数据添加多个相关标签。

我们首先利用已训练的动态仲裁系统为话语分配技能,并将高置信度的技能分配结果作为额外的标签——即“伪标签”。然后,我们将错误的分类实例(例如,被分配到的技能回复“我不知道这个”)用作负训练样本,使系统学会避免看似合理但不准确的分类。

最后,我们使用了在先前工作中描述过的自蒸馏技术,即系统不仅基于标签进行训练,还基于其先前分类置信度的聚合统计信息。这可以防止仲裁系统对少数具有强输入-输出相关性的新样本产生过度偏好。

实验表明,这些技术的结合使动态仲裁系统的F1分数(一个同时考虑系统误报率和漏报率的指标)提升了1.25%。

系统架构:初筛器与假设重排序器
正如我们在之前的博客文章中所介绍,动态仲裁系统由两个组件构成。第一个称为“初筛器”,顾名思义,它会为给定话语生成一个候选技能的简短列表。第二个组件是“假设重排序器”,它利用用户账户设置和对话上下文等信息,更精确地对候选列表进行排序。

有趣的是,伪标签技术对重排序器性能的提升大于对初筛器的提升。在训练过程中,初筛器有时会输出一个不包含输入话语正确标签的技能列表。这样的列表不会用于训练重排序器,因为没有可用于比较重排序器输出的“地面实况”(即正确标签)。

我们的假设是,当初筛器在具有多个标签的话语上进行训练时,会增加其输出列表中至少包含一个正确标签的可能性。这意味着重排序器拥有了更多训练样本,能更好地反映初筛器输出的全部范围。

方法论细节
在实验中,我们首先使用标准的、每条话语对应一个技能的训练数据来训练初筛器。正如机器学习中的典型做法,我们对同一训练数据集进行了多次迭代(多个轮次),直到系统性能不再提升。在每个轮次之后,我们还让初筛器对所有训练数据进行分类。

对于每个训练样本,那些在连续r个轮次中,被初筛器预测概率高于其真实标签的、排名前p位的标签,就成为了我们的伪标签。经验表明,将p设为2,r设为4能带来最大的改进。

然后,我们使用带有伪标签的数据以及负例来微调网络。每个负例都标有一个我们推断为错误的单一技能。在微调期间,如果网络以高置信度选择了负例中的标签,我们会对其进行惩罚。

在每个轮次之后,我们还收集系统对整个训练集中所有样本分类的统计数据。在下一个轮次中,这些统计信息会与训练集中的每个样本一起输入模型。

将这种自蒸馏技术与伪标签和负例相结合,使我们能够比基线系统额外再挤出零点几个百分点的F1分数提升。

未来工作展望
在未来的工作中,我们希望进一步探索自蒸馏与伪标签之间的关系。

我们还希望将本文探讨的三种技术——伪标签、负反馈学习和自蒸馏——与标准的半监督学习相结合。在半监督学习中,已训练的网络本身会对一组未标记的样本进行标注,这些标注后的数据随后用于重新训练网络。看看这能否带来进一步的性能提升将会很有趣。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2025-12-05 07:00  CodeShare  阅读(0)  评论(0)    收藏  举报