
廣點(diǎn)通背后的大數(shù)據(jù)技術(shù)秘密_大規(guī)模主題模型建模及其在騰訊業(yè)務(wù)中的應(yīng)用(附PPT)二
我們看下一個例子,我們?nèi)绻选碧O果”輸入Peacock,我們打印出來幾行,第一行 ” 蘋果、收集、iphone、電腦…” 基本上講蘋果手機(jī),第二行”范冰冰、蘋果、電影、佟大為…”,這一行就是講范冰冰和佟大為拍的《蘋果》電影。第三行還是講手機(jī),第四行” 千克、大米、蘋果…”,這個是講水果。 所以系統(tǒng)對”蘋果” 給出了多義詞的解釋。我們改一下輸入,比如說輸入”蘋果大尺度”,我們會發(fā)現(xiàn)這時候排在第一位不再是蘋果手機(jī),排在第一位是范冰冰《蘋果》電影。從語義排序來說,傳統(tǒng)的排序處理方式很難發(fā)現(xiàn)這個語義是跟電影相關(guān)的。如果把輸入修改為”蘋果價格”,我們發(fā)現(xiàn),這個系統(tǒng)排在第一位就是蘋果手機(jī)。
最后一個例子”莫代爾”,Peacock 輸出的第一個語義是什么?”內(nèi)衣、飽暖、性感…”, 之前我并懂這個詞,這個詞我們在網(wǎng)絡(luò)上搜一下才發(fā)現(xiàn),莫代爾是一種內(nèi)衣的材料,一般男性都不太清楚,女性可能知道。所以對于一些長尾語義,系統(tǒng)也能挖掘出來。
總體上這是我們系統(tǒng)做的事,我們把系統(tǒng)命名為Peacock,孔雀,原因我們是覺得互聯(lián)網(wǎng)需要挖掘長尾的語義,主題模型能夠突破傳統(tǒng)處理的一些限制,挖掘數(shù)據(jù)里面深層的隱含語義。這個系統(tǒng)是由王益博士主導(dǎo)設(shè)計(jì)的,我們團(tuán)隊(duì)從2010年開始陸續(xù)折騰了四年,在這個方向有很大投入。
接下來我們講一下主題模型一些背景。在座的來自各行各業(yè),有可能有人不太清楚什么是隱含主題模型,我用幾張幻燈片介紹一下主題模型背后的含義。傳統(tǒng)的文本建模,譬如語言模型建模,基本假設(shè)是一個詞按照概率跳躍到下一個詞再跳躍到下一個詞,這種 NGram模型解決語音識別、機(jī)器翻譯的時候非常有效。另外一種文本建模的方式就是隱含主題模型,這個假設(shè)是怎么樣的?是說人寫文章的時候其實(shí)先設(shè)定主題,然后由主題生成詞的,而不是第一個詞生成下一個詞。舉一個例子,假設(shè)一個記者想寫一篇文章報道我們技術(shù)大會,文章可能有不同的幾個主題,我們把不同的主題理解為用詞的不同,講到計(jì)算機(jī)這個主題,可能會用到”內(nèi)存、硬盤、CPU、編程語言、C++ …”等這些詞,講到晚宴這個主題的時候,可能會用到 “晚宴、酒…” 這些詞。 在建模的時候,主體模型認(rèn)為,不同的主題是用詞的概率分布來描述的。
基于上面的假設(shè),我們實(shí)際上是使用一個三層結(jié)構(gòu)(幻燈片上的)在寫文章的:黑節(jié)點(diǎn)代表文檔,中間的不同顏色節(jié)點(diǎn)是不同的主題, 藍(lán)色節(jié)點(diǎn)代表詞。每個詞在文檔中的生成過程是:文檔先選定一個主題,然后由主題選定一個詞,這就是最傳統(tǒng)的主題模型。這里面問題是這樣的:我們做了這個模型假設(shè)以后,其實(shí)我們觀察到是文檔和詞,左邊和右邊的節(jié)點(diǎn)是我們觀察到的,中間這一層節(jié)點(diǎn)是隱含層我們觀察不到。文檔和主題之間的邊上有概率分布,主題和詞之間的邊上也有概率分布,每一條邊粗細(xì)的區(qū)分意思是說概率不一樣。
這個模型中我們假設(shè)每一條邊表示一個概率值,對應(yīng)一個模型參數(shù)。 這個是傳統(tǒng)頻率派的模型,叫 PLSA 模型,在貝葉斯統(tǒng)計(jì)理論框架下,任何一個參數(shù)都是隨機(jī)變量,每一個概率邊對應(yīng)的模型參數(shù)都有一個先驗(yàn)分布,引入這個先驗(yàn)后PLSA模型就被改造成了LDA 模型。在主題模型中,整個文檔生成過程就是走概率路徑選詞的過程。譬如,這個詞可以從紅色這條路徑生成,也可以從綠色、藍(lán)色這條路徑走。如果說文檔生成的時候,中間的隱含主題層能夠被觀察到,模型訓(xùn)練實(shí)際上就變得特別簡單:參數(shù)預(yù)估的時候統(tǒng)計(jì)數(shù)數(shù)就行了,把數(shù)數(shù)出來頻率計(jì)數(shù)放在每條邊上,最后做一個 Normalization 就變成一個參數(shù)概率預(yù)估值。
問題是中間的隱含層是觀察不到的,觀察不到的時候應(yīng)該怎么做?這個模型怎么訓(xùn)練?數(shù)學(xué)家給我們提供了一種漂亮的方式:分三步就可以把模型訓(xùn)練出來。
第一步,中間的隱含主題我們不知道,那首先每個詞的主題隨機(jī)給。譬如第一篇文章,我們讓第一個詞走紅色這條路徑生成出來,第二個詞也走紅色路徑,第三個詞走藍(lán)色路徑,每一個詞走哪個路徑先隨機(jī)給。隨機(jī)給完以后我們可以數(shù)數(shù)了。左邊的邊上數(shù)出文檔到主題的計(jì)數(shù),右邊的邊上數(shù)出主題到詞的計(jì)數(shù),有了這些計(jì)數(shù)就可以估計(jì)模型的兩類參數(shù):文檔到主題的概率值和主題到詞的概率值。于是每一條邊上都有模型參數(shù)的概率估計(jì)值。
第二步,就是重新的采樣每個詞對應(yīng)的主題,物理含義就是按照概率分布重新走路徑。對每一個詞我重新選一條路徑,第一個詞剛開始走紅色這條路徑,現(xiàn)在評估一下走紅色這個路徑好不好,這個詞有三條路徑走到這里,走紅色、綠色、藍(lán)色,我們把三條路徑概率都算出來,原來走紅色的路徑我重新采樣之后變成走藍(lán)色的這條路徑。整個模型訓(xùn)練里面就是對每一個詞重新走一下路徑,如果原來走紅色現(xiàn)在走藍(lán)色了,紅色路徑的頻率計(jì)數(shù)減1,藍(lán)色路徑變成加1。第三步,重復(fù)上面的采樣過程,這直到模型收斂。 只要不斷簡單迭代每一個詞,確定一下應(yīng)該走哪個路徑,然后整個語料大約迭代200遍,這個模型就能收斂,非常簡單。所以這個模型訓(xùn)練我們其實(shí)做什么事情?每一個詞我們只要隨機(jī)給完以后,我們對每一個詞的主題做重新的采樣,確定一下原來路徑好不好,不好我就調(diào)整一下,唯一做的事情就是在所對應(yīng)的路徑的邊的上做統(tǒng)計(jì)計(jì)數(shù),這個就是LDA 主題模型的直觀解釋。
就是這么一個簡單的模型要把它做大規(guī)模并不容易。去年之前沒有人把這個模型中間層做大,做到100萬的主題,我們實(shí)際的工業(yè)應(yīng)用中遇到了很多問題,我們團(tuán)隊(duì)遇到很多的問題,有三個問題我們列在這里。
第一個問題就是如何提升采樣的速度,也就是說你從一條路徑換到另外一條路徑的時候,換的速度太慢了,我們需要有一個更好的算法,把這條路徑切換到另一條路徑。傳統(tǒng)的算法里面,我要算每一條路徑的概率值,然后從中挑一個路徑,如果有100萬個主題就需要一百萬次計(jì)算,這個太慢了,工程上受不了。
第二個如何支持大數(shù)據(jù)大模型,我們互聯(lián)網(wǎng)都是以億、百億論,左邊文檔是億級,右邊詞匯是百萬級,中間我們希望是百萬級,兩年前學(xué)術(shù)界最多做到一萬,當(dāng)時我們團(tuán)隊(duì)開發(fā)Peacock 的時候,定位就是說我們做到一百萬主題。
第三個問題就是說如何提升模型的質(zhì)量,我們做工業(yè)的應(yīng)用一定把這個模型質(zhì)量提升,超參數(shù) α和β在模型質(zhì)量提升中有重要影響。
整個Peacock對這三個問題的解答。第一個對于速度,我們用了一個新的算法叫做SparseLDA,速度可以比標(biāo)準(zhǔn)算法快30倍;第二個怎么支持大數(shù)據(jù)大模塊,我們說矩陣分塊并行計(jì)算。我們支持中間的隱層達(dá)到100萬個; 第三個問題是模型質(zhì)量問題,每一個迭代中我們對α和β做一些優(yōu)化,后期我們做細(xì)節(jié)討論會對模型質(zhì)量有很大提升。
第一個問題我展開講一下,標(biāo)準(zhǔn)LDA采樣,如果有100萬個主題我要做100萬次計(jì)算,但是一個文檔通常是10 個詞左右,你去隨機(jī)化的時候每一個詞打一個顏色也就是你這個文檔有十幾個顏色,這是sparse的結(jié)構(gòu),利用這個 sparse 的結(jié)構(gòu)就可以大大提升計(jì)算速度,于是工程應(yīng)用上就不是問題了。 當(dāng)然現(xiàn)在 SparseLDA 已經(jīng)不是最快的算法了,今年研究界又一次把采樣算法提升了。
第二個問題是我們有十億篇文檔、百萬的詞匯,百萬的主題,我們怎么做模型的并行和數(shù)據(jù)的并行。我們把整個的數(shù)據(jù)用一個矩陣來表示,我們希望去做數(shù)據(jù)并行和模型并行,數(shù)據(jù)并行上在機(jī)器學(xué)習(xí)界早就解決了問題,簡單的做法是,整個數(shù)據(jù)并行的過程當(dāng)中,數(shù)據(jù)分塊以后每一個數(shù)據(jù)生成局部模型,然后歸并為一個全局模型,最后把全局模型回傳回來更新每一個局部模型。這里面有一個問題有可能我們模型太大了,無法存在單機(jī)的內(nèi)存里。所以我們要考慮對模型也并行化。 我們做一個更好的設(shè)計(jì)就是把模型和數(shù)據(jù)同時做,切片成 3*3 九宮格的格式,然后我們按照網(wǎng)格對角線的方式進(jìn)行并行,所以這時候我們發(fā)現(xiàn)至少三個worke可以并行工作不相互干擾,沒有任何加鎖的困擾。我們現(xiàn)在在這邊實(shí)際上畫了三個,在實(shí)際的過程當(dāng)中把數(shù)據(jù)和模型都切成N份。這條對角線上的三個可以并行工作,同樣第二條對角線和第三條對角線上的worker 也是可以并行工作的。所以這就大大提高了計(jì)算的并行性,提升了計(jì)算效率。
第三個問題我們講模型質(zhì)量的優(yōu)化,標(biāo)準(zhǔn)LDA訓(xùn)練過程中,對于α和β的數(shù)參是人工指定的,譬如α= 0.01。 這個代表什么含義?我們做模型訓(xùn)練的時候?qū)嶋H上對每條邊做頻率計(jì)數(shù),數(shù)完以后,如果說一條邊沒有計(jì)數(shù)那么這個概率就是零。不過在貝葉斯學(xué)派認(rèn)為這個不應(yīng)該是零,應(yīng)該填一個很小的值做一個概率平滑,我們可以填一個0.01很小的數(shù)值,這樣這個路徑還是走得通的,這個走得通代表模型具有探索能力。α和β在模型中就是起了這樣的作用。給一個α= 0.01使得模型有探索的能力,會探索這個路徑好不好,下次更新模型,這個路徑好就把老的丟掉了,未來可以重新不斷的走這個更好的路徑,好的路徑概率質(zhì)量越來越高,差的路徑概率越來越低,于是模型質(zhì)量有自我提升的能力。每個訓(xùn)練迭代中我們對α做一個優(yōu)化做一個最大似然估計(jì),然后可以觀察到整個模型質(zhì)量非常大的提升。
我最后一部分講一下Peacock在騰訊業(yè)務(wù)中的應(yīng)用,我們把隱含主題模型應(yīng)用到了騰訊的多個業(yè)務(wù)中。 騰訊有大量的用戶數(shù)據(jù),我們在廣點(diǎn)通做用戶行為的挖掘,從兩個角度看用戶行為數(shù)據(jù),第一個傳統(tǒng)的NLP的角度,文本處理的角度;第二個從推薦系統(tǒng)的角度。從文本的角度,我們把Peacock輸出放到每個文本里面,使得每個文本可以表示出更好的語義特征,用新的語義特征處理文本的相似度計(jì)算,效果會好得多。在騰訊里面我們有NLP的工具,我們開發(fā)分詞,我們同時要做分類,topic可以認(rèn)為是一種聚類,把 topic 加到模型中作為特征,提升整個語義處理的能力。在實(shí)際業(yè)務(wù)中的應(yīng)用,我們曾經(jīng)優(yōu)化過廣告相關(guān)性,把 topic 加到整個相關(guān)性計(jì)算中,搜索的相關(guān)性準(zhǔn)確度提升很顯著。
另外一點(diǎn)從推薦系統(tǒng)角度理解語義挖掘。騰訊業(yè)務(wù)中的一個更大的矩陣就是QQ到QQ群矩陣,預(yù)處理之后的規(guī)模大約是 7億X2億。我們用 Peacock 分解這個大矩陣。 可以發(fā)現(xiàn)分解出來的很多主題是有意義的。 在這里我們沒有做任何文本的處理,我們按照用戶加入QQ群的拓?fù)浣Y(jié)構(gòu)鏈接關(guān)系來做挖掘的。 我們看這3個挖掘到的主題的含義, 這是關(guān)于股票的,這是關(guān)于游戲的,這些是關(guān)于媽媽群的,語義都非常明確。
最后我們再談一些QQ群的應(yīng)用。我們把 Peacock分解出來的一些主題作為特征,加入分類器中進(jìn)行訓(xùn)練,顯著提升分類效果。 Peacock 在QQ群的應(yīng)用中,最后講一點(diǎn)是 QQ 群推薦。 最早QQ群推薦是基于朋友關(guān)系鏈的方式做的,即把你的朋友喜歡的 QQ 群推薦給你?,F(xiàn)在我們用推薦系統(tǒng)的思路,基于Peacock做 QQ-QQ群矩陣分解,然后利用分解后的矩陣做推薦計(jì)算。 線上實(shí)驗(yàn)效果非常好,原來點(diǎn)擊率本來不低可以到20%,我們優(yōu)化以后提高了接近3 倍。
最后簡單總結(jié)一下,LDA 是簡單、優(yōu)雅、實(shí)用的模型,我們實(shí)現(xiàn)Peacock 就是希望這個模型能夠應(yīng)對當(dāng)今互聯(lián)網(wǎng)的大數(shù)據(jù)。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓(xùn)練與驗(yàn)證損失驟升:機(jī)器學(xué)習(xí)訓(xùn)練中的異常診斷與解決方案 在機(jī)器學(xué)習(xí)模型訓(xùn)練過程中,“損失曲線” 是反映模型學(xué)習(xí)狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計(jì)基本概念成為業(yè)務(wù)決策的底層邏輯 統(tǒng)計(jì)基本概念是商業(yè)數(shù)據(jù)分析的 “基礎(chǔ)語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11