Multi-Turn Dialogue Response Selection

A Sequential Matching Framework for Multi-turn Response Selection in Retrieval-based Chatbots

簡介:針對多輪對話的response selection暴备,關(guān)鍵在于如何選擇上文相關(guān)信息進行建模风响。目前存在的模型大都單獨對上文信息進行建模,忽略了response與context之間的交叉特征桥言。作者提出了序列匹配模型(sequential matching framework (SMF)),計算context中每輪query與response的交互特征,然后通過時序模型RNN對交互特征進行建模昔馋,最后將時序模型的hidden state作為最終的特征用于計算模型匹配得分接校。實驗結(jié)果證明猛频,該模型取得了state of art的效果。

  • 將用戶歷史所有query通過表征函數(shù)f(.)進行編碼蛛勉,候選答案通過另一個表征函數(shù)f^{'}(.)進行編碼
  • 用戶多輪對話過程是一個時序過程鹿寻,因此可以通過時序模型對歷史query進行編碼h(.)
  • 最后通過匹配函數(shù)m(.)融合時序模型輸出h(.)和答案編碼向量f^{'}(r)

Unified Framework Of Matching Model

匹配模型g(s,r)可以通過如下公式進行定義
g(s,r)=m(h(f(u_1),...,f(u_n)),f^{'}(r))

Deep Learning To Respond (DL2R) Architecture

\left\{\vec w_{v,1},...,{\vec w_{v,n_v}}\right\}代表詞向量矩陣,因此句子的表示可以通過如下公式獲得
f_{dl2r}(v)={\rm CNN}({\rm BiLSTM}(\vec w_{v,1},...,\vec w_{v,n_v}))
首先通過啟發(fā)式的方法將context轉(zhuǎn)換為s^{'}=\left\{v_1,...,v_o\right\}

  • 啟發(fā)式的方法

    • no context, s^{'}={u_n}
    • whole context, s^{'}=\left\{u_1\boxplus...\boxplus u_n, u_n\right\}
    • add-one, s^{'}=\left\{u_1\boxplus u_n,...,u_{n-1}\boxplus u_n, u_n\right\}
    • drop-out, s^{'}=\left\{(c\backslash u_1)\boxplus u_n,...,(c\backslash u_{n-1})\boxplus u_n, u_n\right\}诽凌,c\backslash u_i表示從context中排出u_i

    \boxplus代表膠狀向量毡熏,拼接向量為一個長向量
    m_{dl2r}(s,r)=\sum \limits_{i=1}^{o}{\rm MLP}(f_{dl2r}(v_i)\boxplus f_{dl2r}(v_o)).{\rm MLP}(f_{dl2r}(v_i)\boxplus f_{dr2r}^{'}(r))

Multi-View匹配模型

f_w(u_i)=[\vec w_{u_i,1},...,\vec w_{u_i,n_i}]
f_u(u_i)={\rm CNN}(\vec w_{u_i,1},...,\vec w_{u_i,n_i})
f_{mv}(u_i)=\begin{Bmatrix}f_w(u_i),f_u(u_i)\end{Bmatrix}
其中,f_w(u_i)f_u(u_i)分別表示詞粒度的特征和句子粒度的特征
同理皿淋,f_{mv}^{'}(r)可以通過如下公式計算
f_w^{'}(r)={\rm GRU}(\vec w_{r,1},...,\vec w_{u_r,n_r})
f_u^{'}(r)={\rm CNN}(\vec w_{r,1},...,\vec w_{u_r,n_r})
f_{mv}^{'}(r)=[f_{w}^{'}(r)^{\top},f_u^{'}(r)^{\top}]^{\top}
context特征可以通過如下公式計算
h_{mv}(f_{mv}(u_1),...,f_{mv}(u_n))=[h_w(f_w(u_1),...,f_w(u_n))^{\top},h_u(f_u(u_1),...,f_u(u_n))^{\top}]^{\top}
其中招刹,詞粒度的特征h_w(.)和句子粒度的特征h_u(.)可以通過如下公式計算
h_w(f_w(u_1),...,f_w(u_n))={\rm GRU}(f_w(u_1),...,f_w(u_n)])
h_u(f_u(u_1),...,f_u(u_n))={\rm GRU}(f_u(u_1),...,f_u(u_n))
模型的完整計算公式如下


其中,M1和M2代表特征的線性變化

SMF

簡介:SMF模型與之前模型的主要區(qū)別:1.在模型的底層計算context中query與response的交叉信息窝趣;2.采用query與response交互作用的特征進行時序建模疯暑,這兩個區(qū)別克服了現(xiàn)有模型的缺點。

  • 將context中每一個query與answer做線性變換f(u_i,r)

  • 將線性變換之后的輸出做為時序模型的輸入

  • 最后通過匹配函數(shù)m(.)融合時序模型輸出h(.)

    SMF模型可以通過如下公式進行總結(jié)
    h_k=h^{'}(h_{k_1},f(u_k,r))
    g(s,r)=m(h(f(u_1,r),f(u_2,r),...,f(u_{n_i}r)))

Utterance-Response Matching

SCN

計算query和answer之間的詞級相似度矩陣\rm M_1
e_{1,i,j}=e_{u,i}^{\top}.e_{r,j}
計算句子間的相似度矩陣\rm M_2哑舒。分別將context和response輸入時序模型進行編碼
\rm H_u=[h_{u,i},...,h_{u,n_u}]
\rm H_r=[h_{r,i},...,h_{r,n_r}]
e_{2,i,j}=h_{u,i}^{\top}\rm Ah_{r,j}
然后妇拯,將\rm M1\rm M2輸入2D卷積神經(jīng)網(wǎng)絡(luò)
z^{0,f}=\mathbf M_f, f \in \left\{1,2\right\}
z^{(l,f)}=[z_{i,j}^{(l,f)}]_{I^{(l,f)}\times J^{(l,f)}}
z_{i,j}^{(l,f)}=\delta(\sum_{f^{'}=0}^{F_{l-1}}\sum_{s=0}^{r_w^{(l,f)}}\sum_{t=0}^{r_h^{(l,f)}}\mathbf W_{s,t}^{(l,f)}.z_{i+s,j+t}^{l-1,f^{'}} + \mathbf b^{l,k})
其中,在卷積神經(jīng)網(wǎng)絡(luò)之后洗鸵,接一層max-pooling
z_{i,j}^{(l,f)}=\max \limits_{p_w^{l,f}>s\geq 0}\max \limits_{p_h^{(l,f)}>t \geq 0} z_{i+s,j+t}
最后越锈,將max-pooling之后的特征進行拼接方灾,并投影到低維特征空間
\mathbf v=\mathbf W_c[z_{0,0}^{l^{'},1},...,z_{I,J}^{l^{'},1},z_{0,0}^{l^{'},2},...,z_{I,J}^{l^{'},2}]+\mathbf b_c

SAN

權(quán)重矩陣計算如下
\omega_{i,j}=v^{\top}tanh(e_{u,j}^{\top}\mathbf W_{att1}e_{r,i}+\mathbf b_{att1})
\alpha_{i,j}=\frac{e^{\omega_{i,j}}}{\sum \limits_{j=1}^{n_u}e^{\omega_{i,j}}}
其中萝风,\mathbf W_{att1}\mathbf b_{att1}是訓(xùn)練參數(shù)。\omega_{ij}代表context與response之間的相關(guān)程度握截。
ue_{r,i}之間的交叉矩陣計算公式
t_{1,i}=(\sum \limits_{j=1}^{n_u}\alpha_{i,j}e_{u,j})\bigodot e_{r,i}
其中火邓,\bigodot代表Hadamard product丹弱。
同理德撬,可以對句子粒度的特征執(zhí)行相似處理得到
\omega_{i,j}^{'}=v^{'\top}tanh(h_{u,j}^{\top}\mathbf W_{att2}h_{r,i}+\mathbf b_{att2})
a_{i,j}^{'}=\frac{e^{\omega_{i,j}^{'}}}{\sum \limits_{j=1}^{n_u}e^{\omega_{i,j}^{'}}}
t_{2,i}=\sum \limits_{j=1} ^{n_u}(a_{i,j}^{'}h_{u,j})\bigodot h_{r,i}
在獲得詞粒度和句子粒度的特征之后,將這兩類特征進行拼接輸入時序模型
t_i=[t_{1,i}^{\top},t_{2,i}^{\top}]
\mathbf T=[t_1,...,t_{n_r}]
\mathbf v=\rm GRU(\mathbf T)

  • Matching Accumulation
    SCN和SAN模型都采用GRU作為時序模型對特征進行編碼躲胳,通過標(biāo)準(zhǔn)時序模型的門函數(shù)加強重要特征的權(quán)值蜓洪,減少不重要信息帶來的影響。

  • Matching Prediction

    • Last State
      第一個方法就是直接取時序模型的最后一個狀態(tài)h_n做為匹配得分坯苹。該方式基于上下文的重要特征通過GRU門函數(shù)之后隆檀,被編碼在向量h_n
      m_{last}(h_1,...,h_n)=\rm softmax(\mathbf W_1h_n+\mathbf b_1)
      其中,\mathbf W_1\mathbf b_1為參數(shù)向量

    • Static Average
      第二個方法通過所有hidden states的位置進行加權(quán)粹湃,如下:
      m_{static}(h_1,...,h_n)=\rm softmax(\mathbf W_s(\sum_{i=1}^n w_i h_i) + \mathbf b_s)
      w_i是第i個hidden state的權(quán)值恐仑,一旦{\left\{w_i\right\}}^n_{i=1}確定,對于任何(s, r)都是固定的为鳄,因此我們稱之為static average菊霜。與第一種方式相比,static average可以利用更多的信息济赎,避免信息的損失鉴逞。

    • Dynamic Average
      與static average相似,我們同樣采用所有hidden states來計算匹配得分司训。不同之處在于构捡,由hidden state和query向量通過attention機制動態(tài)計算。不同的上下文壳猜,將會計算得到不同的權(quán)值勾徽,因此稱之為dynamic average。
      t_i=t_s^{\top}tanh(\mathbf W_{d1}h_{u,n_u}+\mathbf W_{d2}h_i+\mathbf b_{d1})
      \alpha_i=\frac{exp(t_i)}{\sum_i exp(t_i)}$ $m(h_1,...,h_n)=\rm softmax(\mathbf W_d(\sum_{i=1}^n \alpha_ih_i)+\mathbf b_{d2})
      其中统扳,t_s是訓(xùn)練中學(xué)習(xí)的虛擬上下文向量喘帚。

Multi-Turn Response Selection for Chatbots with Deep Attention Matching Network

簡介:受Transformer的啟發(fā),作者從2個方面擴展了attention mechanism:1)通過疊加self-attention咒钟,作者構(gòu)建了不同粒度的文本片段表示吹由;2)通過context與response利用attention抽取真正匹配的文本片段。實驗結(jié)果證明朱嘴,該模型的效果遠遠優(yōu)于目前的state-of-the-art模型倾鲫。

  • Attentive Module


Attentive Module有三個輸入:query sentence、key sentence和value sentence萍嬉。Attentive Module首先計算query sentence與key sentence的相似矩陣乌昔,然后將attention結(jié)果應(yīng)用在value sentence中
Att(Q,k)=[{\rm softmax}(\frac{Q[i].K^{\rm T}}{\sqrtdzwesyt})]_{i=0}^{n_Q-1}
V_{att}=Att(Q,K).V \in R^{n_Q \times d}
Q=[e_i]_{i=0}^{n_Q-1},K=[e_i]_{i=0}^{n_k-1},V=[e_i]_{i=0}^{n_v-1}
其中,n_Q壤追、n_Kn_V代表句子中詞的個數(shù)磕道,e_i代表d維的embedding向量,n_Kn_V相等行冰。
融合了詞之間的語義信息之后溺蕉,將V_{att}[i]Q[i]相加贯卦,從而得到一個新的詞表示。為了避免梯度消失和梯度爆炸的問題焙贷,模型接了一層layer normalization;然后贿堰,輸入前饋神經(jīng)網(wǎng)絡(luò)FFN辙芍,激活函數(shù)為ReLU
{\rm FFN}(x)=max(0, xW_1+b_1)W_2+b_2
參考residual network,將{\rm FFN}(x)x相加({\rm FFN}(x)x維度相同)作為最終的特征羹与。

  • Representation
    \mathbf U_i^{l+1}={\mathbf AttentiveModule}({\mathbf U}_i^l,{\mathbf U}_i^l,{\mathbf U}_i^l)
    \mathbf R^{l+1}={\mathbf AttentiveModule}({\mathbf R}^l,{\mathbf R}^l,{\mathbf R}^l)
    其中故硅,l \in \left\{0,L-1\right\}。至此得到了不同粒度的表示[\mathbf U_i^0,...,\mathbf U_i^{\rm L}][\mathbf R^0,...,\mathbf R^{\rm L}]纵搁。

  • Utterance-Response Matching
    根據(jù)不同層l之間的詞粒度表示吃衅,通過如下公式計算context與response之間相關(guān)性
    {\mathbf M}_{self}^{u_i,r,l}=\left\{{{\mathbf U}_i^l[k]^{\rm T}.{\mathbf R}^l[t]}\right\}_{n_{u_i} \times n_r}
    cross-attention顧名思義,即是在attention計算階段就計算context與response之間的相關(guān)性
    \tilde{\mathbf U}_i^l={\rm AttentiveModule}(\mathbf U_i^l, \mathbf R^l, \mathbf R^l)
    \tilde{\mathbf R}_i^l={\rm AttentiveModule}(\mathbf R^l, \mathbf U_i^l, \mathbf U_i^l)
    \mathbf M_{cross}^{u_i, r,l}=\left\{\tilde{\mathbf U}_i^l[k]^{\rm T}.\tilde{\mathbf R}^l[t]\right\}_{n_{u_i} \times n_r}

  • Aggregation
    至此腾誉,我們得到了一個三維的特征表示
    \mathbf Q=\left\{Q_{i,k,t}\right\}_{n \times n_{u_i} \times n_r}
    其中徘层,n表示Attentive Modulue的深度,n_{u_i}表示context中第i輪utterance詞的個數(shù)利职,n_r表示response詞的個數(shù)趣效。每一個pixel的定義如下
    Q_{i,k,t}=[\mathbf M_{self}^{u_i,r,l}[k,t]]_{l=0}^{\rm L} \oplus [\mathbf M_{cross}^{u_i, r, l}[k, t]]_{l=0}^{\rm L}
    其中,\oplus表示concatenation猪贪。接著跷敬,作者通過2層3D的CNN抽取文本的匹配的特征,然后flatten特征之后將其輸入單層的多層感知機
    g(c,r)=\delta(W_3f_{match}(c,r)+b_3)
    其中热押,\delta代表sigmoid函數(shù)西傀,表示該r是否為正確的答案。

  • DAM模型的損失函數(shù)為負對數(shù)損失函數(shù)
    p(y|c,r)=g(c,r)y+(1-g(c,r))(1-y)
    {\rm L}(.)=-\sum \limits_{(c,r,y) \in D}log(p(y|c,r))

A Context-aware Attention Network for Interactive Question Answering

簡介:該論文對多輪問答的建模與其他工作稍有不同桶癣,網(wǎng)絡(luò)結(jié)構(gòu)分為三部分:Question Module拥褂、Input Module和Answer Module。Question Module負責(zé)對當(dāng)前問題進行特征編碼牙寞;Input Module負責(zé)對上文信息進行特征編碼肿仑;Answer Module負責(zé)對答案進行編碼。同時為了獲得上文信息與當(dāng)前問題的關(guān)聯(lián)性碎税,通過Question Module計算得到特征u與Input Module計算相關(guān)矩陣尤慰,保留相關(guān)信息,忽略不相關(guān)信息雷蹂。同時為了更好的回答用戶的問題伟端,對于不確定的問題,模型并不直接給出答案匪煌,而是通過反問的方式责蝠,讓用戶明確自己的問題党巾,然后加入該用戶反饋之后再進行回答。實驗結(jié)果證明霜医,該模型取得了比目前state-of-art更好的效果齿拂。

  • Question Module
    首先,對question采用時序模型GRU進行特征編碼
    g_j^q={\rm GRU}_w(g_{j-1}^q,x_j^q)
    然后肴敛,通過self-attention對每個詞的輸出進行加權(quán)署海,獲得最終的question表示。
    \gamma_j={\rm softmax}(v^{\rm T}g_j^q)
    \mathbf u=\mathbf W_{ch}\sum \limits_{j=1}^{N_q} \gamma_j g_j^q+b_c^{(q)}

  • Input Module
    對上文句子的每個詞采用時序模型GRU進行特征編碼
    \mathbf h_i^t={\rm GRU}_w(\mathbf h_{i-1}^t,\mathbf x_i^t)
    為了添加上句特征医男,這里采用2層的FFN對上句特征輸出和當(dāng)前GRU狀態(tài)進行投影
    \mathbf e_i^t=\delta(\mathbf W_{ee}tanh(\mathbf W_{es}\mathbf s_{t-1} + \mathbf W_{eh}\mathbf h_i^t+\mathbf b_e^{(1)}) + \mathbf b_e^{(2)})
    在獲得每個詞的表示之后砸狞,通過question的特征對當(dāng)前句子進行attention計算,統(tǒng)計句子每個詞的相關(guān)度镀梭,然后通過加權(quán)求和的方式獲得句子的特征表示刀森。
    \alpha_i^t={\rm softmax}(\mathbf u^{\rm T}\mathbf e_i^{t})
    \mathbf y_t=\sum\limits_{i=1}^{N_t}\alpha_i^t \mathbf h_i^t
    現(xiàn)在我們得到了上文每個句子的特征表示,接下來我們需要對所有上文句子表示進行處理报账。因為用戶的問題都是具有時序關(guān)系的研底,因此這里采用時序模型GRU對上文所有句子進行編碼,然后通過question進行attention計算透罢,并加權(quán)求和得到最后的上文特征輸出飘哨。
    \mathbf s_t={\rm GRU}_s(\mathbf s_{t-1},\mathbf y_t)
    \beta_t={\rm softmax}(\mathbf u^{T}\mathbf s_t)
    \mathbf m=\sum\limits_{t=1}^{N}\mathbf {\beta}_t\mathbf s_t

  • Answer Module
    答案生成模塊分為兩部分:Answer Generation和Interactive Mechanism。

    • Answer Generation:根據(jù)當(dāng)前question的特征輸出u和上文特征輸出m直接生成答案琐凭;
    • Interactive Mechanism:則是在不確定Answer Generation能很好回答用戶問題時芽隆,給出問題的補充問法,從而讓用戶說的更加完整统屈。
  • Answer Generation
    答案生成模塊相對比較簡單胚吁,對um相加然后通過一個時序模型GRU進行decoder。
    \hat x_k ={\rm softmax}(\mathbf W_{od}\mathbf z_k+\mathbf b_o)
    \mathbf z_k={\rm GRU}_d(\mathbf z_{k-1},[\mathbf m + \mathbf u;\hat {\mathbf {x}}_{k-1}])

  • Interactive Mechanism
    對用戶反饋的文本進行時序編碼愁憔,然后直接求和(這里假設(shè)所有詞具有同等重要權(quán)重)
    g_d^f={\rm GUR}_w(\mathbf{g}_{d-1}^f,\mathbf x_d^f)
    \mathbf f=\frac{1}{N_f}\sum\limits_{d=1}^{N_f} g_d^f
    最后將計算獲得的反饋表征用于生成答案腕扶。通過用戶反饋我們可以判斷上文不同句子的重要程度,因此可以通過該反饋表征更新上文權(quán)重吨掌。
    \mathbf r=tanh(\mathbf W_{rf}\mathbf f+\mathbf b_r^{(f)}
    \beta_t={\rm softmax}(\mathbf u^{T}\mathbf s_t+\mathbf r^{\rm T}\mathbf s_t)

Enhanced Sequential Representation Augmented with Utterance-level Attention for Response Selection

簡介:基于檢索的聊天機器人半抱,針對多輪問答場景,充分利用句子粒度的表征和詞粒度的表征是非常重要的膜宋。句子的特征表示包括:通過句子粒度attention獲得的Sentence Embedding窿侈、位置信息表示和用戶信息表示。接著通過sentence-level attention判斷最相關(guān)的utterances秋茫。實驗結(jié)果證明史简,該模型的效果優(yōu)于baseline model。

  • Dual Encoder
    context的特征表示為C=\left\{c_1,c_2,...,c_p\right\}肛著,response的特征表示為R=\left\{r_1^k,r_2^k,...,r_q^k\right\}圆兵。context與response共享時序模型跺讯,因此有
    \vec h_t^w={\rm GRU}(\vec h_{t-1}^{w},w_t)
    \overleftarrow{h}_t^w={\rm GRU}(\overleftarrow{h}_{t+1}^w,w_t)
    其中,w=\left\{c,r^k\right\}殉农。然后對前后向的輸出進行concat
    h_t^w=[\overrightarrow{h}_t^w;\overleftarrow{h}_t^w]

  • Attention Layer
    在對詞進行編碼之后刀脏,通過dot attention計算context與response之間詞的相似矩陣
    e_{ij}^k=(h_i^c)^{\rm T}h_j^{r^k}
    對重要的詞賦于更高的權(quán)重,詞權(quán)重的計算如下
    \tilde{c}_i^k=\sum \limits_{j=1}^q \frac{exp(e_{ij}^k)}{\sum \limits_{s=1}^q exp(e_{is}^k)}h_j^{r^k}
    \tilde r_j^k=\sum \limits_{i=1}^p\frac{exp(e_{ij}^k)}{\sum \limits_{s=1}^p exp(e_{sj}^k)}h_i^c
    至此超凳,我們獲得了各自的詞對齊特征愈污,因此我們對詞編碼之后的特征進行增廣
    \bar{c}_i=h_i^c, \bar{r}_j^k=h_j^{r^k}
    m_c^k=[\bar c;\tilde{c}^k;\bar c - \tilde c^k;\bar c \bigodot \tilde c^k]
    m_r^k=[\bar r;\tilde{r}^k;\bar r - \tilde r^k;\bar r \bigodot \tilde r^k]

  • Aggregation Layer
    由于詞之間包含了詞上下文關(guān)系,因此這里采用了雙向的GRU模型來對詞粒度的上下文進行建模
    \overrightarrow{v}_{c,t}^k={\rm GRU}(\overrightarrow{v}_{c,t-1}^k, m_{c,t}^k)
    \overleftarrow{v}_{c,t}^k={\rm GRU}(\overleftarrow{v}_{c,t+1}^k, m_{c,t}^k)
    v_{c,t}^k=[\overrightarrow{v}_{c,t}^k;\overleftarrow{v}_{c,t}^k]

  • Pooling Layer
    由于我們最終需要的是句子的表示聪建,因此一個必然的操作就是pooling,這里選擇了max-pooling和last hidden組成了pooling layer
    v_{c,max}^k=\max \limits_{i=1}^p v_{c,i}^k
    v_{r,max}^k=\max \limits_{j=1}^p v_{r,j}^k
    v^k=[v_{c,max}^k;v_{r,max}^k;v_{c,p}^k;v_{r,q}^k]

Utterance-level Attention Layer
  • utterance embeddings


    • Sentence Embedding
      句子表示由2部分組成:word embedding求平均和時序模型的句子編碼

    • Position Embedding
      多輪對話中茫陆,utterances的位置信息是非常重要的特征金麸。最近的utterances與response有更高的相關(guān)性,因此作者將Sentence Embedding和Position Embedding進行拼接來豐富句子的特征簿盅。

    • User Embedding
      針對2個用戶的多輪對話挥下,每個用戶都有自己的角色和目的。因此作者對參與者的角色進行one-hot桨醋,然后與Sentence Embedding進行拼接棚瘟。
      將utterance embedding輸入時序模型(GRU)對句子進行編碼獲得多輪表示D,然后通過bilinear attention對context與response進行匹配
      s_k=D^{\rm T}WR_k
      u_{att_i}=\frac{exp(s_i)}{\sum \limits_{k=1}^lexp(s_k)}R_i

  • Prediction Layer
    詞粒度表示v^k和句子粒度表示u_{att_k}拼接到一個向量中喜最,然后輸入一層的前饋神經(jīng)網(wǎng)絡(luò)偎蘸,激活函數(shù)為{\rm ReLU}

Sequential Attention-based Network for Noetic End-to-End Response Selection

簡介:目前處理上下文的模型大部分都是hierarchy-based methods瞬内,因此不可避免的問題就是需要選擇加入上文的輪數(shù)迷雪。如果輪數(shù)設(shè)置較大,上文相對較短的會話不可避免就會大量補零虫蝶;同時如果設(shè)置太小章咧,可能會因為上文信息不夠,而導(dǎo)致語義不清能真。
針對上述問題赁严,本文作者直接將上文信息拼接到一個段文本中,因此將上下文匹配的問題轉(zhuǎn)化為單句匹配問題了粉铐。由于把所有的上文信息都拼接到了一段文本中疼约,從而該段文本不可避免會引入大量的噪聲,因此如果提取文本中的關(guān)鍵信息蝙泼,然后與response進行匹配是本文的關(guān)鍵所在忆谓。

  • Input Encoding
    文章采用了各種不同的word embedding,然后對每個詞的word embedding進行concatenate得到一個維度較高踱承,信息量較大的詞向量E(c_i)=[E_1(c_i),E_2(c_i),...,E_k(c_i)]倡缠;最后通過一個前饋神經(jīng)網(wǎng)絡(luò)進行降維d_{e_1}+d_{e_2}+...+d_{e_k} \rightarrow d_h哨免。
    將context向量拼接為一個長文本\mathbf c=(c_1,c_2,...,c_m),response向量為\mathbf r=(r_1,r_2,...,r_n)昙沦。為了獲得上下文信息琢唾,文章采用了雙向的時序模型(BILSTM)對向量進行編碼
    \mathbf c_i^{s}={\rm BiLSTM}_1(\mathbf E(\mathbf c),i)
    \mathbf r_j^{s}={\rm BiLSTM}_1(\mathbf E(\mathbf r),j)

  • Local Matching
    context與response的交叉特征是判斷兩者之間匹配度的重要因子,cross-attention計算公式如下
    e_{ij}=(\mathbf c_i^{s})^{\rm T}\mathbf r_j^{s}
    首先盾饮,通過cross-attention可以得到soft alignment采桃,對齊向量包含了context與response的局部相關(guān)性
    \alpha_{ij}=\frac{\rm exp(e_{ij})}{\sum \limits_{k=1}^{n}\rm exp(e_{ik})}, \mathbf c_i^mfbtek5=\sum \limits_{j=1}^{n}\alpha_{ij}\mathbf r_j^s
    \beta_{ij}=\frac{exp(e_{ij})}{\sum\limits_{k=1}^{m}exp(e_{kj})}, \mathbf r_j^d=\sum\limits_{i=1}^m\beta_{ij}\mathbf c_i^s
    然后,通過<\mathbf c_i^s, \mathbf c_i^d>可以獲得增廣特征
    \mathbf c_i^l={\rm F}([\mathbf c_i^s;\mathbf c_i^d;\mathbf c_i^s-\mathbf c_i^d;\mathbf c_i^s \bigodot \mathbf c_i^d])
    \mathbf r_j^l={\rm F}([\mathbf r_j^s;\mathbf r_j^d;\mathbf r_j^s-\mathbf r_j^d;\mathbf r_j^s \bigodot \mathbf r_j^d])
    其中丘损,{\rm F}是一層的前饋神經(jīng)網(wǎng)絡(luò)普办,激活函數(shù)為\rm ReLU

  • Matching Composition
    通過時序模型組合匹配特征
    \mathbf c_i^v={\rm BiLSTM}_2(\mathbf c^l,i)
    \mathbf r_j^v={\rm BiLSTM}_2(\mathbf r^l,j)
    然后徘钥,通過max-pooling和mean-pooling抽取時序特征
    y={\rm MLP}([\mathbf c_{max}^v;\mathbf c_{mean}^v;\mathbf r_{max}^v;\mathbf r_{mean}^v]
    最后衔蹲,將特征輸入MLP計算匹配得分,MLP為一層的前饋神經(jīng)網(wǎng)絡(luò)呈础,激活函數(shù)為tanh舆驶,最后對輸出取softmax。

Sentence-encoding based methods

在處理大量候選response的任務(wù)時而钞,直接使用ESIM模型耗時過高沙廉,因此作者采用了相對簡單的孿生網(wǎng)絡(luò)對response進行粗篩,之后再對粗篩的結(jié)果使用ESIM進行rerank臼节。


采用ESIM模型相同的輸入編碼方式撬陵,然后對時序模型的輸出進行加權(quán)求和

其中,网缝,是權(quán)重矩陣袱结,是一個可調(diào)的多頭參數(shù)。
句子向量可以通過權(quán)重矩陣對時序模型輸出加權(quán)求和計算得到

最后途凫,通過concat垢夹、difference和 the element-wise products對特征進行增廣

Multi-level Context Response Matching in Retrieval-Based Dialog Systems

簡介:本文對比的基線是Dual Encoder和SMN模型,從word-level和sentence-level兩個角度進行建模维费。該工作的出發(fā)點更多的是simplicity 和 efficiency果元,因此在結(jié)構(gòu)上并未突出特別的創(chuàng)新點。

  • Sequence Encoding
    首先犀盟,將context concatenate到一個向量而晒。然后,對context與response進行embedding稠密化阅畴,然后通過時序模型LSTM進行編碼倡怎,這里取時序模型的last hidden作為最終輸出,即c^{'}=h_{c,n}r^{'}=h_{r,n}

  • Sequence Level Similarity
    s=c^{'}\bigotimes r^{'}
    其中监署,\bigotimes代表向量叉積颤专。s代表CR之間的相似度青扔。

  • Word Level Similarity
    {\rm WLSM}_{i,j}=e_{ij}.e_{rj}
    其中引有,.代表dot product。至此涕刚,得到了一個相似矩陣晓避,作者通過另一個時序模型將相似矩陣轉(zhuǎn)換為向量t=h_n^{'} \in R^ll代表隱藏層的維度簇捍,h_n^{'}代表last hidden)。

  • Response Score
    P(R|C)={\rm sigmoid}(W^{'}.(s\bigotimes t)+b)
    其中俏拱,\bigotimes代表concatenation暑塑。

Deep Hybrid Networks Based Response Selection Fro Multi-Turn Dialogue Systems

簡介:作者提出了deep hybrid network (DHN)抽取上下文信息。首先锅必,通過每個utterance與response計算相似矩陣事格;然后,將多個相似矩陣進行concatenation得到一個大mathing matrix况毅。最后分蓖,通過若干層的深度卷積block抽取高維matching feature尔艇。本文的創(chuàng)新點更多的是將CliqueNet模型應(yīng)用到multi-turn dialogue中尔许,其他無太大創(chuàng)新點。

  • Multi-turn Context Representation
    首先终娃,計算每個utterance與response的匹配矩陣
    {\mathbf M_{u_i,r}}=\mathbf U_i.\mathbf S_1.\mathbf R^{T}
    其中味廊,\mathbf U_i=[e_{u_i}^1,e_{u_i}^2,...,e_{u_i}^{n_{u_i}}]R=[e_r^1,e_r^2,...,e_r^{n_r}]
    另外棠耕,通過時序模型RNN編碼句子中詞的上下文關(guān)系余佛,然后再次計算utterance與response之間的匹配矩陣
    z_{u_i}^t=\mathbf W_1.\delta(\mathbf W_2 e_{u_i}^t+ \mathbf W_3 z_{u_i}^{t-1}+b_1)+b_2
    \bar{\mathbf{M}}_{u_i, r}=\bar{\mathbf{U}}_i.\mathbf{S}_2.\vec{\mathbf{R}}^{\rm T}
    其中,\bar{\mathbf U}_i=[z_{u_i}^1,z_{u_i}^2,...,z_{u_i}^{n_{u_i}}]窍荧。最終辉巡,多輪context的特征表示為
    \mathbf{M}=[\mathbf{M}_{u_1,r};...\mathbf{M}_{u_n,r};\bar{M}_{u_1,r};...\bar{\mathbf{M}}_{u_n,r}]
    其中,\mathbf M \in R^{L \times P \times P}蕊退。

  • Context-aware Matching


    本文Matching Module完全參考CliqueNet網(wǎng)絡(luò)的設(shè)計結(jié)構(gòu)郊楣,Matching Module包含若干卷積block,每個block分為2階段瓤荔。第一階段净蚤,跟DenseNet就是相同的前饋結(jié)構(gòu),每一層都將合并來自前面所有層的輸出输硝。第二個階段今瀑,每個卷積層需要合并的內(nèi)容包含:比自己深的卷積層第一階段的特征圖,比自己淺的卷積層第二階段的特征圖。
    x_{i,2}=g(\sum\limits_{l<i}\mathbf W_{li}*x_{l,2}+\sum\limits_{m>i}\mathbf W_{mi}*x_{m,1})
    其中橘荠,g是一個非線性變換函數(shù)屿附,包含了BN-ReLU-Conv_{3 \times 3}^k*表示卷積砾医,+表示concatenation拿撩。
    作者這里疊加了三層block,每一層block包含了原始輸入和第二階段獲得的特征如蚜。每個block第二部分的輸出經(jīng)過transition layer(BN-ReLU-AP-Conv_{1 \times 1}^k压恒,其中AP是一個average pooling層)處理之后作為下一個block的輸入。將所有block輸出特征池化之后错邦,構(gòu)成了最終的匹配向量m探赫。

  • Aggregation

    獲得匹配向量之后,通過一層全連接層撬呢,然后softmax獲得匹配概率伦吠。最后利用交叉墑作為模型的損失函數(shù)
    L=-\sum\limits_{i=1}^N[y_i log(g(s_i,r_i))+(1-y_i)log(1-g(s_i,r_i))]

Knowledge-incorporating ESIM models for Response Selection in Retrieval-based Dialog Systems

簡介:論文參考ESIM模型結(jié)構(gòu),將多輪utterance拼接到一段文本中魂拦,然后做單輪匹配毛仪。本文另一個重要的點在于融合進外部信息來豐富匹配的特征,比如:Ubuntu手冊頁的命令描述芯勘。通過結(jié)合更多的外部信息來獲得更有的結(jié)果箱靴。

  • Word Representation Layer
    word representation由兩部分組成:word embedding和character-composed embedding。其中荷愕,word embedding包含了Glove word embedding和word2vec向量(在訓(xùn)練數(shù)據(jù)上預(yù)訓(xùn)練得到)衡怀;另外,character-composed embedding通過拼接BiLSTM前向和后向的final state安疗。

  • Context representation layer
    輸入包含三部分:context抛杨、response和外部知識(ubuntu手冊頁的命令描述)。采用BiLSTM模型對文本進行編碼荐类,三部分輸入共享模型參數(shù)
    \bar a_i={\rm BiLSTM}(\bar{a}_{i-1},w_i),1\leq i\leq m
    \bar b_j={\rm BiLSTM}(\bar b_{j-1},w_j),1\leq j \leq n

  • Attention matching layer

    • Attention Matching Layer同樣分為三部分:
      • response與外部信息
      • context與外部信息
      • context與response

    對context與response編碼向量計算attention怖现,然后加權(quán)求和得到對齊表示
    \tilde a_i=\sum\limits_{j=1}^n \frac{E_{ij}}{\sum\limits_{k=1}^n exp(E_{ik})}\bar b_j,1 \leq i \leq m
    \tilde b_j=\sum\limits_{i=1}^m \frac{E_{ij}}{\sum\limits_{k=1}^m exp(E_{ik})}\bar a_i,1 \leq j \leq n
    其中,E_{ij}=\bar a_j^{\rm T} \bar b_j計算context與response之間的相似度玉罐。
    有了對齊向量之后屈嗤,一個通用的做法就是通過concatenation、difference和element-wise product對特征進行增廣
    m_a^i=[\bar a_i,\tilde a_i;\bar a_i-\tilde a_i;\bar a_i \bigodot \tilde a_i],1 \leq i \leq m
    m_b^i=[\bar b_i,\tilde b_i;\bar b_i-\tilde b_i;\bar b_i \bigodot \tilde b_i],1 \leq i \leq n
    最后厌小,我們得到\left\{\rm dialog-context恢共、candidate-response和external-information\right\}

  • Matching aggregation layer
    Aggregation Layer采用另一個BiLSTM模型對向量進行編碼
    v_i^a={\rm BiLSTM}(v_{i-1}^a,m_i^a),1 \leq i \leq m
    v_j^b={\rm BiLSTM}(v_{j-1}^b,m_i^b),1 \leq j \leq n

  • Pooling layer
    池化層采用max-pooling和final state組合得到最終的向量,最后將v輸入全連接層得到最終的相似度
    v_{max}^a=\max \limits_{i=1}^m v_i^a
    v_{max}^b=\max \limits_{j=1}^n v_j^b
    v=[v_{max}^a;v_{max}^b;v_{last}^a;v_{last}^b]

End-to-end Gated Self-attentive Memory Network for Dialog Response Selection

簡介:作者提出了Gated Self-attentive Memory Network用于在模型訓(xùn)練中融合歷史會話和外部領(lǐng)域知識璧亚,通過self-attention加強utterance與對話歷史(或外部領(lǐng)域知識)的聯(lián)系讨韭。論文的出發(fā)點在于通過end-to-end的方式脂信,更好的融合外部的知識提升模型的效果;同時借鑒transformer的網(wǎng)絡(luò)結(jié)構(gòu)透硝,利用self-attention加強utterance的表征能力狰闪。

  • Bi-RNN based Utterance Encoding


特征編碼層為BiRNN,并且對時序模型正向和反向的last hidden進行concatenate濒生。

  • Memory Attention


輸入向量為\mathbf X=[x_1,...,x_J]埋泵,memory向量為\mathbf M=[m_1,...,m_K],其中\mathbf X\in R^{J\times D}, \mathbf M \in R^{K\times D}罪治。輸出向量為
\mathbf O={\rm Softmax}(\mathbf X\phi_1(\mathbf M)^{\rm T})\phi_2(\mathbf M)
其中丽声,\phi_1\phi_2是不同的{\rm Bi-RNN}

  • Gated Memory Attention


參考前人的工作觉义,作者采用gating mechanism對輸入和memory輸出進行融合
O^{'}=G.X+(1-G).O
其中雁社,G是激活函數(shù)為sigmoid的全連接神經(jīng)網(wǎng)絡(luò)層。

  • End-to-end GSMN


論文設(shè)計了多個hop晒骇,并且每個hop參數(shù)獨立霉撵。對多個utterance進行求和得到最后的向量c

  • External Knowledge Encoding
    作者通過向量表示外部領(lǐng)域知識的key-value pair。例如:({k_1,k_2,...,k_M}, {v_1,v_2,...,v_N}) k_i代表key中的第i個token洪囤,v_i代表value中的第i個token徒坡。最終的向量表示為word embedding求平均[\sum\limits_{i=1}^M \psi(k_i), \sum\limits_{i=1}^{N}\psi(v_i)]

  • Dialog History and Response Relevance
    獲得context的特征和response的特征之后,通過雙線性變化計算匹配度
    sim(c,a_j)=c^t.M.a_j
    Pr(j|c)=e^{sim(c,a_j)}
    其中瘤缩,M是訓(xùn)練參數(shù)喇完。在獲得context與response的相似匹配向量之后,通過softmax轉(zhuǎn)換為概率分布款咖。

Interactive Matching Network for Multi-Turn Response Selection in Retrieval-Based Chatbots

簡介:作者提出了一種新的神經(jīng)網(wǎng)絡(luò)框架:IMN(interactive matching network)何暮,用于多輪對話的答案選擇奄喂。模型同時使用了字符向量和詞向量用于解決問答系統(tǒng)常見的OOV(out-of-vocabulary)問題铐殃,參考ELMO模型作者設(shè)計了multi-layer RNNs,然后將context中所有query拼接為單句跨新,并計算與response之間的交叉信息富腊,以此豐富模型的特征,最后通過一個時序模型聚合文本特征域帐。實驗結(jié)果證明赘被,該模型獲得了state-of-the-art的效果。

  • Word Representation Layer
    參考前人經(jīng)驗肖揣,作者同時采用word-level embedding和character-level embedding(采用cnn模型對字符特征進行編碼得到詞粒度的特征)

  • Sentence Encoding Layer
    參考ELMO模型的設(shè)計民假,本文采用BILSTM作為block抽取句子特征,在L個block之后龙优,對每個block的輸出進行加權(quán)求和作為詞的編碼特征羊异。
    u_{k,i}^{l}={\rm BILSTM}(U_{k}^{l-1},i),i \in \left\{1,...,l_{u_k}\right\}
    r_{j}^{l}={\rm BILSTM}(R^{l-1},j),j \in \left\{1,...,l_r\right\}
    {\mathbf u}_{k,i}^{enc}=\sum \limits_{l=1}^{L}{w_l\mathbf u_{k,i}^l},i \in \left\{1,...,l_{u_k}\right\}
    {\mathbf r_j^{enc}}=\sum \limits_{l=1}^{L}w_l\mathbf r_j^l,j \in \left\{1,...,l_r\right\}
    其中,w_l為attention權(quán)值,在模型訓(xùn)練過程中學(xué)習(xí)得到野舶。

  • Matching Layer
    之前大量的論文已經(jīng)證明易迹,response與context之間的交叉特征是一個非常重要的特征∑降溃基于多輪對話的answer selection最重要的一個點就是如何選擇相關(guān)信息睹欲,并且過濾不相關(guān)的噪聲。
    首先一屋,將歷史所有會話按照詞粒度特征進行拼接
    \mathbf C^{enc}=Concatenate(\left\{\mathbf U_k^{enc}\right\}_{k=1}^{n})
    然后窘疮,計算response與context的相似矩陣
    e_{ij}=(\mathbf c_i^{enc})^{T}.\mathbf r_j^{enc}
    獲得相似矩陣之后,我們就可以分別計算response和context的對齊特征冀墨。
    \bar{ \mathbf c}_i^{enc}=\sum \limits_{j=1}^{l_r}\frac{exp(e_{ij})}{\sum \limits_{k=1}^{l_r}exp(e_{ik})}\mathbf r_j^{enc},i \in \left\{1,...,l_c\right\}
    \bar{\mathbf r}_j^{enc}=\sum \limits_{i=1}^{l_c}\frac{exp(e_{ij})}{\sum \limits_{k=1}^{l_c}exp(e_{kj})}\mathbf c_i^{enc},j \in \left\{1,...,l_r\right\}

    最后考余,通過concat、differences 和 the element-wise products對特征進行增廣轧苫。
    \mathbf C^{mat}=[\mathbf C^{enc};\bar{ \mathbf C}^{enc};\mathbf C^{enc} - \bar{\mathbf C}^{enc};\mathbf C^{enc} \bigodot \bar{\mathbf C}^{enc}]
    \mathbf R^{mat} = [\mathbf R^{enc};\bar{\mathbf R}^{enc};\mathbf R^{enc}-\bar{\mathbf R}^{enc};\mathbf R^{enc} \bigodot \bar{\mathbf R}^{enc}]
    至此楚堤,交叉特征計算完成。下一步就是將context特征轉(zhuǎn)換回單句格式含懊。
    \left\{\mathbf U_k^{mat}\right\}_{k=1}^{n}=Separate(\mathbf C^{mat})

  • Aggregation Layer
    聚合層常見的設(shè)計是在RNN之后接一個pooling層身冬,文章這里稍作修改,采用max-pooling和last hidden的拼接特征作為輸出岔乔。需要注意酥筝,這里context和response共享BILSTM模型。
    \mathbf u_{k,i}={\rm BILSTM}(\mathbf U_k^{mat},i),i \in \left\{1,...,l_{u_k}\right\})
    \mathbf r_j={\rm BILSTM}(\mathbf R^{mat},j),j \in \left\{1,...,l_r\right\}
    {\mathbf u}_k^{agr}=[{\mathbf u}_{k,max};{\mathbf u}_{k,l_{u_k}}],k \in \left\{1,...,n\right\}
    \mathbf r^{agr}=[\mathbf r_{max};\mathbf r_{l_r}]
    在獲得各個句子的輸出特征之后雏门,通過一個時序模型抽取最終的聚合特征嘿歌。
    \mathbf c_k={\rm BILSTM}(\mathbf U^{agr},k),k \in \left\{1,...,n\right\}
    \mathbf c^{agr}=[\mathbf c_{max};\mathbf c_n]
    最后,將context聚合特征和response特征拼接作為prediction layer的輸入特征茁影。
    \mathbf m=[\mathbf c^{agr};\mathbf r^{agr}]

  • Prediction Layer
    這里采用multi-layer perceptron (MLP)作為最后一層宙帝,返回匹配得分。

  • Training Criteria
    最后通過計算交叉墑對模型進行迭代計算
    \mathcal {L}(\mathcal {D},\Theta)=-\sum \limits_{(c,r,y)\in D}[ylog(g(c,r))+(1-y)log(1-g(c,r))]

總結(jié)

  • 目前多輪問答已經(jīng)被廣泛的研究并應(yīng)用于生產(chǎn)募闲。大體可以總結(jié)為如下幾類
    • 多輪utterance拼接到一個utterance步脓,將多輪問題轉(zhuǎn)換為單輪匹配問題
    • 分層建模:先得到句子的表示,然后在通過時序模型對多輪進行建模
    • 將問題分為三部分:歷史會話浩螺、當(dāng)前會話和response
    • 加入外部信息豐富模型的特征
  • 模型結(jié)構(gòu)可以總結(jié)為
    • Transformer替換Bi-LSTM或者Bi-GRU
    • 參考Residual-net和Dense-net靴患,將模型的層數(shù)由單層擴展到多層

Future work

  • reinforcement learning
  • multi-task
  • deep network
  • adversarial learning
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市要出,隨后出現(xiàn)的幾起案子鸳君,更是在濱河造成了極大的恐慌,老刑警劉巖患蹂,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件或颊,死亡現(xiàn)場離奇詭異腿时,居然都是意外死亡,警方通過查閱死者的電腦和手機饭宾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門批糟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人看铆,你說我怎么就攤上這事徽鼎。” “怎么了弹惦?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵否淤,是天一觀的道長。 經(jīng)常有香客問我棠隐,道長石抡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任助泽,我火速辦了婚禮啰扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗡贺。我一直安慰自己隐解,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布诫睬。 她就那樣靜靜地躺著煞茫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摄凡。 梳的紋絲不亂的頭發(fā)上续徽,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音亲澡,去河邊找鬼钦扭。 笑死,一個胖子當(dāng)著我的面吹牛谷扣,可吹牛的內(nèi)容都是我干的土全。 我是一名探鬼主播捎琐,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼会涎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瑞凑?” 一聲冷哼從身側(cè)響起末秃,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎籽御,沒想到半個月后练慕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惰匙,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年铃将,在試婚紗的時候發(fā)現(xiàn)自己被綠了项鬼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡劲阎,死狀恐怖绘盟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悯仙,我是刑警寧澤龄毡,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站锡垄,受9級特大地震影響沦零,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜货岭,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一路操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧千贯,春花似錦寻拂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至己沛,卻和暖如春慌核,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背申尼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工垮卓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人师幕。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓粟按,卻偏偏與公主長得像,于是被迫代替她去往敵國和親霹粥。 傳聞我的和親對象是個殘疾皇子灭将,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容