何子健,李嘉敏,李秋銳,余俊輝,鄭圓君,李鄉(xiāng)儒
(華南師范大學(xué) 數(shù)學(xué)科學(xué)學(xué)院,廣東 廣州 510631)
知乎是國內(nèi)目前質(zhì)量較高的主打知識傳播的問答社區(qū)。據(jù)統(tǒng)計,在2017年知乎的用戶注冊總數(shù)已經(jīng)超過了6千萬。問答社區(qū)實際上是一個廣義上的社交網(wǎng)絡(luò),用戶能夠通過搜索發(fā)現(xiàn)行業(yè)精英并建立社交關(guān)系。文中將以知乎為例對基于LSI信息融合的實時推薦算法性能進行分析。
與其他問答社區(qū)類似,隨著用戶數(shù)量的高速增長,用戶的信息量越來越大,如何利用有價值的信息為檢索用戶進行高效推薦就成了知乎的一大難題。而知乎目前的用戶檢索功能主要以用戶的自我簡介的字符匹配為主,沒有利用用戶的歷史行為信息。這樣會導(dǎo)致推薦的用戶可能只是自我簡介與關(guān)鍵詞一致,并不是相關(guān)的精英用戶。當檢索用戶希望尋求該關(guān)鍵詞下的精英用戶或者與之建立社交關(guān)系時,知乎的用戶檢索功能還不能滿足要求。例如在知乎的搜索框內(nèi)檢索“男性”與“游戲”時,知乎的推薦用戶在自我簡介上基本出現(xiàn)了該關(guān)鍵詞,但在推薦的用戶中部分用戶還沒有回答相關(guān)問題的記錄。為了輔助檢索用戶得到自己滿意的結(jié)果,文中提出了一種基于潛在語義索引信息融合的實時推薦算法。信息融合即融合了檢索關(guān)鍵詞和社區(qū)用戶歷史行為信息,在用戶通過搜索框搜索時,推薦算法通過分析用戶輸入關(guān)鍵詞的隱含語義,進行即時主動的推薦。
文中是基于LSI信息融合的實時推薦算法研究,以問答社區(qū)知乎為例,根據(jù)用戶輸入的關(guān)鍵詞進行實時的用戶推薦。以下將介紹LSI模型、搜索推薦與社區(qū)的用戶推薦的研究現(xiàn)狀,并分析社區(qū)推薦的現(xiàn)狀。
LSI模型是Deerwester S等[1]提出的一種自動索引與檢索的方法,充分利用了高階結(jié)構(gòu)的文本聯(lián)系并提高了相關(guān)文本的檢索能力。在對社區(qū)的傳統(tǒng)應(yīng)用中,LSI廣泛應(yīng)用于基于內(nèi)容的推薦和協(xié)同過濾推薦的靜態(tài)被動推薦中。例如,Symeonidis P等[2]基于用戶、標簽與音樂產(chǎn)品,使用LSI模型和高維奇異值分解方法研究了用戶的音樂推薦;Chan N N等[3]基于用戶的習(xí)慣研究了使用向量空間與LSI模型對用戶進行推薦的方案。
在搜索推薦中,眾多研究者使用聚類、主題模型等方法。楊海濤等[4]結(jié)合用戶興趣模型和STC聚類算法(suffix tree clustering)實現(xiàn)了一個基于搜索結(jié)果的個性化推薦系統(tǒng)(personalization recommendation system based on result),該系統(tǒng)在快速查找用戶感興趣的文檔上有較好的性能。孫達明等[5]提出了面向多樣化搜索背景的查詢推薦策略,通過構(gòu)建密集行為塊對用戶進行區(qū)分推薦。魏童童等[6]基于時序背景的LDA(latent Dirichlet allocation)主題模型與協(xié)同過濾的混合模型(TLCA-CF)提高了推薦效率。祝婷等[7]通過本體擴展LDA模型的主題得到關(guān)聯(lián)主題,并考慮了概率與加權(quán),提高了LDA推薦的驚喜度。
在社區(qū)的用戶推薦系統(tǒng)上,基于主題模型與拓展語義模型是常用的推薦方法。陳杰等[8]通過引入時間函數(shù),結(jié)合LSI模型對微博用戶的長短期興趣進行推薦。孫靜宇等[9]基于專家用戶和普通用戶的搜索歷史開發(fā)面向語義搜索的模型。錢點點[10]針對微博社區(qū),通過WordNet拓展提問中關(guān)鍵詞的語義,返回該問題類別的回答精英。趙勤等[11]提出了基于主題的用戶社區(qū)分類方法,并根據(jù)分類信息進行社交網(wǎng)絡(luò)用戶推薦。
在社區(qū)推薦的研究中,大多研究的方向為非實時推薦。非實時推薦即在后臺對用戶數(shù)據(jù)進行訓(xùn)練并推薦用戶感興趣的內(nèi)容,如網(wǎng)站上“猜你喜歡”的功能。但非實時推薦訓(xùn)練時間長,不具備實時響應(yīng)的條件,不適用于用戶主動檢索的情形。而在搜索推薦的研究中,缺乏對社區(qū)歷史信息的充分利用,導(dǎo)致推薦效果不夠理想。
為解決上述問題,文中提出了基于LSI信息融合的實時推薦算法,以實現(xiàn)將用戶當前的搜索需求與社區(qū)用戶歷史信息相融合,提升用戶推薦的質(zhì)量。
文中提出的基于LSI信息融合的實時推薦算法,融合了用戶的搜索需求與社區(qū)用戶歷史信息。首先通過LSI模型對社區(qū)用戶歷史信息建立潛語義空間。然后當檢索用戶輸入關(guān)鍵詞檢索其他用戶后,算法分析關(guān)鍵詞的潛在語義和主題。最后返回歷史信息與關(guān)鍵詞最相似的精英用戶。用戶檢索的實時推薦較傳統(tǒng)的非實時推薦更及時地對用戶的搜索需求做出反應(yīng),對新用戶也可以取得較好的推薦。而且LSI模型可以獲取用戶的潛在語義,進行深度挖掘。
整個算法的流程如圖1所示,可分為四步,前三步是算法的模型構(gòu)建,最后一步是應(yīng)用。第一步是語料庫的建立。以用戶為單位,每條用戶數(shù)據(jù)對應(yīng)向量空間矩陣中的一個向量。第二步是文本預(yù)處理,通過詞過濾、分詞和關(guān)鍵詞提取以及文本表示后,語料庫被轉(zhuǎn)化為向量空間矩陣。第三步是應(yīng)用LSI模型,提取潛在語義和對矩陣降維,將高維度的向量空間矩陣轉(zhuǎn)化為低維度的潛語義空間矩陣。第四步是應(yīng)用算法模型,當用戶輸入檢索關(guān)鍵詞后,算法將關(guān)鍵詞組作為新的向量,與潛語義空間矩陣的各個向量進行相似度計算,返回相似度最高的向量及其對應(yīng)的用戶,該用戶即算法的推薦用戶。
圖1 算法流程
文中算法的優(yōu)勢主要有三點:一是用戶數(shù)據(jù)的多樣性,文中爬取了用戶提問、回答和關(guān)注等多種數(shù)據(jù),多維挖掘用戶特點;二是充分的預(yù)處理工作,能夠提取語料準確的關(guān)鍵詞,提高對數(shù)據(jù)的概括能力;三是LSI算法降維和潛語義提取效果,在對矩陣進行相似度計算時,矩陣中每條向量都需要與輸入的新向量進行匹配。若在高維度的向量空間矩陣進行直接匹配,復(fù)雜度上是難以實現(xiàn)的,而且數(shù)據(jù)的高度冗余將降低推薦效果。文中利用LSI的降維與潛在語義提取雙重特性,做出有效且快速的用戶推薦,提高用戶檢索體驗。
對于一個用戶,需要的信息為知乎網(wǎng)頁上的公開信息,包括用戶關(guān)注的話題,關(guān)注的專欄,回答的問題以及提出的問題。憑借上述信息來判斷該用戶是否值得推薦給檢索用戶。因此文中爬取的數(shù)據(jù)集以用戶為單位,每個用戶的信息構(gòu)成一條語料,信息包括用戶關(guān)注的話題,關(guān)注的專欄,回答的問題和提出的問題,以此建立語料庫。
文本表示是將原始的自然語言映射為計算機能夠讀取和計算的特征表現(xiàn)形式。文中基于向量空間模型(vector space model)[11]實現(xiàn)文本的表示。在此模型中,每個語料均被表征為整個二維語料空間的一個向量。模型以詞為項,并通過統(tǒng)計項出現(xiàn)頻率構(gòu)造文本表示向量。向量空間模型用于推薦算法的設(shè)計十分方便,如計算語料間的相似度時僅需計算模型中兩個向量的相似度。
在上述文本表示的基礎(chǔ)上,使用TF-IDF(term frequency-inverse document frequency)評估詞在語料庫中的重要程度。詞的重要性通過綜合它在具體文本中的出現(xiàn)次數(shù)和在所有文本中出現(xiàn)的頻率實現(xiàn)評估,以過濾無判別性的詞語和突出每個語料的關(guān)鍵詞。
為了提高推薦效果,需要對原始的輸入文本去除停用詞。停用詞指人類語言中將關(guān)鍵意思連綴成句的沒有具體含義的輔助性詞匯。由于問答社區(qū)的特殊性,對停用詞的概念作了延伸。文中實驗的停用詞表實現(xiàn)了2個功能:一般停用詞過濾和問答社區(qū)常見詞過濾。一般停用詞為感嘆詞、連詞、代詞、助詞、語氣詞等,如中文的“是否”、“可以”,英文的“about”、“please”等,這些詞有很高的使用頻率,但很少能表達語料的核心信息,對于文中的用戶推薦算法少有幫助。在知乎等問答社區(qū)中,“為什么”、“怎樣”、“體驗”、“應(yīng)該”等詞常見于問答中,也不包含與主旨相關(guān)的信息,都歸為停用詞。這類詞語共過濾了82個。為提高推薦性能,在實驗的用戶數(shù)據(jù)中,預(yù)先過濾了超過2 800個詞。
文中的分詞和關(guān)鍵詞提取算法借助jieba分詞工具。jieba分詞工具是目前中文分詞較好的工具。調(diào)用python接口實現(xiàn)語料分詞和關(guān)鍵詞提取。關(guān)鍵詞提取算法主要有2種:TF-IDF算法和TextRank算法[12-13]。TextRank算法是將文本分詞后以圖構(gòu)建詞間的關(guān)系,最后通過節(jié)點的PageRank算法排序。表1展示了某個語料下兩種算法的對比效果,對20個語料進行對比分析,認為TF-IDF的提取關(guān)鍵詞算法比TextRank更優(yōu)秀。
表1 關(guān)鍵詞提取算法對比
LSI(latent semantic indexing)模型是文本挖掘中常用的主題模型。它主要依據(jù)相同文章中的詞語一般具有潛在相關(guān)含義的思想,使用奇異值分解方法,從語料庫中找出詞匯間的潛在語義關(guān)系,以便得到詞語與主題之間的相關(guān)關(guān)系。
LSI模型解決的主要問題是:如何通過搜索找到主題相似的語料。如果僅僅通過字符匹配來定義語料間的相似性,那么就會忽略大量表述不同而含義相同的語料,具有很大的局限性。因此應(yīng)該去比較隱藏在詞背后的意義。但傳統(tǒng)向量空間模型使用精確的詞語匹配。例如用戶搜索“automobile”這個詞的時候,傳統(tǒng)向量空間模型僅會返回包含“automobile”的結(jié)果,而忽略類似“car”等含義相同而表述不同的相關(guān)結(jié)果。LSI模型可以返回類似于“car”的結(jié)果。它把詞和語料都映射到一個潛在語義空間中來比較詞語之間的相似性,進行詞語聚類。而潛語義空間的維度,即語料庫的主題個數(shù),可以根據(jù)實際情況降低空間維度。從本質(zhì)上說,LSI是一種單詞聚類和空間降維算法。
應(yīng)用LSI的算法流程可分為兩部分,第一部分是潛語義空間的建立,第二部分是基于該空間的實時用戶推薦。下面的6個步驟中前5步為第一部分,最后一步為第二部分。
(1)將語料庫表示為向量空間矩陣M。
(2)對矩陣M進行奇異值分解(singular value decomposition)。
M=U×S×VT
(1)
(3)空間降維。根據(jù)實際情況保留矩陣S的前K個最大的奇異值得到矩陣S'。同時得到對應(yīng)的矩陣U'和V',V'中的每行即為每個文檔在潛在語義空間上的K維表示。由于這個K值實際上是對語料庫劃分的主題的數(shù)量,是可以自由給定的,所以LSI算法的復(fù)雜度是可以控制的。
(4)使用降維后的矩陣重建語料矩陣,即:
M'=U'×S'×V'T
(2)
(5)給定一個新語料Q,用列向量表示,那么其在潛在語義空間上的K維表示為:
Q'=QT×U'×S'-1
(3)
(6)將新語料Q與潛在語義空間下的每個語料進行相似度計算,得到與Q最相似的文檔。這一步與流程圖中的相似度計算對應(yīng),是算法模型應(yīng)用的部分。該步驟的算法復(fù)雜度是O(KN),其中N是用戶數(shù)量,文中建議僅在回答活躍的用戶上進行推薦,大量無歷史活動的用戶會影響算法的速度??紤]知乎的回答活躍用戶數(shù)量情況,K<103,N<106,在工業(yè)上該復(fù)雜度是可以接受的。
本節(jié)將介紹兩種算法,一是基于LSI的相似回答推薦算法,另一種是文中的核心算法,即基于LSI信息融合的實時推薦算法,其中前者為后者作鋪墊。利用Python的gensim拓展包進行了算法的實現(xiàn)和測試。通過知乎真實數(shù)據(jù)的測試得知,LSI主題挖掘能夠很好地評價語料間的相似性,十分適合知乎的用戶推薦功能。
(1)相似回答推薦。
本算法的目的是將同一問題的相似回答推薦給用戶,相似性測度是算法的核心。算法流程是先基于某一問題下的所有回答建立語料庫,并在此基礎(chǔ)上應(yīng)用LSI模型,得到語料庫的潛在語義空間,當給出一個回答時,在潛在語義空間以向量間的余弦距離來評價語料間的相似度并返回相似度最高的回答。實驗時以知乎問題“現(xiàn)實可以有多美好?”下的9 000條回答為語料庫,K取300[14]。表2是該實驗的實例,給出了輸入語料和最相似的3個語料。可以看出輸入的語料沒有“陌生人”這個詞,但模型能夠獲取到其潛在語義是“陌生人的善意”,因此給出的相似回答都是圍繞這個潛在主題。
表2 推薦內(nèi)容
表3給出了此數(shù)據(jù)集下LSI主題挖掘的性能分析,由于目前還沒有很好的對語義分析的定量評價標準,文中的評價指標采用了定性分析。對每個輸入語料取前10個相似語料進行分析,總共輸入20個語料,說明了LSI主題挖掘在尋找相似回答問題上的有效性。
表3 LSI應(yīng)用于尋找相似回答的性能分析
(2)用戶推薦。
本算法考慮從用戶整體的層面上進行用戶推薦。模仿用戶知乎上搜索的習(xí)慣,當用戶輸入問題的關(guān)鍵詞后,系統(tǒng)能夠推薦該關(guān)鍵詞下的精英用戶。首先,算法以用戶為單位建立一個兩萬個用戶的語料庫,每個用戶的語料包括用戶關(guān)注的話題、專欄、回答、提問等信息,然后在這個語料庫的基礎(chǔ)上建立LSI模型(K取100)。輸入檢索的關(guān)鍵詞后,算法將這一個或多個關(guān)鍵詞作為新的語料,計算新輸入的語料和原始語料之間的相似度,返回相似度最高的語料所代表的用戶。測試數(shù)據(jù)采用數(shù)據(jù)集中的1 000個用戶,若用戶搜索“男性”,“游戲”這兩個關(guān)鍵詞,程序返回的排名第一的推薦用戶為“張二狗比你帥”,從圖2的結(jié)果可以看到,該用戶實際上是對游戲了解較多的用戶,相對于其他用戶,回答了較多的與游戲有關(guān)的問題(下劃線標注)。
圖2 推薦用戶舉例
為更好地測試LSI主題挖掘在知乎上的效果,對四個不同方面的主題進行測試,結(jié)果如表4所示。表中分別顯示知乎網(wǎng)上的用戶推薦結(jié)果與文中算法的推薦效果比較??紤]到知乎的用戶檢索結(jié)果頁面同時顯示的用戶數(shù)量為6個與用戶使用習(xí)慣,算法在輸入主題關(guān)鍵詞后選取排名前6的用戶,對這6個用戶的回答與提問是否與搜索關(guān)鍵詞實際相關(guān)進行關(guān)鍵詞的比對與人工理解分析,統(tǒng)計出各關(guān)鍵詞推薦結(jié)果的前6個用戶的相關(guān)回答數(shù)、回答總數(shù)、相關(guān)提問數(shù)與提問總數(shù)的均值,并求相關(guān)回答與相關(guān)提問在各關(guān)鍵詞的回答總數(shù)與提問總數(shù)的百分比。
從表中可以看到,在知乎現(xiàn)有算法中,用戶的推薦結(jié)果相關(guān)百分比不穩(wěn)定,用戶的相關(guān)回答與相關(guān)提問的百分比整體較文中算法低,偶爾出現(xiàn)虛高,且相關(guān)提問或回答的絕對數(shù)量整體比文中算法低。這是因為知乎的推薦是依據(jù)用戶的名稱與個人簡介,沒有充分融合用戶的信息,且知乎的用戶名稱與簡介與用戶的實際回答與提問行為存在必要不充分關(guān)系,所以造成了知乎推薦的多為“無提問、無回答、無關(guān)注者”的用戶,此類用戶往往不是檢索用戶希望被推薦的結(jié)果。在知乎推薦的相關(guān)百分比中還會出現(xiàn)“虛高”的情況,即用戶回答與提問的基數(shù)極少時,當出現(xiàn)少量相關(guān)問題與回答時百分比會偏高。而在文中使用的算法的推薦結(jié)果中,無論是相關(guān)提問或相關(guān)回答的絕對數(shù)量與百分比均穩(wěn)定在較高水平,推薦用戶與檢索關(guān)鍵詞實際相關(guān),為用戶提供高效的推薦結(jié)果。說明文中算法對比知乎的用戶檢索功能有很大的提升。
表4 LSI主題挖掘算法效果
針對問答社區(qū)的缺乏有效的實時用戶推薦問題,提出了基于LSI信息融合的實時推薦算法。當檢索用戶需要通過輸入關(guān)鍵詞檢索其他知乎用戶,尋求其他用戶的幫助時,推薦算法能夠返回合適的用戶給檢索者。由于LSI模型能學(xué)習(xí)語料的隱含語義,且可將原語料庫空間投影到隱含語義空間,大大降低了維度,加快了推薦速度[15],優(yōu)化了結(jié)果。使用知乎真實數(shù)據(jù)進行實驗,結(jié)合人工分析與相關(guān)回答的比例對比,并與目前知乎上的結(jié)果進行對比,論證了該算法的有效性。
由于硬件限制,測試數(shù)據(jù)的規(guī)模還不夠。日后的研究方向?qū)⒓性趦蓚€方面:一是增大數(shù)據(jù)的規(guī)模;二是考慮用戶多種數(shù)據(jù)間權(quán)重分配的問題,更注重用戶回答的質(zhì)量。