Data-Driven Response Generation in Social Media

Data-Driven Response Generation in Social Media 是个比较古老的(2011年)论文了,做的事情是通过统计机器翻译(Statistical Machine Translation,SMT)来做回复生成。什么是对话生成呢?即给定用户的任意的一句话,输出一个合适的回复。

有这样一个发现,在自然的话语中,相邻的句子间常常有较强的结构上的关系(Hobbs, 1985),比如:

Stimulus: I’m slowly making this soup…… and it smells gorgeous!
Response: I’ll bet it looks delicious too! Haha

其中”this soup”对应”it”,”smells”对应”looks”,”gorgeous”对应”delicious”,这和翻译是很相似的,所以我们想能不能使用SMT去做回复生成呢?

统计机器翻译(Statistical Machine Translation)

首先简单介绍一下什么是统计机器翻译,我们拿最简单的模型来作说明。给定一个源语言的句子SS,我们要生成一个最可能的翻译T^\hat{T}

T^=argmaxTP(TS)=argmaxTP(ST)P(T)P(S)=argmaxTP(ST)P(T)\begin{aligned} \hat{T} &= argmax_T P(T|S) \\ &= argmax_T \frac{P(S|T)P(T)}{P(S)} \\ &= argmax_T P(S|T)P(T) \end{aligned}

其中P(ST)P(S|T)是翻译模型(Translation model),用于完整的表达意思;P(T)P(T)是语言模型(Language model),用于生成流畅的句子。

P(ST)=Πi=1Iϕ(siti)d(aibi1)P(S|T)=\Pi_{i=1}^{I}\phi(s_i|t_i)d(a_i-b_{i-1})

其中ϕ(siti)\phi(s_i|t_i)是短语的概率,由翻译表给出,d(aibi1)d(a_i-b_{i-1})是两个语言中短语位置的相对距离。注意这里使用的是短语而不是单词,因为单个单词很多时候不能正确地表达意思,比如take off,单独拿出来take和off进行对应的话肯定不知所云了。

P(w1n)=Πk=1nP(wkw1k1)Πk=1nP(wkwkN+1k1)P(w_1^n) = \Pi_{k=1}^n P(w_k | w_1^{k-1}) \approx \Pi_{k=1}^n P(w_k | w_{k-N+1}^{k-1})

其中w1nw_1^n表示单词序列w1,w2,wnw_1, w_2, \cdots w_n,等式难以计算,所以使用马尔可夫假设进行估算,假设每个词只与它前面NN个词有关,这样的模型叫做N-Gram模型。

至于如何生成句子,如何将翻译decoding出来,就需要使用集束搜索(Beam Search)了。

回复生成比机器翻译更困难

回复生成要比机器翻译任务更加困难,主要有以下两个难点。

可能的回复范围更广

相比于机器翻译,回复生成对于一个源语句,它可能的回复太多了。而且由于两边都是同一语言,会产生词汇重复(Lexical Repetition)的问题,因为与某个短语联系最强的短语是它本身。直接套用SMT可能会产生下面这种情况:

Stimulus: I’m slowly making this soup…… and it smells gorgeous!
Response: I’ll bet it looks delicious too! Haha

回复与源语句仅仅有一点细微的变化,这是我们不愿看到的,所以我们采取了一些方法来不鼓励这种词汇相似的翻译:

  1. 将所有的一个短语是另一个短语的子串的短语对剔除掉
  2. 引入一个新的feature来对相似的词汇进行惩罚:

ϕlex(s,t)=J(s,t)\phi_{lex} (s,t)=J(s,t)

其中J(s,t)J(s,t)sstt的单词的集合的Jaccard Similarity,J(s,t)=st/stJ(s,t)=|s \cap t|/|s \cup t|.

未对齐的单词更多

解决方法是生成所有的短语对(最大长度为4),这样能够使得短语对的个数还是O(sr)O(|s||r|)量级。Fisher精确检验是统计显著性检验方法,用于检查两个二进制变量的相关性,所谓二进制变量就是变量的值域只有两个值的变量,Fisher精确检验相比于卡方检验在频数较小的时候相对精确。

信息检索(Infomation Retrieval)方法

为一个句子s找到一个回复主要有以下两种方法:

  1. IR-STATUS[rargmaxisim(s,si)r_{argmax_i sim(s, s_i)}] 即检索与ss最相似的sis_i对应的回复rir_i
  2. IR-RESPONSE[rargmaxisim(s,ri)r_{argmax_i sim(s, r_i)}] 即检索与ss最相似的回复rir_i.

直觉上IR-STATUS更合理一些,但在实际实验中发现IR-RESPONSE比IR-STATUS要好,但是IR-RESPONSE比MT的方法还要差一点点。

Author: Chen Cui
Link: https://cuichen.cc/data-driven-response-generation-in-social-media/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
WeChat Pay
Alipay