天天看點

Sequence to Backward and Forward Sequences:A Content-Introducing

這裡所講的bot是指chat bot,也是當下研究領域最火的應用之一。在實際的工程應用中使用的方法可以分為兩類,基于rule、template的和基于database query的,應用範圍比較窄,比如垂直領域的客服機器人,解決的問題通常都是一個閉域的問題;而真正的ai是應該可以解決開域問題的,無論問什麼樣的問題,都會得到一個滿意的答案,當然,現在的研究水準還難以達到這樣的境界。最近幾年随着深度學習技術的火熱,nlp領域中很多任務都得到了長足的進步,現在最流行的解決方案是seq2seq,尤其是在自然語言生成任務中得到了廣泛的應用。簡單bot的問題可以了解為給定一個query,生成一個reply,這樣的bot是single turn,研究意義大于應用意義。更多的實際問題都是一個multi turn問題,以客服bot為例,單輪對話很難解決了客戶的疑問,一般都是通過多輪對話來幫助使用者得到滿意的答複。關于多輪bot的文章,後面會慢慢涉及到,今天分享的paper是關于單輪、短文本的對話生成。

生成式的bot比起基于rule、template和database query的bot具有更加靈活的特點,不僅僅拘泥于現有的rule、template和database,而是可以生成更加多樣性的reply。但生成式的bot也有一個非常顯著的問題,就是經常生成一些非常“呵呵”的reply,比如“我不知道”,“我也是”等等沒有營養但絕對“安全”的話,導緻了這種bot沒有什麼實用價值。産生這個問題可能有兩個原因:一是在decoder部分以log機率最大為目标,而不是别的目标,是以容易生成一些沒有意義的人類語言,因為訓練語料中這樣無意義的reply會經常出現,用deep learning從data中抓feature的時候就會出現這樣的問題;二是query的資訊量太少,encoder捕捉的意思有限,導緻了生成“呵呵”的reply。

本文旨在提出一種叫做content introducing的方法來生成短文本reply,一共分為兩個step,如下圖:

Sequence to Backward and Forward Sequences:A Content-Introducing

step 1 給定query之後,預測一個keyword作為reply的topic,這個topic詞性是名詞,這裡的keyword并不能捕捉複雜的語義和文法,而隻是根據query的每個詞來預估出一個pmi(pointwise mutual information)最高的名詞作為keyword,兩個單詞之間的pmi由下式計算:

Sequence to Backward and Forward Sequences:A Content-Introducing

每個單詞與query之間的pmi由下式計算:

Sequence to Backward and Forward Sequences:A Content-Introducing

雖然數學上不太嚴謹,但後面的實驗表明用這個來計算結果還是不錯的。

step 2 本文的模型叫做sequence to backward and forward sequences,首先進行backward step,給定一個query,用encoder表示出來得到一個context,decoder的部分首先給定keyword作為第一個詞,然後進行decoding,生成的這部分相當于keyword詞前面的部分;接下來進行的是forward step,也是一個典型的seq2seq,用encoder将query表示成context,然後給定backward生成的話和keyword作為decoder的前半部分,繼續decoding生成後半部分。整個的流程這樣簡單描述下:

query + keyword => backward sequence

query + keyword + backward sequence(reverse) => forward sequence

reply = backward (reverse) sequence + keyword + forward sequence

傳統的seq2seq模型都是從第一個詞生成到最後一個詞,無法生成指定詞,而本文的模型可以生成指定詞,并且該詞可以出現在reply的任意位置。

資料集是從百度貼吧上爬下來的對話資料,規模有500k的query reply pairs,pmi統計是由100m的query reply paris。結果是與seq2seq進行比較,本文模型得到了更好的結果。下圖展示了本文的example:

Sequence to Backward and Forward Sequences:A Content-Introducing

本文用keyword來做topic的思路是一個很好的思路,會讓算法生成的reply更加有營養,這個在單輪的應用背景下可以取得不錯的結果。但是本文用topic的思路和處理方法太多簡單,如果考慮到多輪對話的問題,我想用上下文資訊來預測topic,而不是隻考慮該句query的資訊,而且不僅僅用一個單詞來做topic,可能還會是短語,也可能是語義層面上的topic,而不僅僅是從一個候選清單中選擇單詞來作為topic。文章的思路很有啟發性,我個人認為生成式的bot在閉域中應用是一個大趨勢,傳統的rule、template、database都會被替代,但真實應用場景中的bot需要将context做好處理,然後作為先驗知識,來生成reply。其實難點也就在context的處理上,包括user profile,dialogue history,user current state等等各種context資訊。

來源:paperweekly

<a href="https://mp.weixin.qq.com/s/qfxfquqy4fgjhtautiey1g" target="_blank">原文連結</a>

繼續閱讀