Peacock:大規模主題模型及其在騰訊業務中的應用
Peacock:大規模主題模型及其在騰訊業務中的應用
作者:趙學敏 王莉峰 王流斌 孫振龍 嚴浩 靳志輝 王益
摘要
如果用戶最近搜索了“紅酒木瓜湯”,那么應該展示什么樣的廣告呢?從字面上理解,可能應該返回酒水或者水果類廣告。可是你知道嗎?“紅酒木瓜湯”其 實是一個民間豐胸秘方。如果機器能理解這個隱含語義,就能展示豐胸或者美容廣告——這樣點擊率一定很高。在廣告、搜索和推薦中,最重要的問題之一就是理解 用戶興趣以及頁面、廣告、商品等的隱含語義。
讓機器能自動學習和理解人類語言中近百萬種語義,以及從海量用戶行為數據中歸納用戶興趣,是一個已經持續了20年的研究方向,稱為主題建模 (Latent Topic Modeling)。目前業界的各種系統中最為突出的是Google Rephil,在Google AdSense廣告系統中發揮了重要作用。
追隨Google的腳步,騰訊SNG效果廣告平臺部(廣點通)的同學們成功的研發了Peacock大規模主題模型機器學習系統,通過并行計算可以高 效地對10億x1億級別的大規模矩陣進行分解,從而從海量樣本數據中學習10萬到100萬量級的隱含語義。我們把Peacock系統應用到了騰訊業務中, 包括文本語義理解、QQ群的推薦、用戶商業興趣挖掘、相似用戶擴展、廣告點擊率轉化率預估等,均取得了不錯的效果。
一、為什么我們要開發大規模主題模型訓練系統Peacock?
1.1 短文本相關性
在自然語言處理和信息檢索中,我們常常會遇到如下問題:給定查詢詞,計算查詢詞和文檔之間的相關性。比如表1給出了2個具體例子,此時我們需要計算 短文本之間的相關性。常用的計算方法就是不考慮詞的相對順序,使用BOW(Bag-Of-Words)模型把文檔表示為詞向量,然后計算文本之間的相似 度。如果直接采用文檔中詞的TF-IDF構建文檔特征向量,通過計算查詢詞特征向量和文檔特征向量的余弦夾角,我們會發現Q1與D1、D2都相關,而Q2 與D1、D2都不相關。顯然,這與人對自然語言的理解并不相符:Q1和D2比較相關,都關于“蘋果”這種水果;而Q2和D1比較相關,都關于“蘋果”公 司。

之所以會出現這種差異,是因為上述文檔特征向量構建方法沒有“理解”文檔的具體語義信息,單純的將文檔中的詞表示為一個ID而已。通過主題模型,文 檔可以表示為一個隱含語義空間上的概率分布向量(主題向量),文檔主題向量之間的余弦夾角就可以一定程度上反映文檔間的語義相似度了。
1.2 推薦系統

圖1 用戶-物品矩陣
主題模型的另一個主要應用場景是推薦系統。不管是電商網站的商品推薦,還是各大視頻網站的視頻推薦等,都可以簡化為如下問題:給定用戶-物品矩陣(圖1,矩陣中用戶u和物品i對應的值表示u對i的偏好,根據用戶行為數據,矩陣會得到部分“初始”值),如何“填滿”矩陣中沒有值的部分。

在各種眼花繚亂的推薦算法中,直接利用用戶-物品矩陣進行推薦是最有效的方式(沒有長年的用戶、物品內容分析技術積累也一樣可以快速做出效果),而這其中的兩類主要算法都與主題模型有關系:
- 協同過濾[1]。以基于用戶的協同過濾為例,就是要向用戶推薦與之相似的用戶喜歡的物品,包含兩個主要步驟:計算用戶相似度和向用戶推薦與自己最相似的用戶喜歡的物品,難點在于計算用戶相似度。如果不引入外部數據,最簡單的計算用戶u和v相似度的方法可以直接利用用戶-物品矩陣的u行和v行, 比如計算它們的余弦夾角。然而,真實的互聯網數據中,用戶-物品矩陣通常都非常稀疏,直接計算不能得到準確的結果。此時,常見的做法是對用戶(或物品)進 行聚類或者將矩陣投影到更低維的隱空間(圖2、3),在隱空間計算用戶相似度可以更加準確。主題模型可以用來將用戶-物品矩陣投影到隱空間。
- 隱含語義模型 (Latent Factor Model, LFM)[2]。該類方法本質上和主題模型是一致的,直觀的 理解是將用戶-物品矩陣分解為用戶-隱含語義(主題)矩陣和隱含語義(主題)-物品矩陣(圖3),通過更低維度的上述兩個矩陣,來重構原始用戶-物品矩 陣,重構得到的矩陣將不再稀疏,可以直接用于推薦。具體例子可以參看“QQ群推薦”應用。 </ul>
- 自然語言處理的例子。圖4給出了Peacock在線推斷系統Demo的主要界面,手動輸入文檔以后,點擊“submit”就可以看到 Peacock對輸入文檔的理解。這個例子中,我們利用訓練好的Peacock模型,在線推斷給定的輸入文檔的主題分布P(topic|doc)。每一行 打印出一個語義主題,并給出主題的權重。具體的主題由一組相關的詞組成,每個詞都有權重。而第二部分 P(word|doc) 則給出了和該文檔相關的權重最高的詞。在Demo的例子中,我們可以看到 Peacock 對“紅酒木瓜湯”這個檢索串最重要的語義理解是“豐胸、產品、減肥、木瓜、效果”,非常符合人的語義理解。圖5、6、7演示了典型的多義詞“蘋果”在不同 語境下Peacock對其的不同理解,可以看到“蘋果”這個檢索串在 Peacock 中被處理成了如下三種語義:“蘋果公司及其產品”、“水果”、“范冰冰《蘋果》電影”。而“蘋果、梨子”主要語義被理解為“水果”,“蘋果大尺度”的主要 語義被理解為“范冰冰《蘋果》電影”。可以看到Peacock可以比較準確的理解不同文檔的具體含義,這將有助于我們完成一系列自然語言處理和信息檢索的 任務。
- 用戶-物品矩陣分解的例子。這個例子中,“用戶”(相當于“文檔”)為QQ,“物品”(相當于“詞”)為這部分用戶加入的QQ興趣群(在數據預處 理中,我們會將QQ群分為關系群、興趣群等,興趣群可以比較好的反映用戶的興趣)。取非常活躍的5億用戶和非常活躍的1億QQ興趣群,得到一個5億x1億 的矩陣,使用Peacock分解該矩陣后獲得Topic-Item矩陣(即主題-QQ群矩陣),圖8、9、10分別給出了該矩陣中的三個主題(只顯示權重 最高的主要QQ群)。為了方便理解,同時將QQ群的描述信息顯示在群ID之后。可以看到,Peacock學習得到的主題含義比較明確,一定程度上可以反映 出Peacock在處理用戶-物品矩陣上的有效性。 </ul>
- 模型有2個主題,主題1關于銀行(主要的詞為loan、bank、money等),主題2關于河流(主要的詞為river、stream、bank等)。
- 文檔1內容100%關于主題1,主題向量為<1.0, 0.0>,文檔中每一個詞的生成過程如下:以100%的概率選擇主題1,再從主題1中以一定的概率挑選詞。
- 文檔2內容50%關于主題1,50%關于主題2,主題向量為<0.5, 0.5>,文檔中每一個詞的生成過程如下:以均等的概率選擇主題1和2,再從選中的主題中以一定的概率挑選詞。
- 文檔3內容100%關于主題2,主題向量為<0.0, 1.0>,文檔中每一個詞的生成過程如下:以100%的概率選擇主題2,再從主題2中以一定的概率挑選詞。 </ul>
- Step1: 初始時,隨機的給訓練語料中的每一個詞w賦值一個主題z,并統計兩個頻率計數矩陣:Doc-Topic計數矩陣Ntd,描述每個文檔中的主題頻率分布;Word-Topic計數矩陣Nwt,表示每個主題下詞的頻率分布。如圖15所示,兩個矩陣分別對應于圖中的邊上的頻率計數。
- Step2: 遍歷訓練語料,按照概率重新采樣其中每一個詞w對應的主題z,同步更新Nwt和Ntd。
- Step3: 重復 step2,直到Nwt收斂。 </ul>
- 對當前文檔d中的當前詞w(圖15中黑體表示),詞w的“舊”主題z給出了d-z-w的一條路徑(圖15(1)虛線);
- 剔除詞w對應的“舊”主題z,更新在Nwt和Ntd中的計數(圖15(1)在舊路徑對應的兩條邊上做 “-1”操作);
- 計算d-z-w的每一條可能路徑的概率,d-z-w路徑的概率等于d-z和z-w兩部分路徑概率的乘積即P(z|d)P(w|z),P(z|d)和Ntd有關,P(w|z)和Nwt有關(圖15(1));
- 依據概率對d-z-w路徑進行采樣,得到詞w的“新”主題z(圖15(2)虛線);
- 增加詞w對應的“新”主題z,更新在Nwt和Ntd中的計數(圖15(2)在新路徑對應的兩條邊上做“+1”操作)。 </ul>
- 訓練語料數據塊中會保存文檔中的詞和對應的主題(W,T),以及文檔對應的主題直方圖Ntd;
- 訓練器內存中保存一份Nwt;
- 訓練器依次加載訓練語料數據塊,并對其中的所有詞W的主題T進行采樣,采樣的同時會更新Nwt、Ntd和文檔中詞W的主題T;
- 采樣完成一個數據塊后,訓練器將更新后的(W,T)和Ntd序列化到磁盤上,供下一個迭代加載采樣;
- 所有迭代結束,Nwt收斂,訓練器根據Nwt計算出模型并輸出。 </ul>
- “更多的數據”,我們希望訓練器能處理海量的訓練數據,因為更多的數據蘊含著更加豐富的隱含語義,同時模型也更加準確,效果更好。上一小節提到單機版LDA訓練器顯然是處理不了海量數據的,使用它訓練模型,我們估計要等到天荒地老了。
- “更大的模型”,我們希望訓練器能歸納出更多更具體更長尾的隱含語義,比如一百萬主題。拋開標準LDA算法本身的問題,更大的模型意味著矩陣Nwt規模更大。Nwt的大小為VxK,V表示詞表大小,K表示主題個數。取V=1,000,000且K=1,000,000,Nwt需要消耗3000G以上內存(假設int型密集存儲,因為模型隨機初始化并不稀疏),顯然單機內存是無法滿足需求的,必須對模型進行切分。 </ul>
- 假設我們有三個可執行單元,每個都啟動一個采樣任務,每個任務中都有一個完整的“本地”模型LNwt;
- 任務并行的處理訓練語料數據塊(W,T)和Ntd,更新模型LNwt,同時序列化更新后的訓練語料數據塊(W,T)和Ntd到磁盤;
- 在迭代結束或任務處理訓練語料數據塊過程中,任務之間或同步或異步的融合模型。模型融合的方式可以類似MPI中的AllReduce,也可以借助全局的參數服務器GNwt。 </ul>
- MapReduce的一個Job進行AD-LDA算法的一個迭代;
- 訓練語料數據塊(W,T)和Ntd作為Job輸入,Mapper加載上個迭代生成的GNwt作為LNwt,對數據塊中的詞進行主題采樣;
- Reducer融合各個LNwt,生成下一個迭代需要加載的GNwt。 </ul>
- 多組“模型并行”任務之間采用“數據并行”的方式工作,“模型并行”任務組內部,依然保持圖19所示的并行采樣方式;
- 在迭代結束或任務處理訓練語料數據塊過程中,不同“模型并行”任務組之間或同步或異步的融合模型分片LNiwt。模型融合的方式可以類似MPI中的AllReduce,也可以借助全局的參數服務器GNiwt。 </ul>
- 數據傳輸和文檔采樣之間的流水線。
- 圖19所示的模型并行方式在每條對角線并行采樣結束后都需要同步,怎樣去掉這種同步?
- 怎樣的模型Nwt分片方式,能盡可能的保證采樣服務器之間的負載均衡?
- 我們是否需要每個迭代都重采樣所有詞的主題?
- 怎樣快速的計算對數似然度?
- 怎樣將模型的超參數αt和β優化融入Peacock系統?
- 除了標準的吉布斯采樣,是否有更加快速的采樣算法?
- 主題數K從100到1,000,000,系統的內部數據結構都保持不變么? </ul>
- [1] Greg Linden, Brent Smith, and Jeremy York. Amazon.com Recommendations: Item-to-Item Collaborative Filtering. IEEE Internet Computing, 2003.
- [2] Simon Funk. Netflix Update: Try This at Home. http://sifter.org/~simon/journal/20061211.html.
- [3] 分布式機器學習的故事. http://cxwangyi.github.io/2014/01/20/distributed-machine-learning/.
- [4] LinkedIn高級分析師王益: 大數據時代的理想主義和現實主義(圖靈訪談). http://www.ituring.com.cn/article/75445.
- [5] PLDA and PLDA+. https://code.google.com/p/plda/.
- [6] Arthur Asuncion, Padhraic Smyth, and MaxWelling. Asynchronous Distributed Learning of Topic Models. NIPS’2008.
- [7] Yahoo_LDA. https://github.com/shravanmn/Yahoo_LDA.
- [8] MALLET. http://mallet.cs.umass.edu/.
- [9] Mark Steyvers, and Tom Griffiths. Probabilistic topic models. In T. Landauer, D McNamara, S. Dennis, and W. Kintsch (eds), Latent Semantic Analysis: A Road to Meaning. Laurence Erlbaum, 2006.
- [10] D. Blei, A. Ng, and M. Jordan. Latent Dirichlet allocation. JMLR’2003.
- [11] Thomas L. Griffiths, and Mark Steyvers. Finding scientific topics. PNAS’2004.
- [12] Gregor Heinrich. Parameter estimation for text analysis. Technical Report, 2009.
- [13] Jeffrey Dean, Greg S. Corrado, Rajat Monga, Kai Chen, Matthieu Devin, Quoc V. Le, Mark Z. Mao, Marc’Aurelio Ranzato, Andrew Senior, Paul Tucker, Ke Yang, Andrew Y. Ng. Large Scale Distributed Deep Networks. NIPS’2012.
- [14] David Newman, Arthur Asuncion, Padhraic Smyth, and MaxWelling. Distributed Algorithms for Topic Models. JMLR’2009.
- [15] Yi Wang, Xuemin Zhao, Zhenlong Sun, Hao Yan, Lifeng Wang, Zhihui Jin, Liubin Wang, Yang Gao, Ching Law, and Jia Zeng. Peacock: Learning Long-Tail Topic Features for Industrial Applications. TIST’2015.
- [16] 火光搖曳. http://www.flickering.cn/. </ul> 本文鏈接: Peacock:大規模主題模型及其在騰訊業務中的應用

圖3 用戶-物品矩陣分解
實際上,從以上的討論中我們容易發現,當使用BOW模型處理文本,把文檔數據表示成文檔-詞(Doc-Word)矩陣的時候,其表示結構和用戶-物 品(User-Item)矩陣結構是完全一致的。因此這兩類數據可以使用同樣的算法進行處理。使用隱含主題模型處理文檔-詞矩陣的時候,可以理解為把詞聚 類為主題,并計算各個文檔和詞聚類之間的權重。類似地,處理用戶-物品矩陣的時候,可以理解為把物品聚類為主題,然后計算每個用戶和各個聚類之間的權重。 圖2是這個過程的一個形象描述,而這個過程如圖3所示,可以理解為把原始矩陣分解為兩個較小的矩陣:左下的Topic-Item矩陣描述了物品聚類,每行 一個主題(Topic)表示一個聚類;而右側的User-Topic矩陣每一行為主題權重向量,表示每個用戶和每個主題的緊密關系。
1.3 Peacock是什么?
從上面兩個小節我們已經看到,主題模型在互聯網產業中具有非常重要的應用。而Peacock系統著手開發時(2012年11月),一些開源以及學術界的主題模型訓練系統[5,6,7,8],要么只能處理小規模的訓練語料得到“小模型”,要么模型質量不佳。基于這種狀況,我們設計并開發了Peacock系統(更多有關Peacock系統的設計哲學和開發進程,可以參考王益的博客[3]和圖靈訪談文章[4])。 Peacock是一個大規模主題模型訓練系統,它既可以從數十億的網絡語料中學習出百萬級別的隱含語義(主題),也可以對數十億乘以幾億規模的矩陣進行 “分解”。我們的工作總結成論文“Peacock: Learning Long-Tail Topic Features for Industrial Applications”發表在ACM Transaction on Intelligent System and Technology (2015)[15]。

圖4 Peacock文檔語義推斷系統Demo

圖5 Peacock文檔語義推斷示例1:“蘋果”

圖6 Peacock文檔語義推斷示例2:“蘋果 梨子”

圖7 Peacock文檔語義推斷示例3:“蘋果大尺度”
下面我們分別給定一些具體的例子,讓大家對Peacock有一些直觀上的認識:

圖8 基于QQ-QQ群Peacock矩陣分解示例:炒股類主題

圖9 基于QQ-QQ群Peacock矩陣分解示例:塔防三國游戲類主題

圖10 基于QQ-QQ群Peacock矩陣分解示例:濟南母嬰類主題
通過一些具體的例子直觀的介紹了主題模型之后,接下來第二章將主要從算法的角度來回答“什么是主題模型”這個問題,第三章介紹對主題模型并行化的一些思考以及Peacock的具體做法,最后第四章介紹主題模型在騰訊業務中的具體應用。
二、什么是主題模型?
下面以文檔建模為例,簡單介紹一下主題模型。
2.1 主題模型的“三個過程”
主題模型一般包含了三個重要的過程:生成過程、訓練過程以及在線推斷。生成過程定義了模型的假設以及具體的物理含義,訓練過程定義了怎樣由訓練數據學習得出模型,在線推斷定義了怎樣應用模型。下面分別進行簡要介紹。
一般來說,主題模型是一種生成模型(生成模型可以直觀的理解為給定模型,可以生成訓練樣本)。給定模型,其生成過程如圖11:

圖11 主題模型的生成過程[9]
現實的情況是我們沒有模型,只有海量的互聯網文檔數據,此時我們希望有機器學習算法可以自動的從訓練文檔數據中歸納出主題模型(如圖12),即得到每個主題在詞表上的具體分布。通常來說,訓練過程還會得到一個副產品——每篇訓練文檔的主題向量。

圖12 主題模型的訓練過程[9]
有了主題模型,給定新的文檔,通過在線推斷,我們就可以得到文檔的主題向量(如圖13)。圖5、6、7給出了一些具體的例子。

圖13 主題模型的在線推斷
三個過程中,訓練過程是難點,后文將進行重點介紹。
2.2 LDA模型及其訓練算法
LDA(Latent Dirichlet Allocation)[10]作為一種重要的主題模型,自發表以來就引起了學術界和產業界的極大關注,相關論文層出不窮。LDA的訓練算法也多種多樣,下面以吉布斯采樣[11,12]為例,進行簡要介紹。

圖14 LDA訓練過程
跳過復雜的數學推導,基于吉布斯采樣的LDA訓練過程如圖14所示(每個詞用w表示,每個詞對應的主題用z表示,圖中節點z的不同顏色表示不同的主題):
Step2中重新采樣詞w對應主題z時,采樣公式為
其中 α</span>t</span></span></span></span></span></span></span></span>和 β</span></span></span></span></span>是超參數,分別表示對 N</span>td</span></span></span></span></span></span></span></span></span></span>和 N</span>wt</span></span></span></span></span></span></span></span></span></span>中的頻率計數進行概率平滑; V為詞表大小, L</span>d</span></span></span></span></span></span></span></span>表示文檔 d長度, N</span>wt</span></span></span></span></span></span></span></span></span></span>表示訓練語料中主題 t中詞 w的出現次數, N</span>t</span></span></span></span></span></span></span></span></span></span>表示訓練語料中主題 t的出現次數, N</span>td</span></span></span></span></span></span></span></span></span></span>表示文檔 d中主題 t的出現次數,上角標 ?</span></span></span></span></span>表示剔除當前采樣詞 w的影響(比如 N</span>?</span></span></span>td</span></span></span></span></span></span></span></span></span></span>表示減去當前采樣詞對應的主題后,文檔 d中主題 t的出現次數)。

圖15 文檔d1中詞w主題重新采樣
事實上,以上對文檔d中詞w的主題z進行重新采樣的公式有非常明確的物理意義,表示P(w|z)P(z|d),可以如圖15直觀的表示為一個“路徑選擇”的過程:

圖16 單機版LDA訓練過程
在訓練模型時,為了包含盡可能多的隱含語義(主題)同時保證效果,通常會使用海量的訓練語料。這些互聯網原始文檔語料經過切詞、停用詞過濾、文檔過 濾(長度)等預處理步驟后(通常會分塊進行存儲),就可以作為LDA訓練器的輸入了。圖14描述的LDA訓練過程,在更大范圍的訓練語料上來看,如圖16 所示:
基于吉布斯采樣的LDA在線推斷過程與訓練過程(圖14)類似:給定文檔,采樣更新其中每一個詞w對應的主題z(采樣公式同上,采樣過程中可以保持模型Nwt不變);重復上述過程,直到文檔主題直方圖Ntd收斂,使用αt對其進行簡單平滑即為文檔主題向量。
三、十億文檔、百萬詞匯、百萬主題?
從上一個小節的算法描述中,我們可以看到LDA 的訓練算法貌似并不復雜,主要的工作就是在維護兩個頻率計數矩陣Nwt和Ntd。然而在這個時代,我們要面對的是互聯網的海量數據,想象一下,如果在圖15中,左邊的文檔節點是十億、中間的主題個數是百萬、右邊不同的詞的個數也是百萬,我們將需要處理一張多大的圖!!!在實際應用中,我們希望使用更多的數據訓練更大的模型,這包含了兩重意思:
下面分別從數據并行和模型并行兩個方面來介紹怎樣解決上述兩個問題。“數據并行”和“模型并行“是Google大神Jeff Dean在深度學習訓練系統DistBelief[13]中新提出的兩個概念,盡管Peacock系統開發的時候,DistBelief還沒有真正對外公布。隨著深度學習的持續升溫,大家現在已經逐漸熟悉了這兩個形象的名詞,此處請允許我們借用一下這兩個概念。
3.1 數據并行——處理更多的數據
“數據并行”通俗的理解:通過多任務(每個任務都包含一份完整的模型)并行的處理數據訓練模型,任務之間的模型或同步或異步的進行融合。借用王益[3]的說法,“如果一個算法可以做數據并行,很可能就是可擴展的了”。幸運的是,David Newman團隊發現基于吉布斯采樣的LDA訓練算法可以“數據并行”,并給這個算法取了一個名字叫AD-LDA[14]。
注意,AD-LDA算法是吉布斯采樣的近似算法,因為嚴格的吉布斯采樣要求串行采樣,不能并行。直觀的理解就是語料中前一個詞w1采樣更新后的Nwt和Nt應該應用于后一個詞w2的采樣,而不是w1和w2的采樣都基于相同狀態的Nwt和Nt。AD-LDA算法會使得LDA的訓練收斂速度變慢,但在多幾輪迭代后,AD-LDA算法可以收斂到與串行吉布斯采樣相同的點。

圖17 AD-LDA算法
圖17給出了AD-LDA算法的示意圖:
AD-LDA算法的整個過程和MapReduce的執行過程非常一致,所以早期有非常多的團隊使用MapReduce來實現AD-LDA算法[5]:
因為MapReduce使用磁盤進行數據交換,同時整個訓練任務需要調度幾百個Jobs,所以基于MapReduce的AD-LDA實現是非常低效的。
3.2 模型并行——訓練更大的模型
上文提到,訓練大模型時,Nwt太大而無法整體放入任務的內存,直觀的解決方法如圖18所示,將Nwt沿詞的維度進行分片,每個采樣任務只加載一個模型分片N(i)wt。相應的,語料數據塊也需要做對應的詞維度切分,因為單個任務i只能采樣N(i)wt包含的詞w。細心的童鞋可能已經發現,圖18所示的模型并行方式在Ntd上采用了類似AD-LDA算法的近似,LNtd間的融合與LNwt間的融合類似,相應的算法也會減緩收斂(因為Nwt是所有訓練語料上的聚合結果,而Ntd只和具體文檔d有關,后者變化比前者更加“快速”, Ntd的并行近似采樣更加“危險”,很容易造成訓練不收斂)。

圖18 模型并行1
有沒有辦法不進行Ntd的并行近似采樣,同時保持上述的模型切片方式呢?Peacock系統設計了圖19所示的并行采樣方式:加載了不同N(i)wt切片的任務并行的沿對角線方向對訓練語料數據塊(W,T)進行采樣,一條對角線采樣完成后,依次進行下一條對角線。這樣在對同一個文檔的不同數據塊間的詞進行采樣時,仍然保持了“串行性”,應用了之前數據塊中的詞對Ntd的更新。圖19的模型并行采樣方式收斂性同AD-LDA是一致的。

圖19 模型并行2
3.3 大規模主題模型訓練系統Peacock
為了“利用更多的數據訓練更大的模型”,Peacock系統結合了上述的“數據并行”和“模型并行”(圖20):

圖20 Peacock中的數據并行和模型并行
同上一小節“模型并行”的分析類似,Peacock系統的采樣方式收斂性同AD-LDA是一致的。Max Welling團隊提出的Async-LDA[6]證明了異步融合LNiwt方式的收斂性。當Peacock采用異步方式融合LNiwt時,相當于同時結合了AD-LDA和Async-LDA算法,實踐證明收斂性是沒有問題的。
當然,Peacock系統在具體實現上除了上述的主要設計思想,還有很多的實用技巧,比如:
在我們的論文[15]中,部分的解答了上述問題,更詳細的Peacock解密請關注我們的博客“火光搖曳”[16]^_^。
四、Peacock在騰訊都有哪些應用?
4.1 文本語義分析
為了理解互聯網上海量、多樣化、非結構化的自然語言描述的文本,我們通常會從詞法、句法、語義等維度進行分析。受限于文本字面信息量小,存在歧義現 象,詞法和句法分析容易遭遇 Vocabulary Gap的問題,從海量文本數據中歸納 “知識”,從語義角度幫助理解文本,是一種非常重要的途徑。

圖21 文本分析示例
例如,對于輸入文本 “紅酒木瓜湯效果怎么樣?”,根據人的背景知識,很容易猜到這是一位女性用戶在詢問豐胸產品“紅酒木瓜靚湯”的效果。對于機器而言,通常會先進行詞法分 析,對原始文本做切詞、詞性標注、命名實體識別等,然后使用詞袋模型(Bag of Words,BOW)或提取關鍵詞來表示文本。不難發現,從字面抽取的信息,很容易理解成“紅酒”、“木瓜”等餐飲類語義,并非原始文本真實的意思。當 然,我們可以對關鍵詞做擴展,給出一些相似的詞條,但是,更好的是直接理解語義。一種常見的方法是文本分類,由于對標注語料庫的依賴,類別規模一般不會太 大,粒度較粗。還有一種方法就是文本聚類,挖掘語義主題標簽,更細粒度的理解文本意思,隱含語義分析技術逐漸發展成為常用的解決方案。能夠從十億級別的文 檔中歸納上百萬語義的Peacock系統更是在騰訊廣點通廣告系統扮演著核心角色。這些不同維度的文本分析模塊,包括詞袋、關鍵詞提取、關鍵詞擴展、文本 分類和Peacock等(圖21),整合在一起構成了我們理解語言的基礎文本分析平臺TextMiner(圖22)。

圖22 文本分析平臺TextMiner
4.1.1 文本分類器
文本分類是一個典型的有監督的機器學習任務,我們在做在線廣告系統過程中遇到的任務就有許多,包括網頁分類、廣告分類、QQ群分類、用戶興趣分類等。在使用相同的標注數據集和機器學習算法情況下,如何找到有區分力的特征無疑是最為關鍵的。
以QQ群分類為例,使用群名稱、群簡介、群公告等文本描述,類別體系是二級層次結構,共100+節點,標注訓練數據80,000。以BOW作為基礎 特征,新增Peacock主題特征后,一級行業準確率和召回率均有顯著提升,達5%左右,二級行業在召回率降低不到1%的情況下,準確率提升達 3.86%,達到了實際應用的需求。具體數據如圖23所示。

圖23 QQ群分類器效果
4.1.2 相關性計算
對給定的查詢語句,搜索引擎會將檢索到的網頁進行排序,把相關性好的排在前面。同樣的,在線廣告系統應該保證展示給用戶的廣告與頁面內容、用戶興趣 相關,以盡量不影響用戶體驗。這里都涉及到一個共同的任務:排序學習。此問題通常被形式化為有監督的學習問題,我們會將查詢、網頁、用戶、廣告表示成語義 特征向量,從而在語義空間里比較用戶意圖(查詢、網頁內容、用戶歷史行為)和網頁、廣告的相關性。
Peacock已成功應用在騰訊搜索廣告和情境廣告中,用于分析文本數據,歸納自然語言的語義,從而更好地匹配查詢詞和廣告,以及頁面內容和廣告。 在情境廣告 Learning To Rank 相關性計算框架下,增加Peacock語義特征后,NDCG@5提升達8.92%,線上A/B Test實驗 AdCTR 提升 8.82%。相關性評估效果圖24所示。

4.2 廣告CTR預估
廣告點擊率預估是預測給定場景下一個廣告被點擊的概率:P(click=1|ad,user,context),user表示當前用戶,context表示當前的環境信息,譬如當前所在的網頁。點擊率預估是在線廣告系統最核心的技術之一,它決定著廣告的排序和計價。
業界一般做法是將廣告展示、點擊日志作為訓練數據,抽取特征,通過機器學習方法擬合訓練數據得到預估模型,進而做在線點擊率預估。選取有效的特征對得到一個精準的點擊率預估模型起著至關重要的作用。
Peacock是我們理解廣告語義的關鍵技術,被引入到廣告點擊率預估模型中提升效果。具體的,與KDD Cup 2012 Track2的數據集產生過程類似,我們使用了騰訊情境廣告系統的廣告展示、點擊日志,使用L1范數正則的邏輯回歸訓練預估模型,通過AUC評估模型精 度。Baseline使用一些基礎特征,優化實驗分別在baseline特征集合的基礎上引入主題規模為1000、10,000和100,000的 Peacock Top-N語義特征。

圖25 pCTR增加不同粒度topic特征模型AUC的提升
從圖25可以看出,加入Peacock語義特征后AUC得到了顯著提升,尤其當增加topic規模為100,000的Peacock語義特征時,AUC提升最大,約為1.8%,線上A/B Test實驗AdCTR有8.82%的提升。
4.3 精準廣告定向
在騰訊效果廣告平臺廣點通系統里,Peacock被用于理解用戶行為數據,從中歸納用戶興趣,提供廣告精準定向技術。
騰訊豐富的產品線擁有中國互聯網公司最多的用戶,有著海量、豐富的用戶關系和行為數據,如QQ好友關系,QQ 群關系,電商瀏覽、交易,新聞瀏覽,查詢 Query,UGC 內容(如微博、說說等),移動App 安裝,微信公眾號文章閱讀和廣告點擊行為等。通過用戶行為數據的挖掘可以幫助我們更好的了解用戶,以推送精準的廣告。而這些數據都可以形式化為用戶-物品 矩陣,如用戶-用戶、QQ-QQ群,用戶-應用(Apps),用戶-搜索詞(或搜索Session),用戶-URLs等。我們利用Peacock系統對上 述用戶-物品做矩陣分解(如圖3),從不同數據來源,多視角理解用戶興趣,進而挖掘相似用戶,提供給廣告主豐富的定向策略,如用戶商業興趣定向、關鍵詞定 向和Look-Alike定向等。同時,獲取到的用戶特征,也可以作為廣告CTR、CVR預估系統的重要特征。
4.4 QQ群推薦

圖26 QQ群推薦
根據用戶已加QQ群社交關系數據,利用Peacock對QQ-QQ群做矩陣分解,我們發現語義相近的QQ群被比較好的歸到了相同的主題下,如圖8、 9、10所示。非常直觀的,我們將Peacock 模型應用在QQ群消息面板推薦產品中(如圖26),相比基于QQ好友關系鏈的推薦算法,推薦群的點擊率和轉化率(即點擊后是否加入了該群)均有2~3倍的 提升(圖27)。

圖27 QQ群推薦效果
后記
LDA是一個簡潔、優雅、實用的隱含主題模型,騰訊效果廣告平臺部(廣點通)的工程師們為了應對互聯網的大數據處理,開發了大規模隱含主題模型建模 系統,并在騰訊的多個業務數據中得到了應用。本文由趙學敏、王莉峰、王流斌執筆,靳志輝、孫振龍等修訂,相關工作由騰訊SNG效果廣告平臺部(廣點通)質 量研發中心Peacock團隊王益、趙學敏、孫振龍、嚴浩、王莉峰、靳志輝、王流斌為主完成,蘇州大學曾嘉教授、實習生高陽,香港科技大學楊強教授等持續 大力支持,是多人合作的結果。