普通文档也能变对话:深入理解对话补全技术

人工智能
对话机器人需要大量的优质对话来进行训练,但这种数据往往不太好找。因此,论文作者想出了一种新的方法,叫做"对话补全",就是把普通的文章改编成像我们日常聊天一样的对话。

当我们提到对话机器人,你是否也会像我一样立刻想起与Siri或者Alexa的一次次对话,虽然它们有时候可能会让你啼笑皆非,但也无可否认它们确实为我们的生活带来了很大便利。然而,训练这样的对话AI,其难点在于如何获取高质量的对话数据。过去我们通常需要收集大量的人类对话作为训练数据,这既费时又费力。那么,有没有更好的方法呢?

偶然想起去年阅读的一篇论文,介绍了一种对话补全的方案,非常有趣。今天就向大家介绍一种全新的方法——对话补全,它能帮我们把普通的文档转变成聊天记录。让我们一起探索这个颠覆传统的技术,看看它如何打破界限,让任何一篇文档都能“说话”。

首先,让我们看一下“对话补全”(inpainting)这个词。它其实是从图像处理那块借用过来的,原意是指用周围的像素信息来补全图片中缺失或者损坏的部分。而在这篇论文里,我们可以理解为用已有的对话内容来推测和补全对话中缺失的部分。就好像我们在看一幅画时,如果画中有一部分缺失,我们就会想象这部分应该是什么样的,以使画看上去更完整。在对话补全中,我们也是这样,利用已有的对话内容来猜测缺失的部分,让整个对话听起来更流畅、更完整。

下面我们来看看这个论文是怎么讲的。

简介

对话机器人需要大量的优质对话来进行训练,但这种数据往往不太好找。因此,论文作者想出了一种新的方法,叫做"对话补全",就是把普通的文章改编成像我们日常聊天一样的对话。这样一来,我们就能从各种各样的文章中获取大量的对话内容了。具体来说,就是把文章的每一句话看作一个人的发言,然后机器人就要猜测另一个人可能的回答或者提问。

训练的部分

对话补全器(inpainting)使用的是一种叫做T5的生成模型,这是一种编码器-解码器的模型。这个模型的训练方法跟我们之前见过的BERT模型有点类似,只不过有一个关键的不同:BERT是在句子中遮蔽单个的词语来训练模型,而在这里,我们是遮蔽掉整个发言来训练模型。

举个例子,考虑以下对话:

讲话者1:“你好,你怎么样?” 
讲话者2:“我很好,谢谢你。你呢?” 
讲话者1:“我也很好,谢谢你的关心。”

在对话补全任务中,可能会遮蔽一个完整的发言,像这样:

讲话者1:“你好,你怎么样?” 
讲话者2:? 
讲话者1:“我也很好,谢谢你的关心。”

模型的任务就是预测缺失的发言(在这个例子中,“我很好,谢谢你。你呢?”)。用于训练的损失函数是标准的交叉熵损失,它的目标是最小化原始发言在部分对话给出的情况下的负对数概率。

推理阶段

在推理阶段,训练好的补全模型被用来将一篇文章转化为对话。假设我们有一篇这样的文章:

“猫是小型的食肉哺乳动物。”
“它们经常被当作宠物。” 
“猫有强壮的柔韧体骼,反应快,爪子锐利且可以伸缩。”

这篇文章被视作在一个假设的对话中,作者的一系列发言。这个对话最初看起来像这样:

作者:“猫是小型的食肉哺乳动物。” 
读者:? 
作者:“它们经常被当作宠物。”
读者:?
作者:“猫有强壮的柔韧体骼,反应快,爪子锐利且可以伸缩。” 
读者:?

问号代表对话中缺失的部分,这就是对话补全模型设计的目的,去填补这些缺失的部分。用了对话补全模型后,对话可能会变成这样:

作者:“猫是小型的食肉哺乳动物。” 
读者:“猫一般常在哪些地方出没呢?” 
作者:“它们经常被当作宠物。” 
读者:“猫有哪些特殊的身体特征呢?” 
作者:“猫有强壮的柔韧体骼,反应快,爪子锐利且可以伸缩。” 
读者:“真有意思,你能再多介绍一些关于猫的行为习性吗?”

文章和对话的例子

再让我们看另一篇文章:

“大象是大型哺乳动物。” 
“它们有长长的鼻子。” 
“大象是食草动物。”

用了对话补全模型后,对话可能会变成这样:

作者:“大象是大型哺乳动物。” 
读者:“大象有哪些独特的特征呢?” 
作者:“它们有长长的鼻子。” 
读者:“大象平时都吃些什么?” 
作者:“大象是食草动物。” 
读者:“真有趣,你能告诉我更多关于大象的栖息地信息吗?”

总结

"对话补全"就像是给聊天记录中的空白部分填充内容。它可以帮我们把普通的文章变成像人们日常对话一样的聊天记录。这对于训练聊天机器人来说是个好方法,因为它能提供大量丰富、真实的对话内容。所以,这个技术可能会给聊天机器人的发展带来很大的帮助。

责任编辑:姜华 来源: 今日头条
相关推荐

2024-04-15 00:00:00

技术Attention架构

2024-03-12 00:00:00

Sora技术数据

2016-11-15 14:33:05

Flink大数据

2018-05-16 11:05:49

ApacheFlink数据流

2021-10-26 17:52:52

Android插件化技术

2016-12-08 15:36:59

HashMap数据结构hash函数

2010-06-01 15:25:27

JavaCLASSPATH

2020-07-21 08:26:08

SpringSecurity过滤器

2024-11-05 09:11:09

TypeScript开发者代码

2016-11-22 17:05:54

Apache Flin大数据Flink

2024-01-09 08:28:44

应用多线程技术

2020-09-23 10:00:26

Redis数据库命令

2019-06-25 10:32:19

UDP编程通信

2017-01-10 08:48:21

2024-02-21 21:14:20

编程语言开发Golang

2017-08-15 13:05:58

Serverless架构开发运维

2013-09-22 14:57:19

AtWood

2009-09-25 09:14:35

Hibernate日志

2023-10-19 11:12:15

Netty代码

2021-02-17 11:25:33

前端JavaScriptthis
点赞
收藏

51CTO技术栈公众号