深入浅出对话系统——基于预训练语言模型的对话管理

这篇具有很好参考价值的文章主要介绍了深入浅出对话系统——基于预训练语言模型的对话管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

主要讲解三篇论文,主要思想是把自然语言理解、对话管理和自然语言生成三部分整合到一起。

先导知识

数据集

  • CamRest676
  • MultiWOZ

都是用的自回归语言模型

  • causal
  • GPT-2、Transformer Decoder

一个概念:delexicalization

  • 通过相应的占位符替换特定的槽值
    • 占位符作为特定的token,不关心具体的取值
  • 学习取值无关的参数

首先来看第一篇论文

SimpleTOD

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理

来自论文A Simple Language Model for Task-Oriented Dialogue。
主要做的工作是:

  • 采用causal 语言模型(GPT-2)
  • 把整个TOD转换成序列预测问题
  • 损失函数为最大似然
  • 把整个TOD分为几个子任务,建模子任务之间的依赖

TOD指任务导向型的对话系统。

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
模型的输入是所有的对话历史:
C t = [ U 0 , S 0 , ⋯   , U t ] C_t=[U_0,S_0,\cdots, U_t] Ct=[U0,S0,,Ut]
其中 U 0 U_0 U0是用户输入的第一句话; S 0 S_0 S0是系统回复的第一句话;

然后把这个上下文输入给SimpleTOD模型:
B t = SimpleTOD ( C t ) B_t =\text{SimpleTOD}(C_t) Bt=SimpleTOD(Ct)
会输出一个belief state,包含domain,slot_name和value。相当于做了NLU+DST的工作。

接下来要做对话动作生成,此时把 C t , B t C_t,B_t Ct,Bt和查询结果 D t D_t Dt拼接起来,再输入给SimpleTOD模型:
A t = SimpleTOD ( [ C t , B t , D t ] ) A_t =\text{SimpleTOD}([C_t, B_t, D_t]) At=SimpleTOD([Ct,Bt,Dt])
生成动作 A t A_t At
最后生成响应时把上面所有结果拼接,输入给SimpleDOT模型:
S t = SimpleTOD ( [ C t , B t , D t , A t ] ) S_t =\text{SimpleTOD}([C_t, B_t, D_t,A_t]) St=SimpleTOD([Ct,Bt,Dt,At])
来生成回复。这里会涉及到delexicalization,比如上图中的[value count],这里表示这个值是从数据库中查询的结果,不关心具体的值。

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
训练过程如上图所示,a)训练就是把用户的输入、系统的回复、belif state、DB查询结果、生成的动作等基于语言模型的要求作为一个token序列喂给SimpleTOD。

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
其中 x = ( x 1 , ⋯   , x n ) x=(x_1,\cdots,x_n) x=(x1,,xn) x t = [ C t ; B t ; D t ; A t ; S t ] x^t=[C_t;B_t;D_t;A_t;S_t] xt=[Ct;Bt;Dt;At;St]

b)推理也是先把 C t C_t Ct拼接起来,送给模型,然后会得到一个belief state,然后再把预测的 B t B_t Bt(和查询到的 D t D_t Dt)也拼起来继续喂给模型得到 A t A_t At,基于这些来生成回复。

SOLOIST

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理

来自论文SOLOIST: Building Task Bots at Scale with Transfer Learning and Machine Teaching。
采用预训练-微调范式

  • 自回归语言模型
  • 使用更大的对话语料库预训练
  • 使用一些任务相关的对话微调

使用的模型是Unified Language Model。

我们来看下它的输入和输出。

输入:

  • 历史对话
  • belief state
  • DB state(DB查询结果)
  • delexicalized response

可以用 x = ( s , b , c , r ) x=(s,b,c,r) x=(s,b,c,r)来表示。

预训练时使用task-grouded的预训练,包含

  • 多任务目标
  • 自监督

在微调时用了machine teaching的方法。

模型的训练目标,也是分为说那个任务:Belief State Prediction(DST+NLU)、Grounded Response Generation(NLG)和Contrastive Objective(自监督)。

它输入中的历史对话和SimpleTOD有一些区别,这里只有用户说的话,没有系统的回复。

通过以下方式建模:
深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
其中主要有两个任务:
深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理

最后使用对比损失,将输入中的词以50%的概率随机替换:

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
上面说的machine teacher实际是指通过人工更正模型输出的结果:

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理

UBAR

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理

来自论文UBAR: Towards Fully End-to-End Task-Oriented Dialog System with GPT-2

作者尝试把完整的对话历史喂给模型,还是基于GPT-2模型,基于用户的输入,需要预测blief state、system action和system response。

架构类似SimpleTOD和SOLOIST的结合体,任务类似SOLOIST的。

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
从上图可以看到,其中最上面表示模型的输入,是完整的对话历史。U代表用户的输入;B是需要预测的Blief State,A是Action,R是Response,D是数据库查询。

深入浅出对话系统——基于预训练语言模型的对话管理,自然语言处理,读书笔记,语言模型,人工智能,自然语言处理
上面是一个输入的范例。
在belief state中对domain和slot value进行解耦;同时在system act中也对domain和action进行解耦。文章来源地址https://www.toymoban.com/news/detail-579261.html

参考

  1. 贪心学院课程
  2. A Simple Language Model for Task-Oriented Dialogue
  3. SOLOIST: Building Task Bots at Scale with Transfer Learning and Machine Teaching
  4. UBAR: Towards Fully End-to-End Task-Oriented Dialog System with GPT-2

到了这里,关于深入浅出对话系统——基于预训练语言模型的对话管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 深入浅出分支语句—【C语言】

    深入浅出分支语句—【C语言】

    目录 前言:为什么要学习分支和循环语句呢? 1. 语句的分类 2. 分支语句(选择语句) 2.1 if-else语句 注意点:if-else语句后面不加{},默认只能跟一条语句 2.2  switch语句  注意点: 因为C语言是一门结构化的程序设计语言,具有三种结构:顺序结构、选择结构、循环结构,这三

    2024年02月02日
    浏览(65)
  • 深入浅出循环语句—【C语言】

    深入浅出循环语句—【C语言】

      分支语句博客: http://t.csdn.cn/U2kZF 目录 ​编辑 前言:我们先来了解一下break 、continue在循环中的作用 1. while循环  while循环中的break  while循环中的continue  2. for循环 for循环省略出错举例:  for循环中的break  for循环中的continue 3. do   while循环 利用do while循环打印1~10   d

    2024年02月04日
    浏览(95)
  • 深入浅出C语言—【函数】下

    深入浅出C语言—【函数】下

    函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。 注意: 函数可以嵌套调用,但是不能嵌套定义。 把一个函数的返回值作为另外一个函数的参数。 上面的strlen函数是求数组长度的库函数, 特别注意的是,当数组为字符数组时,数组的末尾会自动放一个

    2024年02月17日
    浏览(48)
  • 深入浅出:大语言模型的视觉解析

    深入浅出:大语言模型的视觉解析

    一系列工具与文章的汇编,直观易懂地解读复杂的 AI 概念 图片由作者利用 unDraw.co 的免费插图制作 在当今世界,大语言模型(LLM)成为了热门话题。几乎每天都有新的语言模型问世,让人们在 AI 领域怀有一种“不容错过”的紧迫感。尽管如此,许多人仍对大语言模型的基础

    2024年01月19日
    浏览(9)
  • 深入浅出堆—C语言版【数据结构】

    深入浅出堆—C语言版【数据结构】

    二叉树概念博客 :http://t.csdn.cn/XIW84 目录 1. 了解堆 1.1 堆的概念 1.2 堆的性质: 1.3 堆的结构图片 1.3.1 小堆 1.3.2 大堆 2. 堆的实现 2.1 插入数据进堆 2.2 向上调整函数 2.3 堆的删除 2.4 向下调整 3. 堆的应用 3.1 建堆(两种方式) 3.1.1 建堆方式1 3.1.2 建堆方式2 3.2 堆排序  3.3 堆的

    2024年02月04日
    浏览(8)
  • 深入浅出二叉树— C语言版【数据结构】

    深入浅出二叉树— C语言版【数据结构】

    目录 ​编辑 1.树概念及结构 1.1树的概念 1.2 树的相关概念 ​1.3 树的表示 2.二叉树概念及结构   2.1概念 2.2 特殊的二叉树 2.3 二叉树的性质  2.4 简单二叉树题目练习  2.5 二叉树的存储结构 2.5.1 顺序存储——堆 2.5.2 链式存储 树是一种 非线性的数据结构 ,它是由n(n=0)个有

    2024年02月03日
    浏览(10)
  • 深入浅出推荐系统(一):推荐系统基本架构

    深入浅出推荐系统(一):推荐系统基本架构

    过去八九年在广告、生活服务、电商等领域从事大数据及推荐系统相关工作,近来打算对过去的工作做一个系统性的梳理。一方面帮自己查缺补漏、进行更深入的学习;另一方面也希望能通过博客结交同好,增进交流。 这一博客系列以介绍推荐系统为主,会少量涉及广告系统

    2023年04月26日
    浏览(10)
  • 深入浅出 -- 系统架构之单体架构

    深入浅出 -- 系统架构之单体架构

    单体架构(Monolithic Architecture)是一种传统的软件架构模式,将整个应用程序作为一个单一的、统一的单元进行开发、部署和扩展。在单体架构中,所有的功能模块都被打包在一起,共享同一个代码库和数据库。 例如,在网上商城系统中,JavaWeb工程通常会被打成WA R包部署在

    2024年04月10日
    浏览(12)
  • (已完结)深入浅出操作系统 - 目录

    ---- 整理自狄泰软件唐佐林老师课程 实验环境: OS Version: Ubuntu 10.10 QT Version: 4.7.4 QT Creator Version: 2.4.1 Bochs Version: 2.4.5 01 - 进阶操作系统(BIOS) 02 - Hello, DTOS!(第一个主引导程序,屏幕上打印Hello,DTOS! ) 03 - 调试环境的搭建(Bochs) 04-05 - 主引导程序的扩展 06-07-08 - 突破512字节

    2024年02月12日
    浏览(26)
  • 深入浅出 -- 系统架构之Keepalived搭建双机热备

    深入浅出 -- 系统架构之Keepalived搭建双机热备

    Keepalived+重启脚本+双机热备搭建 ①首先创建一个对应的目录并下载 keepalived 安装包(提取码:s6aq)到 Linux 中并解压: ②进入解压后的 keepalived 目录并构建安装环境,然后编译并安装: ③进入安装目录的 /soft/keepalived/etc/keepalived/ 并编辑配置文件: ④编辑主机的 keepalived.conf

    2024年04月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包