基于GPT模型的对话系统
1.场景:
- 当用户输入的问题在库中,没有比对上,则调用闲聊系统来回答用户的问题
2.模型的选择:
- 模型:LSTM, GPT-2, BERT
-
LSTM:我们先来看下LSTM模型的优缺点:
- 优点: LSTM能更好的解决时间序列问题(在这里时间序列大家可以理解为:对输入的一个句子能够更好的找出中心词)
- 缺点:和GPT模型比起来效果要差一些;最重要的一点:LSTM只是缓解了RNN的梯度问题,但并没有完全解决
- 总结:梯度消失会带来什么问题呢?梯度消失会导致神经网络中前层的权重无法更新,最终无法学习,如果模型停止学习,那么在上述场景下带来的直接影响就是“答非所问”;这个是我们不想看到的结果,因此果断的排除了LSTM
- 备注:后期,我用LSTM搭建一个闲聊系统,用实验数据让大家直观的感受一下LSTM模型与GPT模型的区别。
-
GPT-2与BERT的抉择:
- 首先,网上有一种说法是GPT-2模型更适合生成式任务,BERT更适合理解式任务,因为我没与读到过相关论文,也没有看到权威的解释,所以这里我们就不去关注这个点了,我们来看下GPT模型的概念与公式
- 概念:GPT-2的核心思想是通过无监督学习去做有监督的任务,训练过程分为无监督预训练,有监督微调,内部结构以transform为基础,仅仅使用transform中的编码器,可以理解成是屹立在transform上的高楼(因为没有找到权威的概念,这里就用大白话说吧)
- 公式:
p ( x ) = ∏ p ( s n ∣ s 1 , s 2 , . . . , s n − 1 ) p(x) = \prod {p(s_n|s_1,s_2,...,s_{n-1})} p(x)=∏p(sn∣s1,s2,...,sn−1)
解释:这个公式的意思是当给定s1,s2,…,s(n-1)时,sn的概率是多少,但由于输入的句子的时序性,我们需要在前面加入乘积符号;用大白话讲就是已知前n-1个词的概率(s1,s2…代表每个词),计算第n个词的概率 - 综述:首先我们要明确在闲聊这个场景中,侧重点是通过输入问题,模型回答相应的答案,翻译一下就是我们只需要利用上文中的信息去预测下文,这正是GPT-2模型的预训练方式,而Bert模型是通过Mask句子中部分词,充分利用上下文信息,虽然模型的表达能力更强,但并不是我们想要的;最后,通过上述概念与公式以及模型的对比,我们可以得出结论在这个场景下GPT-2更适用些。
- 概念:GPT-2的核心思想是通过无监督学习去做有监督的任务,训练过程分为无监督预训练,有监督微调,内部结构以transform为基础,仅仅使用transform中的编码器,可以理解成是屹立在transform上的高楼(因为没有找到权威的概念,这里就用大白话说吧)
- 首先,网上有一种说法是GPT-2模型更适合生成式任务,BERT更适合理解式任务,因为我没与读到过相关论文,也没有看到权威的解释,所以这里我们就不去关注这个点了,我们来看下GPT模型的概念与公式
-
3.GPT-2模型详解:
-
计算过程
-
输入:
输入这里其实倒没什么可讲的无非就是以下三个过程:- 一个token embeddings(词嵌入:人话讲就是把语言映射到几何空间当中,GPT-2(medium)的大小是(50257(模型中词的大小) * 1024(embedding大小)))
- 一个positional encodings(位置编码:人话讲就是每个词在矩阵中的编码,对于GPT-2(medium)来讲矩阵大小1024 * 1024)
- 将上述二者结合以后作为输入
-
Masked Self-Attention + Feed Forward Neural Network
- Masked Self-Attention做了什么:
例子:我今天晚上准备炒一个鸡腿,但它卖完了
当模型在处理这个句子的时候,首先要明确句子中“它”指代的是“鸡腿”还是“我”,即模型要明白指代关系,那么如何明白指代关系呢?请看图
- Masked Self-Attention做了什么:
-
写在最后:
- 上述有些点用了自己的语言来解释,只是为了方便大家理解,如有不严谨的地方欢迎大家批评指正
- 实现对话系统的模型很多,而本文选择GPT-2模型来实现对话功能只是个人的一些理解,如有更好的模型,请在评论区留言哦
- https://demo.allennlp.org/next-token-lm大家可以去浏览一下,就能明白我在“GPT-2与BERT的抉择”这里所表达的意思
- 建议大家把TransFormer,GPT,BERT合在一起学习,能事半功倍哦~