Fork me on GitHub

HMM 模型在贝壳对话系统中的应用

对话系统是一个庞大的系统,涉及的问题很多,本文主要讲解隐马尔可夫模型(Hidden Markov Model,HMM)在对话管理(Dialog Management,DM)中的应用。DM 在对话系统中的作用是维护对话状态并根据当前对话状态选择下一步合适的动作。 在贝壳找房 APP 中,客户和经纪人的对话过程可以看作是一个时间序列。在对话过程中,经纪人需要基于当前的对话状态对客户的消息作出合适的回应,即选择合适的动作。因此,经纪人的动作决策是一个基于时间序列的问题。而 HMM 模型是比较经典的解决序列问题的机器学习模型,所以,在 DM 的动作决策问题上首先尝试了 HMM 模型。本文将结合实际案例从理论推导、模型构建、实验分析三个方面对 HMM 模型在 DM 中的应用进行详细解析。

1.问题背景

1.1 何为对话管理

对话管理是对话系统中的一个关键环节,它在整个对话系统中的位置如下图所示:在上图中的对话系统流程中,首先是语音识别,产生语音识别结果;语言理解模块将语音识别结果映射成用户的意图、情感等信息;基于语言理解结果,对话管理模块决策需要执行的系统动作;基于对话管理模块的决策结果,语言生成模块生成适当的自然语言;语音合成模块将语言生成结果转化成语音反馈给用户这样就完成了对话系统的整个流程。由上述内容可知,对话管理模块是对话系统中的关键一环,它决定着后续内容的方向,因此,在对话系统中需要不断的优化对话管理模块的效果。

1.2 我们面临的问题

在贝壳找房 APP 中,客户和经纪人之间的对话大多是在不断的发掘客户对于房子的各项需求,如果在对话过程中,客户将其联系方式(电话、微信)主动告诉了经纪人,则我们称之为“转委托”,“转委托”是客户与经纪人建立线下关系的关键标志,“转委托”一旦发生,就意味着客户愿意从线上走到线下,进行实地看房,因此,提高转委托率是对话系统的优化目标之一。因为对话过程可以看做是客户对经纪人建立信任的过程,信任程度越高,转委托几率就越大。因此,针对客户的对话内容,如果将客户当前对话内容对应的信任程度定义成一个“状态”,那么在不同的“状态”下,经纪人应该做出什么样的动作才能提升客户的信任程度,并促使“转委托”发生呢?上述问题简单来说就是需要我们的系统指导经纪人在“正确的时间”作出“正确的动作”,这也是我们对话系统面临的问题之一。

举个例子:

在上述表格中,针对不同的客户消息,经纪人需要给出合适的回答。在现实中,有些对话完成了转委托,有些对话则无果而终,简单来看如下图所示:上述的“语句 1”“语句 2”...表示的是客户说的话或者是客户当前所处的“状态”,“动作 1”“动作 2”...表示的是经纪人作出的动作,由此可见,经纪人不同的动作类型可以促使客户状态的转移,最终会影响转委托是否成功。因此,分析经纪人的什么动作类型能够促使转委托就十分重要。在多轮对话中解决动作决策的方法比较多,下面将详细讲解 HMM 模型在对话管理中的应用。

2.HMM 模型简介

2.1 何为 HMM 模型

隐马尔科夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程,其目的是从可观察的序列结果来确定隐含的参数,然后根据这些隐含参数确定的模型对数据进一步分析。所谓的马尔科夫过程是不具备记忆特质的,换言之,马尔科夫过程的条件概率仅与系统的当前状态相关,而与它的历史或未来的状态是独立、不相关的,用数学语言可以描述为:具备离散状态的马尔科夫过程通常被称为马尔科夫链,一个马尔科夫链的结构如图:

如上图所示,对于 HMM 模型,,假设 S 是所有可能的隐状态集合,O 是所有可能的观测状态的集合,即:

其中,k 是隐藏状态数,m 是可能的观测状态数。

对于一个长度 T 的序列,I 为对应的隐状态序列,O 为对应的观测序列,即:

HMM 模型做了两个很重要的假设:
a3f9137329e54c46861bba36f315fee9-image.png

99a2157d12054142980d175f4e031c8a-image.png

2.2 HMM 模型可以解决什么问题

dccac9d8b62444b788e6a47352536c42-image.png

法解决。下一节将从理论层面介绍 EM 算法。

3.EM 算法简介

3.1 何为 EM 算法

9afcd164386044418eacc23dafb8f7ea-image.png

3.2 EM 算法的理论推导

E 步:建立参数的似然函数:

M 步: 求使得上式极大化的λ

将似然函数展开:

接下来根据极大似然估计求参数π,A,B:

4.实验过程

上面三个章节分别讲述了问题的背景和 HMM 模型、EM 算法的理论背景,接下来将从建模过程上介绍为什么我们的问题可以选用 HMM 模型,并通过实验结果分析我们是如何在 DM 中做动作决策的。

4.1 为什么可以选用 HMM 模型

能够使用 HMM 模型来解决的问题一般具有两个特征:一是要研究的问题是基于序列的,二是研究的问题中包含两类数据,一类是可以观测到的,即观测序列,另一类是不能观测到的,以隐藏状态序列。

而我们在贝壳找房 APP 获得的客户和经纪人之间的对话记录可以看做是一个基于时间的序列,两者的对话过程是客户不断对经纪人建立信任的过程,只有当两者的对话到达一定程度,也就是说客户能够充分信任经纪人时,他才会将自己的联系方式发送给经纪人,即完成“转委托”。然而,在数据中,我们只能观测到客户和经纪对话的内容而无法很好观测或者量化客户对经纪人的“信任程度”,因此,我们可以将每一个会话中客户的语言序列当做观测序列,将客户对经纪人的“信任程度”当做隐藏状态序列。 综上所述,我们面临的问题可以用 HMM 模型来解决。

4.2 建模

我们将对话中客户的消息序列抽象成一个马尔科夫链,直观来看可以这样理解:

我们将隐状态定义成 0~49 共 50 种状态,上图中的 6,16,26,36,5,8,10 就是一个隐状态序列,第二排的汉字就是客户的消息序列,我们会将该消息序列的自然语言理解(Natural Language Understanding,NLU)模块的结果编码成计算机可以理解的形式,形成新的序列作为观测序列a_1,a_2,...表示经纪人的动作类型。隐状态之间的状态转移原因可以理解成经纪人的动作类型,因此,我们可以通过分析优秀经纪人(转委托率 > γ1)和一般经纪人(转委托率 < γ2)在不同状态给出的动作类型的差异来指导一般经纪人在正确时间给出正确动作反应,以提高他们的转委托率。

观测序列将 NLU 的解析结果(emotion(情感类型)、sentence(句式类型)、skills(技能类型))结合其可信度(confidence)的值,按照 0.1 的间隔进行离散化,举个例子:对 emotion、sentence、skills 的类型进行编号:

NLU 的解析结果为:

其观测值编码为:“emotion:19-sentence:19-skills:10”

4.3 实验过程

  • 数据准备

本次实验选取了一个时间段内的 27w 条优秀经纪人和 19w 条一般经纪人的数据,按照上述方式对观测序列进行编码。

我们将隐状态设置成 50 种,因为观测序列也是离散的序列,因此我们将其认为服从多项式分布。在实验中,设置 10 轮训练,选得分最高的一轮得到的模型作为预测模型,这里的得分是指预测结果的对数似然函数。

经纪人的动作是根据动作分类模型得到的,动作共分为 19 种,动作和其 id 的对应关系:
cffc6920015e4b429166b0922f82968c-image.png

  • 实验过程

首先安装需要用到的第三方库:hmmlearn,在 python 的环境下用命令行“pip install hmmlearn”即可完成。hmmlearn 实现了三种类型的 HMM 模型,按照观测状态是连续的还是离散的可以分为两类。GaussianHMM 和 GMMHMM 是连续观测状态的 HMM 模型,而 MultinomialHMM 是离散观测状态的模型。

在上述分析中,我们所要解决的问题中观测序列、隐藏序列都是离散的,因此这里我们选用 hmmlearn.hmm.MultinomialHMM(n_components=n_states,n_iter=30,tol=0.001,covariance_type='diag'),即多项式分布的隐马尔科夫模型,设置迭代收敛阈值为 0.001,指定每个状态的的方差矩阵为对角矩阵。

在模型训练中,我们训练 10 轮,选取其中得分最大的一轮训练结果作为预测的模型:例如上述图片展示的训练过程,选取第 4 轮训练的模型作为预测模型。

  • 结果分析

分析数据中客户说的话所处的状态的分布为:将保存下来的模型分别用于优秀经纪人和一般经纪人对话中客户说话状态的预测,分析相同状态下,优秀经纪人和一般经纪人给出的动作的差异。下图表示在客户状态为 20 时,优秀经纪人和一般经纪人做出的 19 种动作的分布:

从上图中可以看出,在客户状态为 20 时,优秀经纪人作出动作 9 和 11 相对较多,而一般经纪人在该状态下,动作 9 和 11 的出现率相对较低,因此,可以根据这一分析结果,在客户状态为 20 时,除了 1,3 动作出现概率较高外,可以指导经纪人提高 9,11 动作的出现率。

举个例子:

如上图所示,两个例子中,当前客户消息都处于状态 20,优秀经纪人和一般经纪人的回复是存在差异的,因此,可根据这些差异来指导一般经纪人进行合适动作选择。

5.参考资料

[1]隐马尔科夫模型 https://www.cnblogs.com/pinard/p/6945257.html

[2]HMM http://www.huaxiaozhuan.com/%E5%B7%A5%E5%85%B7/scikit-learn/chapters/7.HMM.html

[3]NLP 笔记 - 多轮对话之对话管理 http://www.shuang0420.com/2018/01/03/NLP%E7%AC%94%E8%AE%B0+-+%E5%A4%9A%E8%BD%AE%E5%AF%B9%E8%AF%9D%E4%B9%8B%E5%AF%B9%E8%AF%9D%E7%AE%A1%E7%90%86(Dialog+Management)/

作者介绍

魏林林,就读于电子科技大学,现于贝壳找房语言智能与搜索部实习,主要从事对话系统相关工作。


本文地址:https://www.6aiq.com/article/1581052051729
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出