肖仰华:基于知识图谱的用户理解
http://www.sohu.com/a/197188329_99934777
今天,很高興有這個機會來這里與大家交流。我想大家可能也已經體會到,我們目前的很多方法和手段越來越接近一個所謂的“天花板”。現有的方法,包括機器學習和深度學習的方法,某種程度上都是在吃大數據的紅利,機器學習的效果,模型的效果本質上是由大數據來喂養,我們灌進去的數據越多,模型的效果就越好,尤其是深度學習,隨著它的層次結構越來越深以后,它對樣本數據的規模和質量的要求也會更高,那么當我們把大數據的紅利吃完之后,我們該怎么辦呢?
事實上,學術界和工業界在這里年越來越多的意識到這個問題的嚴重性,就是當我們把大數據紅利吃完之后,我們的模型效果應該如何進一步的提升?
對于這個問題,從我這個研究方向給出的答案是什么呢?就是知識。知識的重要性將會越來越突出,我相信很多模型,推薦模型,機器學習算法都將會從數據驅動走向知識引導,越來越多的模型和算法將從基于行為的模型走向基于語義的模型。
今天,我會更多的談論如何擺脫行為數據的影響來做用戶畫像和推薦。因為很多場景下是沒有行為數據的,在一些極端的情況下,根本沒有用戶信息,那么這個時候我們怎么推薦?再比如說在互聯網搜索用戶畫像,高頻用戶和VIP用戶都可以解決的很好,那是因為它數據量足夠,但是關鍵的問題是,很多長尾用戶壓根沒有什么數據,那這個時候我們的模型怎么辦?這時候我們就要借鑒語義和背景知識來給我們力量。這也是為什么我想跟大家分享利用知識圖譜來理解用戶,給用戶畫像,來解決推薦的問題的原因。
為什么要做用戶畫像?因為企業要了解他們的用戶,像三星這么大的一個企業,有著寬廣的產品線,有著來自全世界的用戶,企業希望產品服務是個性化的,那么這個個性化的前提就是用戶畫像。
在整個互聯網時代其實催生了很多基于用戶畫像的應用。比如搜索,百度搜索是通用搜索,因不同的人而展現不同的結果。再比如推薦,不同的人看到不同的推薦結果。廣告投放,社交網絡分析,甚至在企業內部找專家等等,都需要去理解用戶,那么就需要一個非常有效的用戶畫像。
那么在各種各樣的畫像當中,最流行的一種方法是基于標簽的。在很多實際應用中,大家都在廣泛的應用這一類基于標簽的畫像方法。基于畫像的標簽方法其實很簡單,就是給用戶打一組標簽,每個標簽給一個權重,權重代表了用戶在這個方面興趣的強烈程度,如圖我們給出了一個豆瓣用戶的標簽云,也給出了一個微博用戶的標簽云。不同平臺的語言風格,語言體系是不完全一樣的,豆瓣的語言傾向于書面化,而微博的語言傾向于碎片化,口語化。
時至今日,我們已經有很多方法來幫助解決畫像和推薦的問題,那為什么今天還要來談論這個話題呢?是因為這些方法里面還存在一些問題,問題集中在兩個方面。
第一個方面就是用戶畫像某種程度上還是不完整的。 導致這個問題可能有兩個原因,第一個原因就是任何畫像的來源數據都是有一定偏差的,一般描述的都是用戶畫像的某一方面,很難有一個非常完整的畫像。還有一個非常重要的原因就是隱私,后面我們會有case study,大家就會發現在微博上其實還是有很多人不愿談及自己的,比如說宗教信仰,政治觀念等等,但是很多時候可能了解用戶不愿談及的這個方面的內容對于我們做產品,做服務又是非常重要的。基于這兩個原因,我們對用戶的理解就是一個碎片式的,很難召回完整的目標客戶。
用戶畫像第二個關鍵的問題就是不正確性,也就是說我們對用戶畫像的理解很多時候是錯誤的,這導致就會出現錯誤的推薦。導致不正確性的原因有很多,第一個就是機器還無法理解這些標簽,也就無法做出精準推薦。第二個原因就是在跨領域場景下,由于缺失用戶的商品,也就是缺失推薦對象之間的歷史交互信息,使得冷啟動變成一個非常突出的問題,沒有歷史信息,一切基于這個的推薦就會失效。這個時候我們可能會采取一些基于語義的辦法,但是基于語義的辦法前提是要有精準的語義匹配,這就需要一個龐大精準的知識庫來作為背景知識來支持。第三個原因就是沒有針對推薦給出解釋。這個是非常重要的,當且僅當你給出一個非常合理的解釋的時候,用戶才會很好的接受推薦。那如何給出解釋呢?以前,解釋在人腦里面,現在我們可以利用大規模知識庫來產生解釋,從而實現能夠給出帶解釋的推薦給用戶。
我們如何利用知識圖譜,把它作為background knowledge來理解用戶標簽,進而理解標簽背后的用戶呢?
理解用戶是我們的終極目標,但是我們要先理解由于用戶的行為而產生的標簽,這就非常難了,為什么呢?標簽可以認為是自然語言的一部分,是一個簡單形式,比如可以給我打標簽,“IT教師”、“復旦大學”,“知識圖譜”,那機器如何理解這些標簽呢?目前機器還不能有效的準確的理解人類的自然語言,因為我們的自然語言很多時候是有歧義的,需要通過上下文才能理解的。很多時候語言的表達式是隱含的,比如我們中國人說兩個人是愛人關系的時候,不會直接說他們倆是伴侶關系,而會說他們共進晚餐或者看電影之類的,很少直接去談及這塊,所以很多關系是隱含的。語言還有一個重要的難點,就是它的多樣性,同一個意思,可以有很多種說法。
那么再進一步分析為什么語言理解這么困難?從根本上來講,是因為語言理解是建立在人對世界認知的基礎之上。你為什么能夠理解語言?是因為你已經對這個世界,對在你身邊發生的事情有了充分的認知。機器現在還達不到認知世界的能力,機器的大腦里還缺乏非常重要的背景知識,比如這里有幾個卡通人物,大家一看就理解了,那是因為你已經有這個背景知識在背后,那么機器想要理解語言,理解標簽,就需要有海量的背景知識去支撐它認知這些概念。
機器需要怎樣的背景知識呢?第一個是要有足夠大的規模,必須覆蓋足夠多的實體,足夠多的概念。第二個是語義要足夠豐富,當說到各種各樣的關系的時候,機器必須都能夠理解。第三個就是質量足夠精良。第四個就是結構必須足夠友好。
大家都知道機器最喜歡的是有結構的數據,最怕的是純文本,無結構的數據,我們希望知識庫是以一種機器友好的結構形式來組織的。也有人發出疑問,知識圖譜跟傳統的本體語義網有什么差別呢?先來說本體,以前在特定領域尤其是醫療領域積累了大量的本體,但是大部分都是人工構建的,規模十分有限,而且當要把傳統知識工程從一個領域轉移到另一個領域的時候,就會發現代價極大,因為人工構建的成本極為高昂。再來看看以前的語義網絡,它往往是集中在單一的語義關系上,而不像知識圖譜,涵蓋了上千數萬種語義關系。再比如說文本,文本結構不友好。這么一看大家就知道傳統的知識表示都不行。
這樣,知識圖譜成為了機器語言認知所需要的知識表示,所謂知識圖譜,本質上是一種語義網絡,它表達了各種各樣實體概念及其之間的語義關系。與之前的知識表示作比較,會發現知識圖譜有非常多的優勢:第一,它規模巨大,像google的知識圖譜現在已經到了幾百億的實體規模。第二,它的語義關系也很豐富,比如說我們自己的CN-DBpedia里涵蓋了成千上萬種語義關系。第三,知識圖譜通常是用RDF來表示的,對于機器來講,結構足夠友好。第四,知識圖譜是通過大數據眾包的手段來校驗它的質量,也就是靠人來校驗質量,所以有著比較好的質量。
所以利用知識圖譜來幫助機器理解標簽,最終理解用戶是有可能的。
怎樣利用知識圖譜來解決剛才提到的不完整和不正確的兩個問題呢?
我們利用知識圖譜來做標簽擴展,標簽推斷,來提高機器對標簽的理解水平,實現基于標簽的,基于知識圖譜的精準推薦。
我們把social graph當做一個knowledge graph,只不過social graph是人與人之間的關系,而knowledge graph是更為一般的語義關系,所以某種程度上可以認為social graph是knowledge graph的一個typical case。
出于隱私的考慮,很多用戶不愿意給自己打標簽,那怎么辦呢?我們可以利用social network上的一些關系來推斷一些不具備標簽或者具備很少標簽的用戶的一些標簽。
如果用戶的大部分朋友都有這個標簽,那么我覺得用戶也可以擁有這個標簽。如果用戶與朋友關系非常緊密,那么朋友的標簽傳播過來的可能性就更大。
我們就是基于這兩條準則來進行標簽傳播的。
這里有一個實際案例,我們在微博上做實驗,結果顯示這種傳播方法很有效,尤其是在宗教信仰,政治觀念,教育等方面的推斷準確率能高達95%。
比如在這個user case,基于label propagation這么一個思路,用LTPA算法,user A的real tags是music和fashion,但是通過標簽傳播,你會發現實際上他是一個基督教徒,因為傳播出來很多類似Christian,Bible,faith等等這樣的標簽,那我們看他的微博發現他確實就是一個基督教徒。
這就是tag propagation,通過傳播來找到用戶的缺失標簽。
關于標簽的不正確性,我們做一個tag inference。這里有兩個真實的案例,第一個案例就是季建業受審的案子,我們要給這個新聞打合理的標簽,這個標簽難在什么地方呢?大家都知道季建業是南京市長,在山東煙臺受審,結果“煙臺”出現的頻率顯著高于“南京”,但是這個新聞按道理應該是“南京”打的這個標簽權重高于“煙臺”,那么怎樣識別出更準確的標簽呢?怎么把“煙臺”這個標簽弱化,而把“南京”這個標簽給強調出來?
第二個例子就是槍決案件,打的標簽是“朝鮮”,“崔英建”,“槍決”這三個標簽,雖然通篇沒有提到平壤,但這件事肯定跟平壤是有關系的。
實際上這樣的例子很多,一篇講姚明的文章,即便通篇沒有講籃球,但肯定跟籃球有關系,打上“籃球”的標簽準沒錯。
我想表達什么意思呢?就是有很多應該打的標簽,由于這個事實太顯然,以至于文本里沒有提,而我們現在所有的辦法都基于一個假設,就是文本里提到才能打上標簽,那么我們有沒有辦法推斷出這些不存在與文本中的標簽呢?
實際上我們用知識圖譜是可以做到的。我們建構一個語義網絡,利用CN-DBpedia把新聞里提到的候選實體之間的語義關聯建立起來。我們的算法怎么實現呢?其實也很簡單,我們可以用一些隨機游走的辦法,可以從新聞中觀察到的這個實體去隨機游走,看它們能都傾向于走到哪些未被觀察到的實體,而這些實體就是很有可能作為標簽出現的。實驗結果證實這個辦法的確能夠找到更多人工判斷下來的更為準確的標簽。
再進一步我們想通過知識圖譜讓機器準確理解這些標簽。
人類是在合適的概念層次來理解標簽的。比如說人類看這么一組標簽“China,Japan,India,Korea”,很快就會理解,講的是Asian country。基于概念級別去理解這些標簽對于后面做精準推薦是十分重要的。那現在問題來了,我們怎么讓機器去理解這些標簽?怎么為標簽產生一個合適的概念呢?
首先我們用一個knowledge base叫probase,它包含了大量的實體,也可以認為是標簽及其概念。比如“apple”,它可以是一個company,也可以是一個fruit,company和fruit都是“apple”的概念。
我們利用probase去產生概念標簽的時候,要解決兩個問題,第一個問題就是我們希望找到的這個概念的覆蓋率高,第二問題就是概念的信息盡可能詳細。比如第一個例子“China,Japan,India,Korea”,可以用“Asian country”這個標簽,也可以用“country”這個標簽,但顯然“Asian country”比較好。
我們要處理的最核心的問題就是coverage和minimality這么一對矛盾。我們采用的是一個非常通用的模型,是基于信息論的,也就是Minimal Deion Length最小描述長度的方法。
我們把剛才那個概念標簽選擇問題建模成找一堆概念來encoding我們看到的tag這么一個問題。那么很顯然,剛才的兩個標準,就可以體現在這里的兩個目標里。第一部分,就是我們要用盡可能少的概念去cover這些實例,那么也就是說概念自身的編碼代價要盡可能小。第二個利用這種概念去encoding知識圖譜的tag的代價盡可能小,也就是基于知識圖譜的條件的length盡可能小。就有這么一個優化的問題。當然了,這是一個很general的model。在這個general的model下面,我們還要處理一些很實際的情況。
我們這里很多都是很實際的案例,來自很多實際的data的tag。比如在實際的用戶的tag或者image或者document往往會有噪音。比如這個tag里面有很多“apple,banana,breakfast,dinner,pork,beef”,突然出現一個“bullet”,那這個很可能就是個噪音,所以這個模型要能夠噪音容忍,這是第一個問題。
第二個問題就是說有很多像“population,president,location”,實際上最好的概念是“country”。但你要注意“country”跟“population,president,location”實際上不是嚴格的isA關系。population人口,president總統都是“country”的一個屬性,而不是isA關系。像剛才“China”和“Asian Country”那是isA關系。但是population只能說是Country的一個attribute。所以我們在建模的時候不僅僅要考慮isA關系,還需要能夠應用這里的attribute關系,這是在模型方面的兩個改進。
最終的實際效果大家看,非常有意思。我們可以看到,基于MDL的方法是可以非常有效的解釋這個標簽的。我們人為做了一個實驗,把來自三組不同概念的實體混在一起,看看我們的模型能不能找到這三組實體的三個正確的概念標簽。圖中Table 3第一行就真的找到相應來源的概念。
再看看Table 4,帶屬性和不帶屬性是可以產生不一樣的概念的。比如“bride,groom,dress,celebration”在帶屬性的模型中產生的是“wedding”這個概念標簽,但是在不帶屬性的模型中產生的是“tradition”這個概念標簽。
我們怎樣利用這個知識圖譜來做一些精準推薦呢?在推薦中最難的一類是跨領域推薦,不同的領域要不共有user,要不共有item,要不共有feature,可是也有非常情況,比如說給微博用戶推薦淘寶商品,當然可以用傳統的ontology的辦法,但是ontology的覆蓋率比較低,所以我們要用知識圖譜。
如果一個微博用戶經常談論各種旅游名勝,我們能不能把淘寶上的登山杖,旅游鞋推薦給他呢?要知道旅游名勝和登山杖,旅游鞋的描述是風馬牛不相及的,是沒有辦法直接匹配的,那就需要一些間接匹配的方式,通過什么呢?就是通過背景知識圖譜來做一個橋接,也就是CN-DBpedia。
“九寨溝”會在知識圖譜在里面,知識圖譜 里可能有一些相關實體,比如“旅游”,“旅游”和“九寨溝”直接相關,“旅游”與“登山杖”“旅游鞋”也相關,就可以用這種中間實體和概念來橋接兩個完全不相關的物品和用戶。
實際上我們利用knowledge base構建了很多concept vector來進行描述,分別描述user和item,然后來實現匹配,最終的效果也是相當不錯的。
事實證明,在knowledge graph和knowledge base的支持下,的確是可以把兩個看上去語言描述完全不一樣的東西進行匹配的。
最后我們來聊聊推薦解釋。
舉個例子,假如說用戶在亞馬遜上搜索了“iPhone 7”,又搜了“華為 9”,那么亞馬遜應該給用戶推薦什么呢?如果亞馬遜給用戶推薦“小米 Note”,那好像就不太對,比較好的就是推薦類似“三星 S7”。為什么用戶搜了“iPhone 7”和“華為 9”就要推薦“三星S7”呢?因為它們共有相同的概念,它們可以歸到相同的品類,它們都是昂貴的、高端的smart phone 。
那我們能不能根據用戶搜索的實體給他推薦其他的商品,并給出解釋呢?
這里我們用概念作為解釋,比如說,如果我說三個國家,中國,印度,巴西,然后讓你再說一個國家,你很有可能就會說俄羅斯,因為它們都是金磚四國,都是新興市場,都是發展中國家,它們共有很多概念。 所以概念是一個非常好的解釋。
那么概念哪里來呢?概念又是來自于剛才提到的一個叫probase的知識庫。那么為了做這個事情,我們提出好幾個model。比如在這個model 2里面,我要推薦一個實體e,那么實體e跟剛才已經觀察到的一堆實體q組合到一起之后,應該能夠非常好的保持住原來那堆實體的概念分布。我們用概念分布來表示實體的語義,比如說剛才的中國,巴西,印度,他們的概念分布就是發展中國家,新興市場,金磚四國這樣一些概念。概念實際上是實體的一個非常好的語義表示。那我用概念分布來做它的語義表示。那么很顯然,我要加進來的這個實體e跟q組合到一起之后,他們的概念分布要盡可能保持住已經觀察到的這組實體的概念分布。就有這么一個model,我們需要把它的交叉熵給最小化。這就是我們這個model 2。下面就是求解,那就非常簡單了。
那最終的效果也就是很有意思,如果用戶先搜索了“阿里巴巴”,“騰訊”,我們的模型就會推薦“百度”,而其他的模型會推薦其他的一些大公司。再如果用戶搜索了中國的三大國有銀行,我們的模型會推薦第四大國有銀行,而其他的模型可能會推薦一些不準確的東西。
轉載于:https://www.cnblogs.com/davidwang456/articles/9687727.html
總結
以上是生活随笔為你收集整理的肖仰华:基于知识图谱的用户理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【漫谈数据仓库】 如何优雅地设计数据分层
- 下一篇: 数据挖掘导论读书笔记9聚类分析