文本表示與匹配
文本匹配主要研究計算兩段文本的相似度問題。相似度問題包含兩層:一是兩段文本如何表示可使得計算機方便處理,這需要研究不同的表示方法效果的區別:二是如何定義相似度來作為優化目標,如語義匹配相似度、點擊關系相似度、用戶行為相似度等,這和業務場景關系很緊密。
在解決這兩個問題過程中會遇到很多難題,其中一個難題就是設計模型如何充分考慮語義。因為中文的多義詞、同義詞非常普遍,它們在不同的語境中表達的含義是不一樣的。比如蘋果多少錢一臺?蘋果多少錢一斤?對於前者,根據“一臺”能看出它是指蘋果品牌的電子設備,後者則是指水果。當然,還有很多語言現象更加困難,比如語氣、語境、口語的不同表述等。
文本的表示和匹配是本節的主線,如何做到語義層面匹配就成為本節的主旨。
受到整體技術的演進影響,文本的匹配技術同樣有一個順應時代的技術歷程,如圖所示。
1. 向量空間
1970年左右提出的向量空間模型,就是把文檔表示詞表維度的向量通過TF-IDF計算出詞的權重,比如一種標準詞表包含詞ID、詞和IDF,另一種是停用詞表,如圖3所示。
對文本“麗江的酒店價格”分詞去除停用詞後,得到麗江、酒店、價格,詞出現次數是1,查表IDF得到這句文本的表示:[0, 1.5, 2.1, 0, 0, …, 0, 4.1]。其中權重使用的是TF×IDF,TF是Term在文本裏的頻次,IDF是逆文檔頻次,兩者定義有很多形式,如圖4所示。這裏使用第二種定義。
圖4 TF和IDF的常用定義
向量空間模型用高維稀疏向量來表示文檔,簡單明了。對應維度使用TF-IDF計算,從信息論角度包含了詞和文檔的點互信息熵,以及文檔的信息編碼長度。文檔有了向量表示,那麽如何計算相似度?度量的公式有Jaccard、Cosine、Euclidean distance、BM25等,其中BM25是衡量文檔匹配相似度非常經典的方法,公式如下:
向量空間模型雖然不能包含同義詞、多義詞的信息,且維度隨著詞典增大變得很大,但因為它簡單明了,效果不錯,目前仍然是各檢索系統必備的特征。
2. 矩陣分解
向量空間模型的高維度對語義信息刻畫不好,文檔集合會表示成高維稀疏大矩陣。1990年左右,有人研究通過矩陣分解的方法,把高維稀疏矩陣分解成兩個狹長小矩陣,而這兩個低維矩陣包含了語義信息,這個過程即潛在語義分析。
假設有N篇文檔,共有V個詞,用TF-IDF的向量空間表示一個N×V的稀疏矩陣X,詞和文檔的語義分析就在這個共現矩陣上操作。這個共現矩陣通過奇異值分解, 能變成三個矩陣,狹長矩陣U的維度是N×K,V的維度是K×V,中間是對角陣K×K維,如圖5所示。
經過分解後,每個文檔由K維向量表示,(K<<V),代表了潛在語義信息,可以看成是文檔需要表達的語義空間表示。V矩陣代表詞在潛空間上的分布都是通過共現矩陣分解得到的。
潛在語義分析能對文檔或者詞做低維度語義表示,在做匹配時其性能較高(比如文檔有效詞數大於K),它包含語義信息,對於語義相同的一些文檔較準確。但是,潛在語義分析對多義詞語義的建模不好,並且K維語義向量完全基於數學分解得到,物理含義不明確。因此,在2000年左右,為解決上述問題,主題模型出現了。
3. 主題模型
2000~2015年,以概率圖模型為基礎的主題模型掀起了一股熱潮,那麽究竟這種模型有什麽吸引大家的優勢呢?
pLSA(Probabilistic Latent Semantic Analysis)
pLSA在潛在語義分析之上引入了主題概念。它是一種語義含義,對文檔的主題建模不再是矩陣分解,而是概率分布(比如多項式分布),這樣就能解決多義詞的分布問題,並且主題是有明確含義的。但這種分析的基礎仍然是文檔和詞的共現頻率,分析的目標是建立詞/文檔與這些潛在主題的關系,而這種潛在主題進而成為語義關聯的一種橋梁。這種轉變過渡可如圖6所示。
圖6 從詞文檔共現到引入潛在主題的概率模型
假設每篇文章都由若幹主題構成,每個主題的概率是p(z|d),在給定主題的條件下,每個詞都以一定的概率p(w|z)產生。這樣,文檔和詞的共現可以用一種產生式的方式來描述:
其概率圖模型如圖7所示:
可以通過EM算法把p(z|d)和p(w|z)作為參數來學習,具體算法參考Thomas Hofmann的pLSA論文。需要學習的p(z|d)參數數目是主題數和文檔數乘的關系,p(w|z)是詞表數乘主題數的關系,參數空間很大,容易過擬合。因而我們引入多項式分布的共軛分布來做貝葉斯建模,即LDA使用的方法。
LDA(Latent Dirichlet Allocation)
如果說pLSA是頻度學派代表,那LDA就是貝葉斯學派代表。LDA通過引入Dirichlet分布作為多項式共軛先驗,在數學上完整解釋了一個文檔生成過程,其概率圖模型如圖8所示。
和pLSA概率圖模型不太一樣,LDA概率圖模型引入了兩個隨機變量α和β,它們就是控制參數分布的分布,即文檔-主題符合多項式分布。這個多項式分布的產生受Dirichlet先驗分布控制,可以使用變分期望最大化(Variational EM)和吉布斯采樣(Gibbs Sampling)來推導參數,這裏不展開敘述。
總體來講,主題模型引入了“Topic”這個有物理含義的概念,並且模型通過共現信息能學到同義、多義、語義相關等信息。得到的主題概率分布作為表示,變得更加合理有意義。有了文檔的表示,在匹配時,我們不僅可以使用之前的度量方式,還可以引入KL等度量分布的公式,這在文本匹配領域應用很多。當然,主題模型會存在一些問題,比如對短文本推斷效果不好、訓練參數多速度慢、引入隨機過程建模避免主題數目人工設定不合理問題等。隨著研究進一步發展,這些問題基本都有較好解決,比如針對訓練速度慢的問題,從LDA到SparseLDA、AliasLDA, 再到LightLDA、WarpLDA等,采樣速度從O(K)降低O(1)到。
4. 深度學習
2013年,Tomas Mikolov發表了Word2Vec相關的論文,提出的兩個模型CBOW(Continuous Bag of Words,連續詞袋)和Skip-Gram能極快地訓練出詞嵌入,並且能對詞向量加減運算,這得到了廣泛關註。在這項工作之前,神經網絡模型經歷了很長的演進歷程。這裏先介紹2003年Yoshua Bengio使用神經網絡做語言模型的工作,Word2Vec也是眾多改進之一。
神經網絡語言模型
在2003年,Yoshua Bengio使用神經網絡來訓練語言模型比N-Gram的效果好很多,網絡結構如圖9所示。輸入是N-Gram的詞,預測下一個詞。前n個詞通過詞向量矩陣Matrix C(維度:n*emb_size)查出該詞的稠密向量C(w(t-1)),C(w(t-2));再分別連接到隱含層(Hidden Layer)做非線性變換;再和輸出層連接做Softmax預測下一個詞的概率;訓練時根據最外層誤差反向傳播以調節網絡權重。可以看出,該模型的訓練復雜度為O(n×emb_size + n×emb_size×hidden_size + hidden_size×output_size),其中n為5~10,emb_size為64~1024,hidden_size為64~1023,output_size是詞表大小,比如為10^7。因為Softmax在概率歸一化時,需要所有詞的值,所以復雜度主要體現在最後一層。從此以後,提出了很多優化算法,比如Hierarchical Softmax、噪聲對比估計(Noise Contrastive Estimation)等。
Word2Vec
Word2Vec的網絡結構有CBOW和Skip-Gram兩種,如圖10所示。相比NNLM,Word2Vec減少了隱含層,只有投影層。輸出層是樹狀的Softmax,對每個詞做哈夫曼編碼,預測詞時只需要對路徑上的0、1編碼做預測,從而復雜度從O(V)降低到O(log(V))。
以CBOW為例,算法流程如下:
(1) 上下文詞(窗口大小是Win)的詞向量對應維相加映射到投影層。
(2) 投影層經Sigmoid變換後預測當前詞的編碼路徑(哈夫曼樹)。
(3) 使用交叉熵損失函數(Cross Entropy Loss)反向傳播,更新Embedding層參數和中間層參數。
(4) 訓練使用反向傳播機制,優化方法使用SGD。
圖10 Word2Vec模型示意圖
從該算法流程可以看出,最外層的預測復雜度大幅降低,隱含層也去掉,這使得計算速度極大提高。該算法可得到詞的Dense 的Word Embedding,這是一個非常好的表示,可以用來計算文本的匹配度。但由於該模型的學習目標是預測詞發生概率,即語言模型,所以從海量語料中學習到的是詞的通用語義信息,無法直接應用於定制業務的匹配場景。能否根據業務場景對語義表示和匹配同時建模,以提升匹配效果呢?DSSM系列工作就充分考慮了表示和匹配。
DSSM系列
這類方法可以把表示和學習融合起來建模,比較有代表性的是微軟的相關工作。下面將介紹DSSM系列內容。
(1) DSSM模型框架
DSSM網絡結構如圖11所示:
使用搜索的點擊數據訓練語義模型,輸入查詢Query(Q)和展現點擊的Doc(D)列表,先對Q和D做語義表示,再通過Q-DK的Cosine計算相似度,通過Softmax來區分點擊與否。其中,語義表示先使用詞散列對詞表做降維(比如英文字母的Ngram),經過幾層全連接和非線性變化後得到128維的Q和D的表示。從實驗結論可知,NDCG指標提升還是很明顯的,如圖12所示。
圖12 DSSM和其他模型在Bing搜索數據上效果對比
(2) CLSM
在DSSM基礎上,CLSM增加了1維卷積和池化操作來獲取句子全局信息,如圖13所示。通過引入卷積操作,可以充分考慮窗口內上下文的影響,從而保證詞在不同語境下的個性化語義。
圖13 CLSM網絡結構圖
對應效果如圖14所示:
圖14 CLSM和其他模型在Bing搜索數據上效果對比
(3) LSTM-DSSM
LSTM-DSSM使用LSTM作為Q和D的表示,其他框架和DSSM一致,其網絡結構圖如圖15所示。由於LSTM具備語義記憶功能且蘊含了語序信息,因此更適合作為句子的表示。當然也可以使用雙向LSTM以及註意力模型(Attention Model)。
圖15 LSTM-DSSM網絡結構圖
美團的深度學習文本匹配算法
文本的語義匹配作為自然語言處理經典的問題,可以用在搜索、推薦、廣告等檢索系統的召回、排序中,還可以用在文本的去重、歸一、聚類、抽取等場景。語義匹配的常用技術和最新進展前文已經介紹了。
在美團這樣典型的O2O應用場景下,結果的呈現除了和用戶表達的語言層語義強相關之外,還和用戶意圖、用戶狀態強相關。用戶意圖即用戶是來幹什麽的?比如用戶在百度上搜索“關內關外”,其意圖可能是想知道關內和關外代表的地理區域範圍,“關內”和“關外”被作為兩個詞進行檢索。而在美團上搜索“關內關外”,用戶想找的可能是“關內關外”這家飯店,“關內關外”被作為一個詞來對待。再說用戶狀態,一個在北京的用戶和一個在武漢的用戶,在百度或淘寶上搜索任何一個詞條,他們得到的結果不會差太多。但是在美團這樣與地理位置強相關的應用下就會完全不一樣。比如在武漢搜“黃鶴樓”,用戶找的可能是景點門票,而在北京搜索“黃鶴樓”,用戶找的很可能是一家飯店。
如何結合語言層信息和用戶意圖、用戶狀態來做語義匹配呢?
在短文本外引入部分O2O業務場景相關特征,將其融入到設計的深度學習語義匹配框架中,通過點擊/下單數據來指引語義匹配模型的優化方向,最終把訓練出的點擊相關性模型應用到搜索相關業務中。
針對美團場景設計的點擊相似度框架ClickNet,是比較輕量級的模型,兼顧了效果和性能兩方面,能很好推廣到線上應用,如圖16所示。
圖16 ClickNet模型
-
表示層。Query和商家名分別用語義和業務特征表示,其中語義特征是核心,通過DNN/CNN/RNN/LSTM/GRU方法得到短文本的整體向量表示。另外會引入業務相關特征,比如用戶或商家的相關信息、用戶和商家距離、商家評價等。
-
學習層。通過多層全連接和非線性變化後,預測匹配得分,根據得分和標簽來調整網絡,以學習出Query和商家名的點擊匹配關系。
如果ClickNet算法框架上要訓練效果很好的語義模型,還需要根據場景做模型調優。首先,我們從訓練語料做很多優化,比如考慮樣本不均衡、樣本重要度等問題。其次,在模型參數調優時考慮不同的優化算法、網絡大小層次、超參數的調整等問題。
經過模型訓練優化,該語義匹配模型已經在美團平臺搜索、廣告、酒店、旅遊等召回和排序系統中上線,使訪購率/收入/點擊率等指標有很好的提升。
總結一下,深度學習應用在語義匹配上,需要針對業務場景設計合適的算法框架。此外,深度學習算法雖然減少了特征工程工作,但模型調優的難度會增加。因此可以將框架設計、業務語料處理、模型參數調優三方面綜合起來考慮,實現一個效果和性能兼優的模型。
基於深度學習的排序模型
排序模型簡介
在搜索、廣告、推薦、問答等系統中,由於需要在召回的大量候選集合中選擇出有限的幾個用於展示,因此排序是很重要的一環。如何設計這個排序規則使得最終業務效果更好呢?這就需要復雜的排序模型。比如美團搜索系統中的排序會考慮用戶歷史行為、本次查詢Query、商家信息等多維度信息,抽取設計出各種特征,通過海量數據的訓練得到排序模型。這裏只簡要回顧排序模型類型和演進,重點介紹深度學習用在排序模型中的情況。
排序模型主要分類三類:Pointwise、Pairwise、Listwise,如圖17所示。Pointwise對單樣本做分類或者回歸,即預測<query, doc="">的得分作為排序準則,比較有代表性的模型有邏輯回歸、XGBoost。Pairwise會考慮兩兩樣本之間偏序關系,轉化成單分類問題,比如<query, doc1="">比<query, doc2="">高,那這個Pair預測正,反之則負,典型的模型有RankSVM、LambdaMART。第三類就是Listwise模型,排序整體作為優化目標,通過預測分布和真實排序分布的差距來優化模型,典型的模型如ListNet。
圖17 排序模型分類
深度學習排序模型的演進
在排序模型的發展中,神經網絡很早就被用來做排序模型,比如2005年微軟研究院提出的RankNet使用神經網絡做Pairwise學習;2012年谷歌介紹了用深度學習做CTR的方法;與此同時,百度開始在鳳巢中用深度學習做CTR,於2013年上線。隨著深度學習的普及,各大公司和研究機構都在嘗試把深度學習應用在排序中,比如谷歌的Wide & Deep、YouTube的DNN推薦模型等,前面介紹的DSSM也可用來排序。下面將對RankNet、Wide & Deep、YouTube的排序模型作簡單介紹。
RankNet
RankNet是Pairwise的模型,同樣轉化為Pointwise來處理。比如一次查詢裏,Di和Dj有偏序關系,前者比後者更相關,那把兩者的特征作為神經網絡的輸入,經過一層非線性變化後,接入Loss來學習目標。如果Di比Dj更相關,那麽預測的概率為下式,其中Si和Sj是對應Doc的得分。
在計算得分時使用神經網絡,如圖18所示,每樣本的輸入特征作為第一層,經過非線性變換後得到打分,計算得到Pair的得分後進行反向傳播更新參數,這裏可以使用Mini-Batch。由於RankNet需要預測的概率公式具有傳遞性,即Di和Dj的偏序概率可以由Di和Dk以及Dk和Dj得到,因此RankNet把計算復雜度從O(n²)變成了O(n),具體介紹可參考文獻。
圖18 RankNet示意圖
當然,後續研究發現,RankNet以減少錯誤Pair為優化目標,對NDCG等指標(關心相關文檔所在位置)衡量的效果不是太好,於是後面出現了改進模型,如LambdaRank。RankNet是典型的神經網絡排序模型,但當時工業界用得多的還是簡單的線性模型,如邏輯回歸,線性模型通過大量的人工設計特征來提高效果,模型解釋性好性能也高。當人工設計特征到一定程度就遇到了瓶頸,而深度學習能通過原始的特征學習出復雜的關系,很大程度減輕了特征工程的工作。並且GPU、FPGA等高性能輔助處理器變得普及,從而促進了深度神經網絡做排序模型的廣泛研究。
Wide&Deep
谷歌發表過一篇論文“Wide & Deep Learning”,其觀點可以用在推薦裏,比如谷歌的Apps推薦利用此觀點取得很好的效果,並把模型發布在TensorFlow中。Wide & Deep整體模型結構分為Wide和Deep兩部分,這兩部分在最外層合並一起來學習模型,如圖19所示。輸入都是稀疏特征,但特征分為兩種:一種適合做Deep的深度網絡變化,適合時效性或者記憶性的特征,比如統計特征或者展示位置等;另一種可以直接連在最外層,適合有推廣力但需要深度組合抽樣的特征,比如品類、類型等。在模型優化時兩部分做聯合優化,Wide部分使用FTRL,而Deep使用Adagrad算法。這樣,Wide和Deep對不同類型特征區分開來,充分發揮各自作用,解釋性比較好。
這種思路其實可以做些擴展。比如Wide連接不是在最外層,而是在某一層,Deep的某些層也可以連接到最外層,這樣能充分利用不同層抽象的Dense信息。與Wide & Deep的網絡連接方式類似,如2003年NNLM和2010年RNNLM模型裏的直接連接(Direct Connection),其淺層和深層的結合能很好地加速收斂,深度學習的Highway方式也是類似的。目前Wide & Deep應用較多,比如在阿裏巴巴就有比較好的應用。
YouTube DNN排序模型
YouTube用來預測用戶觀看視頻時長,轉化為加權的邏輯回歸問題。DNN排序模型和前面的工作類似,其網絡結構是標準的前饋神經網絡,如圖20所示。DNN排序模型的特點還是在輸入特征上。雖然深度學習模型對特征工程要求很低,但很多數據需要經過簡單處理後才可加入模型。圖20中的特征分為很多域,比如語言方面、視頻方面、用戶歷史看過的視頻ID,還有之前觀看時長的統計量和歸一化的值。離散值經過Embedding的處理後變成連續向量,再級聯起來經過多層非線性變化後來預測最終的標簽。
圖20 YouTube的DNN排序模型結構
從上面介紹的深度學習相關排序模型可以看出,排序模型所需要的數據類型多種多樣,數據的含義也各有不同,不同於圖像、語音領域單一的輸入形式。因此在做排序模型中,輸入特征的選取和表示方式是很重要的,比如連續特征、離散特征處理、用戶歷史、文檔特征的區分等。在美團場景中,設計排序模型需考慮業務特點,對輸入特征的表示做很多嘗試。
美團的深度學習排序模型嘗試
在語義匹配模型中介紹了ClickNet框架,其實該框架同時也可用於排序,與語義匹配的區別主要在表示層,如圖21所示。如果ClickNet用作搜索的CTR模型,那表示層的Query和Title的語義特征只是一部分,還有用戶查詢、用戶行為、商家信息以及交叉組合特征都可以作為業務特征,並按特征的類型分不同的域。進一步講,如果場景不包含語義匹配,模型的輸入可以只有業務特征。下面簡單講解在美團用ClickNet做排序模型的嘗試。
圖21 ClickNet模型框架
ClickNet-v1
ClickNet設計的初衷是它作為文本的匹配模型,並作為一維語義特征加入到業務的Rank模型中以提升效果。但根據上線之後的數據分析,我們發現以語義特征表示為主、輔以部分業務特征的ClickNet在排序系統中有更好的表現。我們針對排序模型做了如下改進。
-
(1) 業務特征選取。從業務方Rank已有的人工特征中,選取O2O有代表性的且沒經過高級處理過的特征,比如用戶位置、商家位置、用戶歷史信息、商家評價星級、業務的季節性等。
-
(2) 特征離散化。選取的業務特征做離散化處理,比如按特征區間離散化等。
-
(3) 樣本處理。針對業務需要對正負例采樣,對點擊、下單、付費做不同的加權操作。
-
(4) 信息的融合。通過引入Gate來控制語義特征和各業務特征的融合,而不僅是求和或者級聯,通過樣本學習出Gate的參數。
針對業務Rank的目標優化ClickNet後,效果有很大改善,但模型還是偏重於語義特征。能否直接使用ClickNet做排序模型呢?答案是可以的。只需要加重業務特征、弱化或者去除語義表示特征就可以,這樣修改後的模型就是ClickNet-v2。
ClickNet-v2
ClickNet-v2以業務特征為主,替換業務Rank模型為目標,使用業務特征作為ClickNet的表示層輸入,通過對各特征離散化後傳入模型。和ClickNet-v1不一樣的是,ClickNet-v2業務特征種類繁多,需要做深度的分析和模型設計。
比如如何考慮位置偏好問題?因為展示位置會有前後順序,後面的展示不容易被用戶看到,從而天然點擊率會偏低。一種解決思路是可以把位置信息直接連接到最外層,不做特征組合處理。
再比如各業務特征通過多層非線性變化後,特征組合是否充分?一種解決思路是使用多項式非線性變換,這能很好組合多層的特征。
又比如模型組合的效果是否更好?一種解決思路是嘗試FM和ClickNet的級聯,或者各模型的Bagging。
此外還有模型的解釋性等很多和業務場景相關的情況需要考慮。
ClickNet是基於自研的深度學習框架Ginger實現的,收斂速度和效果都非常理想。我們來看看分類任務上的一些測試,如圖22所示。在Higgs數據上,基於Ginger的ClickNet比基於XGBoost的AUC提升34個千分點,使用TensorFlow實現的ClickNet比基於Ginger的AUC差3個千分點,且其速度慢於Ginger。如圖23所示,ClickNet相比線性模型,其準確率都有較好的提升。
總結
因為深度學習的擬合能力強、對特征工程要求低,它在文本領域已經有很多應用。本章以語義匹配和排序模型為例,分別介紹了業界進展和美團場景的應用。
第一部分介紹了語義匹配經歷的向量空間、潛在語義分析、主題模型、深度學習幾個階段,重點介紹了深度學習應用在語義匹配上的Embedding和DSSM系列模型,以及美團嘗試的ClickNet模型。第二部分介紹了深度學習在排序模型的一些進展和美團的一些嘗試。除了這兩部分內容外,深度學習幾乎滲透了文本的各方面,美團還有很多嘗試方式,比如情感分析、對話系統、摘要生成、關鍵詞生成等,限於篇幅不做介紹。
總之,認知智能還有很長的路需要走,語言文字是人類歷史的文化沈澱,涉及語義、邏輯、文化、情感等眾多復雜的問題。我們相信,深度學習在文本領域很快會有很大突破。
參考文獻: 美團機器學習實踐
轉載自微信公眾號: 小小挖掘機。
文本表示與匹配