歡迎大家前往騰訊雲+社群,擷取更多騰訊海量技術實踐幹貨哦~
本文由騰訊QQ大資料 發表于雲+社群專欄
随着社交網絡的發展和積累,内容的産生、傳播、消費等已經根深蒂固地融入在人們的生活裡。随之内容分析的工作也就走進了人們的視野。近年來,各種公衆趨勢分析類産品湧現,各大公司都利用自身資源紛紛搶占一席之地。
公衆趨勢分析平台利用自然語言處理、機器學習方法對資料進行分析,給使用者提供輿情分析、競品分析、資料營銷、品牌形象建立等幫助。其中,熱點發現問題是公衆趨勢分析中不可或缺的一部分。熱點發現通過對海量資料(本文集中在文本資料方面)進行分析,挖掘相關人群重點關注的内容。
在我們的業務場景中,快速高效地從海量社交短文本中發現出實時的話題,可以幫助産品、營運、公關等同學更好地吸引使用者。然而,直接從海量文本中生成文法正确、意思明确的話題,是一件不容易的事情。本文主要介紹在話題生成上運用的一個較為簡單高效的方法。
所謂話題
目前很多内容平台的話題收集有相關的産品政策或者營運同僚支援。例如讓使用者自定義話題,并用特定的符号辨別,如“#白色情人節#”。在一些文本場景中,沒有這些條件支援,而需要我們直接從海量的使用者社交文本中提取熱點話題,或者說熱點事件。本文的目的即是自動從海量社交短文本中,自動發現熱點事件或熱點話題。
不少相關的工作,将話題提取利用主題分析的方法來解決,利用主題模型(LDA等)、聚類等方法,但這種思路輸出的各個話題的一些主題詞或者相關詞,而不是直接生成話題短語。可以考慮引入事件抽取或者文本摘要的思路來解決這類場景的熱點話題提取問題,但其往往需要監督資料。本文介紹一種簡單實用的熱點話題提取方法的嘗試。
具體做法
本文提出一種從熱詞提取出發,提取熱點話題的方法。下面是方法的整體流程圖,首先提取熱詞,然後在熱詞的基礎上,做話題提取。下面分兩部分詳細介紹。
熱詞提取
主體思路是利用詞頻梯度和平滑方法。
如上圖所示,詞語的熱度受很多方面的影響。
- 大盤影響:白天和淩晨、雙休日和工作日、節假日和平常日子,社交消息的整體數量都會有一個較大的波動。
- 詞間影響:也許語料中某個段子突然非常火,會導緻一些平時關系不大的詞語,一下子全部成為熱詞。
- 周期影響:24小時、星期、月份、節氣等周期性的變化,常常會使得“早安”、“周一”、“三月”等事件意義性不強的詞語成為熱詞。
- 自身趨勢:這個就是我們最關心的熱度資訊了。這些由于事件引起相關詞語的突發性、遞增性等的增長,就是我們算法想要識别和分析出來的。
針對以上一些影響因素,我們從以下的一些方面進行熱詞提取工作。
1、預處理:這裡主要包括文本去重、廣告識别等方法,對資料進行一些去躁的工作。
2、梯度:詞頻增量的主要衡量名額。
3、貝葉斯平均:一種利用outside information,especially a pre-existing belief,來評價the mean of a population的方法。
貝葉斯平均的典型應用包括使用者投票排名,産品評分排序,廣告點選率的平滑等等。
以使用者投票排名為例,使用者投票評分的人很少,則算平均分很可能會出現不夠客觀的情況。這時引入外部資訊,假設還有一部分人(C人)投了票,并且都給了平均分(m分)。把這些人的評分加入到已有使用者的評分中,再進行求平均,可以對平均分進行修正,以在某種程度或角度上增加最終分數的客觀性。容易得到,當投票人數少的時候,分數會趨向于平均分;投票人數越多,貝葉斯平均的結果就越接近真實投票的算術平均,加入的參數對最終排名的影響就越小。
4、熱度分數計算:利用貝葉斯平均對梯度分數進行修正。
這裡,公式中的平均詞頻是貝葉斯平均公式中的C,平均分是貝葉斯平均公式中的m。也就是說在熱詞提取中,我們用梯度分數的平均分作為先驗m,用平均詞頻作為C。
熱詞提取中可以這麼了解,詞語每出現一次,相當于給詞的熱度進行了評分。
詞頻少,也就代表了評分的人數少,則評分的不确定性大,需要用平均分來進行修正、平滑。這裡可以把一些詞頻很少的詞語的高分數拉下來,例如一個詞語今天出現了18次,昨天出現了6次,這裡梯度分數就比較高,為0.75,但這種詞語其實更可能不是一個熱詞。
詞頻大,遠大于平均詞頻的詞語,也就代表了評分的人數多。則分數會越趨向于自己的實際分數,這時平均分的影響變小。這是合理的,例如一個本來是百萬量級的詞語,第二天也出現了一個三倍的增量,這裡熱度價值就明顯提高了。
5、差分:這裡主要考慮是要解決熱詞的周期性影響的問題。具體做法非常簡單,比較的時間間隔需包含一些影響較為明顯的時間周期。例如按小時統計的熱詞,最好是拿今天和昨天一個相同的時間點進行比較。
6、共現模型:對于互為共現詞的熱詞,進行一層篩選。
通過頻繁項集、word2vector等方法,發現出共現詞語的關系。利用共現詞語的資訊,對熱詞進行一輪篩選,提取出最有價值的熱詞,避免資訊備援。
7、時間序列分析:考慮更詳細的曆史因素。
通過對詞頻進行時間序列分析,可以更詳細地區分短期、長期與周期性熱點;對一些更有價值的熱詞做熱度預警;對熱詞的增長趨勢進行分析等等。
綜上,我們在周期時間間隔内,通過貝葉斯平均修正的詞語梯度分數來分析詞語熱度,并利用語料中詞語的共現資訊,進一步篩選得出熱詞。通過時間序列分析,得出熱詞的特性和增長趨勢等。
話題提取
提取出了熱詞,但一個詞語對于事件或者話題的表達能力是有限的。這裡我們從熱詞出發,進一步提取出話題。
這裡話題提取的工作也分為兩步,第一步先找出一些候選的話題詞組;第二步利用Attention的思想,從候選詞組中找出一個包含的詞語更加重要的詞組,作為輸出話題。
候選詞組提取
候選詞組的提取主要根據資訊熵的理論,用到以下一些特征。
1、 内部聚合度——互資訊
這應該從資訊熵說起。資訊熵是用來衡量一個随機變量出現的期望值,一個變量的資訊
熵越大,表示其可能的出現的狀态越多,越不确定,也即資訊量越大。
互資訊可以說明兩個随機變量之間的關系強弱。定義如下:
對上式做變換可以得到:
表示Y的不确定度;表示在已知X的情況下,Y的不确定度,成為已經X時,Y的條件熵。則可知表示由X引入而使Y的不确定度減小的量。越大,說明X出現後,Y出現的不确定度減小,即Y很可能也會出現,也就是說X、Y關系越密切。反之亦然。
在實際應用中,詞組的内部聚合度即為詞語間的内部聚合度。對于一個詞組,我們選取使不确定性減少的程度最多的一種詞語組合,來說明詞組的内部聚合度。
2、 所處語境的豐富程度——左右資訊熵
剛剛已經提到資訊熵說明了資訊量的大小。那麼如果一個詞組的左右資訊熵越大,即詞
組左右的可能情況越多,左右的搭配越豐富;則說明這個詞組在不同的語境裡可讨論的事情越多,越可能可以獨立說明一個事件或話題。
3、 是否普遍——這個很直覺地可以通過詞組出現的頻次來衡量。
話題精篩
對于某一個熱詞,挑選出來一批候選詞組後,每個詞組所含的詞語不同,包含的資訊量也不同。比如3月9日對于“巴黎”這個熱詞,我們提取出來的候選詞組有“巴黎球迷”、“巴黎球員”、“淘汰巴黎”、“心疼巴黎”、“巴薩逆轉巴黎”、“法國巴黎”、“巴黎時裝周”。但“巴薩球員”、“巴黎球迷”、“淘汰巴黎”、“心疼巴黎”、“法國巴黎”這些詞組中,“球員”、“球迷”、“淘汰”、“心疼”這些詞語在很多其他的語境中也經常出現,它們的指向性并不明确;“法國巴黎”的資訊量甚至隻有一個地點。而“巴薩逆轉巴黎”、 “巴黎時裝周”則還包含了更具體的資訊——足球比賽、球隊、賽果、地點或者時裝秀等,事件的指向更明确。這裡,就需要我們對候選的話題詞組進行篩選。
篩選的主要依據或思想,其實和Attention機制是一樣的,關鍵是要找出重要的詞語。比如與“巴黎”的搭配,“巴薩”、“逆轉”、“時裝周”比“球迷”、“球員”、“心疼”、“法國”包含的資訊更多,意義更大。可以想到,“巴薩”、“逆轉”、“時裝周”這些詞語在其他無關語料中不常出現,“球迷”、“球員”、“心疼”、“法國”在不同語料中都常會出現,資訊不明确。是以,在我們的問題中,可以通過TF-IDF的思路來确定Attention。
具體說來,就是衡量詞組中,各個詞語在詞組中的特異性。我們有理由相信,“巴薩”、“逆轉”、“時裝周”這些詞語,在含“巴黎”的相關語料中出現的機率較高。熱詞的候選詞組s的事件或話題表示能力分數可由以下公式求得:
其中,N為候選詞組中的詞語個數,為候選詞組中包含的第i個詞語,Corpus (w)表示含有詞語w的相關語料。
另一方面,我們也需要考慮詞組出現的頻次,詞組出現的次數越多,說明事件越重要。
綜上所述,我們通過候選詞組的事件或話題表示能力分數以及出現頻次,精篩出熱詞的相關話題。
問答
使用nlp進行句子壓縮?相關閱讀
低于0.01%的極緻Crash率是怎麼做到的?
神盾推薦——MAB算法應用總結
邏輯回歸如何用于新使用者識别與觸達
此文已由作者授權騰訊雲+社群釋出,原文連結:https://cloud.tencent.com/developer/article/1155587?fromSource=waitui
歡迎大家前往騰訊雲+社群或關注雲加社群微信公衆号(QcloudCommunity),第一時間擷取更多海量技術實踐幹貨哦~
海量技術實踐經驗,盡在雲加社群!
海量技術實踐經驗,盡在雲加社群!
https://cloud.tencent.com/developer