引言
社交媒體發展日益矚目,博客、微博社交網絡等悄然改變着人們的生活方式。微博,微信,包括天貓,京東等用戶日益增多,用戶主動發佈的微博或者評論數量十分可觀。在這個社會化的媒體時代,用戶成爲企業最好的品牌推廣大使。如何從這些可觀的數據中分析出用戶的潛在且準確的購物意願及用戶需求,將成爲提升品牌價值和聲譽,改善用戶體驗的新興途徑。
曾有不少營銷方法來向用戶推送優惠或者打折信息,但準確程度十分低,甚至還出現錯誤推送及分析等。本文將經過數據分析和零售案例來講明中文輿情分析的可行性,基於 Hadoop 平臺的文本分析以及大數據存儲數據庫 DB2 BLU(Big data,Lightening fast,Ultra easy),提升分析的準確度。html
互聯網輿情分析
背景
21 世紀是數據信息大發展的時代,移動互聯、社交網絡、電子商務等極大拓展了互聯網的邊界和應用範圍,各類數據正在迅速膨脹並變大。互聯網(社交、搜索、電商)、移動互聯網(微博)、物聯網(傳感器,智慧地球)、車聯網、GPS、醫學影像、安全監控、金融(銀行、股市、保險)、電信(通話、短信)都在瘋狂產生着數據。社交媒體時代,經過互聯網平臺表達社情民意,體現用戶的意願,評論和態度。從古代的「防民之口甚於防川」,到現在的網絡時代,「人人都有了本身的麥克風」。輿情,就是一個風向標。輿情分析,就是針對民衆態度的收集和整理,發現相關的意見傾向,客觀反映輿情狀態。
海量的數據隱含着巨大的信息。例如亞馬遜上的用戶對某商品的評論,商家能夠根據用戶的評論和反饋爲用戶提供定製性的服務,甚至能夠預測用戶的需求,從而達到更加準確的銷售目的;例如新浪微博上粉絲過萬的大型零售商等,也能夠根據用戶發表的微博,微話題,簽到地點爲用戶定製性的推送優惠及新品信息。這些看似龐大無規則的數據,包含着大量的用戶標籤及潛在的用戶肖像。
存儲與分析中文文本數據也是技術上的關鍵,如何可以存儲並分析海量數據,生成精確的用戶標籤,依賴於數據存儲系統和文本分析系統的技術。本文的數據存儲運用 DB2 BLU Acceleration,利用 DB2 BLU 速度快、與 Cognos 無縫結合的特性來存儲和分析數據。中文文本分析基於 Hadoop 的文本分析平臺,快速進行中文分詞和創建標籤詞典,本文將在後面章節進行具體介紹。
中文微博數據分析邏輯
微博是現代網絡社會溝通的重要工具,以新浪微博爲例,不少大型零售商會創建本身主頁,發佈近期的打折、新品信息。可是,這些信息每每不能針對每一個用戶的喜愛來發布,相似於廣播同樣,每一條微博是否對每一個粉絲(用戶)有意義,須要用戶本身來過濾。
但實際上,粉絲自身發佈的微博含有大量的數據信息,這些信息包含用戶的我的愛好,本身年齡階段,近期的想購買的款式,甚至是本身但願有的款式與功能等。這些數據大多數爲非結構數據。
圖 1. 營銷分析邏輯流程
如圖 1, 顯示了整個營銷分析流程的邏輯。從客戶發佈微博開始, 到商家向用戶發佈商品目錄和優惠信息,整個流程分爲五個步驟:
首先,客戶發佈微博:本文從微博上初步獲取的數據爲「粗數據」,雖然數據雜亂須要分析,可是其中包含不少用戶本身「無心識」的爲本身打上的標籤,這爲後續的語義分析打下了基礎。粗數據中包括相似於:性格、年齡階段、星座、性別、突出喜愛,例如「粉紅控」、「80 後」、「籃球達人」等。掌握這些用戶自定義的標籤後,把這些做爲用戶肖像的一部分。
其次,獲取商家的粉絲:商家的粉絲包括關注商家微博的用戶以及簽到用戶被說起的品牌粉絲等。這些粉絲的發佈的微博便做爲語義處理的輸入。
第三,分析用戶的微博:將用戶的微博進行語義分析。基於 Hadoop 的文本分析平臺將對中文進行分詞,分詞後將與字典進行比較和分類,而後對比總結出該用戶的興趣愛好所在,做爲用戶的一個標籤,同時做爲客戶肖像的一部分。例如,一個用戶的微博中常常提到相似於籃球、足球等運動,那麼「愛運動」就及可能成爲其標籤,做爲客戶肖像的一部分。
第四,指定相關營銷策略:客戶肖像制定後,存入數據庫,並根據微博內容實時或定時更新客戶肖像,根據客戶的肖像,向用戶推送相應的商品打折、優惠、最新上架產品信息。例如,用戶的愛好中包括「運動」,並在微博中提到某品牌的運動鞋,那麼能夠向該用戶推送該運動品牌的打折優惠信息或優惠券。
最後,消費者即可使用消費券或根據打折信息購買相關產品。這樣向用戶推送的促銷信息會更加符合用戶近期的購買意願和用戶的個性特徵,能夠作到爲每一個用戶個性定製的營銷方案,使推送更有效。下面,本文將針對整個系統的各個平臺進行介紹。
方案架構
整個系統架構如圖 2 所示,主要由文本分析系統、DB2 BLU 數據庫以及 Cognos 數據分析工具組成。首先從互聯網上獲取數據之後,將原始數據送入文本分析平臺進行分析,主要作中文分詞、情感分析等工做;而後將文本分析結果整合後輸出送入 DB2 BLU 數據庫中,進行存儲、建表,建表包括客戶肖像表、商品目錄表、促銷策略表等;最後,利用 DB2 BLU 與 Cognos 無縫集成的優點,用 Cognos 對數據進行分析。根據 Cognos 分析出的結果,生成促銷的報表,繼而將優惠信息分別推送給每一個用戶。
圖 2. 方案架構
在整個方案架構中,文本分析平臺是輿情分析的核心。語義分析常見有兩種思路,一種是基於句法結構,採用逐條使用規則的形式驅動語義解釋,這種思路適用於以解決語言的綜合語法爲目標的研究;還有一種思路就是部分或徹底拋開語法,直接從句子自己生成語義系統,或者以句法分析的結果做爲語義分析的輸入,這種思路在解決一些特定領域的問題有較大優點。本文的基於 Hadoop 文本分析平臺就是採用第二種思路來設計的。語義分析的方法能夠基於語法、知識、統計,還包括天然標籤。基於天然標籤的方法即利用網絡數據來進行語義分析。本文的文本分析平臺即爲基於天然便籤的中文輿情分析平臺。基於 Hadoop 平臺的中文文本分析系統能夠有效的對中文進行分詞、情感分析以及字典匹配。
數據的獲取
文本分析的數據來源十分重要,網絡上的數據,大可能是非結構性數據,對這些非結構性數據在獲取的過程當中或文本分析前進行預處理或預分析能夠爲下一步的文本分析帶來較大的優點和便利。本文用 python 腳本提取微博用戶的數據,將用戶的名稱、ID、性別、標籤、地點等提取出來。代碼清單以下:
清單 1. 提取微博用戶信息代碼python
print "開始獲取粉絲 ID" fansurl = "https://api.weibo.com/2/{0}.json?access_token={1}&{2}={3}&{4}={5}&{6}={7}".format(fansmethod,access_token,'screen_name','大都會','count',2000,'cursor',1) fansurlfile = urllib2.urlopen(fansurl) fansuid = fansurlfile.read() fansidlist = eval(fansuid)['ids'] print "獲取粉絲 ID 成功" false = False null = None true = True print "開始寫入粉絲用戶信息" outputfile = open("wbuserprofile.xml","w") for id in fansidlist: outputfile.write("<user>\n\t<id>"+str(id)+"</id>\n") print "寫入 uid{}".format(id) try: profile = urllib2.urlopen("https://api.weibo.com/2/{0}.json?access_token={1}&{2}={3}&{4}={5}&{6}={7}".format(userprofmethod,access_token,"uid",id,'','','','')).read() outputfile.writelines("\t<screen_name>"+eval(profile["screen_name"]+"</screen_name>\n") print "寫入 uid{} 微博名稱完成".format(id) outputfile.writelines("\t<location>"+eval(profile)["location"]+"</location>\n") print "寫入 uid{} 微博地點完成".format(id) outputfile.writelines("\t<gender>"+eval(profile)["gender"]+"</gander>\n") print "寫入 uid{} 微博性別完成".format(id) tags = urllib2.urlopen("https://api.weibo.com/2/{0}.json?access_token={1}&{2}={3}&{4}={5}&{6}={7}".format(tagsmethod,access_token,"uid",id,'','','','')).read() print "開始寫入 uid{} 標籤".format(id) outputfile.writelines("\t<tags>\n") for tag in eval(tags): for key in tag.keys(): if key.isdigit(): outputfile.writelines("\t"+tag[key]+"\n") outputfile.writelines("\t</tags>\n") print "完成寫入 uid{} 標籤".format(id) except: print "鏈接出錯沒法寫入 , 跳過!" outputfile.write("</user>") print "sleep 60 mins" time.sleep(3600) continue outputfile.write("</user>") outputfile.write("\n") outputfile.close() print "完成粉絲用戶信息" print "文件寫入結束"
這段代碼是提取出用戶的肖像 (profile),提取出的結果片斷以下:
清單 2. 微博用戶肖像
2863185903
花開有季 xn
北京 延慶縣
f
星座命理
娛樂
1246347253
傑裏 - 商
北京 房山區
m
搞笑幽默
3265394820
小荷相公丶
重慶
f
2036066523
青春的 Dalin
江西 南昌
f
2013144111
勢必拿下會計證 _ 微微貓
北京 宣武區
f
旅遊
WE
90 後
能夠看到,用戶的 ID、用戶暱稱、地點已經性別和標籤被提取了出來。除了 ID 和用戶名稱之外,其它的項有可能爲空值。特別是標籤 (tag) 項。這裏的標籤是直接從微博中提取的,是由用戶本身認爲本身有的特質,並非通過文本分析獲得的。而當對用戶發佈的微博內容進行文本分析之後獲得的用戶標籤,將與這部分「原始標籤」相結合,共同構成最終用戶肖像的一部分。
獲取用戶微博內容的代碼部分與清單 1 中的代碼相似,因此這裏再也不贅述分析。微博內容獲取後將送入文本分析平臺進行分析, 以下圖所示:
圖 3. 獲取的用戶微博內容
因而可知,本文的數據源的獲取和預處理分爲兩個部分,一部分做爲用戶「原始肖像」(其中包括用戶的 ID、性別、「原始標籤」、地點等),另外一部分爲用戶的微博內容,這一部分將做爲輸入進行 Hadoop 平臺上的文本分析。基於 Hadoop 平臺的文本分析核心做爲一個應用部署在 BigInsight 上面,每次只需運行這個應用,就能夠獲得文本分析的結果,操做十分簡單。基於 Hadoop 平臺的文本分析爲本文的技術核心,下面一節,就對這一部分技術進行描述。
基於 Hadoop 平臺的文本分析
基於 Hadoop 平臺的文本分析,在幾年以前就有過相關的研究,在 BigInsights-- 基於 Hadoop 的數據分析平臺這篇文章中,介紹了 IBM BigInsights 這個基於 Hadoop 的數據分析平臺,這篇文章是利用 BigSheets 來進行大數據分析的功能。在本文中,利用 BigInsights 部署 Hadoop 及其組件,將基於 Hadoop 平臺的中文的文本分析系統部署在 BigInsights 上。如何實現 Hadoop 的部署與管理能夠參看相關的參考文獻以及 IBM BigInsights 產品的相關介紹。
在部署結束以後,在服務器端用 ./start.sh 啓動 BigInsights,以下圖所示:
圖 4. 啓動 BigInsights
爲了更方便的管理 Hadoop 組件,運行及管理各個應用,BigInsights 提供一個 Web 圖形界面。啓動 BigInsights 以後,經過 http://< 主節點主機名或 IP>:8080/data/html/index.html#redirect-files 進入 HDFS 界面:
圖 5. BigInsights 查看 input 內容
本文將獲取的微博數據放在相應工程文件的 Input 文件夾下,做爲文本分析程序的輸入。從
圖 5 中能夠看到,輸入的內容是用戶的 ID 加上單純的微博內容。 運行 Application 下的 NER_src2 進行分詞,輸出文件將放在工程文件的相應的 output 文件夾中。git
圖 6. 運行 BigInsights 上的 Application
當 Application History 中顯示的 Process 爲 100% 時候,能夠查看運行的輸出結果:算法
圖 7. 運行後結果
從圖 7 中能夠看到運行分詞的結果。分詞之後咱們看到結果是一個用戶 ID 對應多個分詞。本文在分詞系統裏指定應用須要的分詞長度。在本文中,咱們指定的是 2~6 箇中文字符。分詞系統會根據詞彙庫根據分詞規則將 2 到 6 個字關鍵詞提取,這裏的關鍵詞提取出來的有幾個種類的詞:第一,一些命名實體的解析,如「喜劇片、電影、籃球鞋」等等;其次,情感詞的分析,例如「喜歡、贊、討厭」等等。因爲文本分析的目的是向用戶推送相關產品信息,用戶也取自某商場的微博粉絲,因此更加關注對某類商品有 Positive 情感傾向的用戶。
在 BigInsights 中分析好的用戶數據能夠直接導入 DB2 數據庫中,只要配置好 Database Export 這個 Application 將要導出到的數據庫的 IP 以及端口號便可。數據庫
圖 8. 從 BigInsights 中將結果導入 DB2 BLU
當導出完成後,能夠到 DB2 BLU 的數據庫中查看結果:json
圖 9. DB2 BLU 中結果表示意圖
如圖 9 所示,這是導入結果的初步分析表,這張表裏的三列 UID,Token( 分詞結果 ),還有 Category( 分詞字典匹配分類 )。其中 Category 這一列是根據文本分析系統裏的字典匹配,將分詞的結果與咱們所創建的商品類別字典匹配而獲得的結果。在這張表裏只顯示了前十行,這十行都屬於同一個用戶 ID。在這個 ID 爲 2492048764 的用戶的微博裏所提到的詞語中能夠發現他 / 她所關注的商品類別。對這個類別進行統計,能夠獲得用戶的 profile 表,圖 10 所示:api
圖 10. USER_PROFILE 表示意圖:
從圖 10 能夠看到,每一個用戶對不一樣類別的商品關注度不一樣。後續,咱們能夠根據這些不一樣以及用戶的標籤來分析用戶對某類商品的購買意願,從而向其推送商品折扣信息。這樣,咱們就能夠將 DB2 BLU 中的用戶信息表等無縫集成 Cognos,進行數據的展現和分析。這就是整個文本分析平臺的操做流程。下面將對其中的文本分析作詳細的闡述。緩存
圖 11. 基於 Hadoop 平臺的文本分析
如圖 11 所示,爲基於 Hadoop 平臺的文本分析架構圖,整個架構主要由三部分組成:引擎部分:用戶發佈的微博中獲取的數據生成文本格式送入文本分析引擎,在輸入以前,因爲客戶的 ID、性別、地點已經提取出來,能夠做爲客戶肖像的一部分,但並不送入文本分析系統。引擎部分主要處理中文分詞、將分詞與詞彙庫中的字典進行匹配、分類。分詞的做用主要將動詞,以及動詞後的名詞分開,情感詞,以及表達情感的對象分開等。詞彙庫部分,主要負責存儲客戶合做模型的詞彙詞典,這一部分的詞典部分有手工添加,部分由系統根據詞彙庫聚類生成,詞彙庫存於 HBase 上;最後是負責輸入輸出文本的部分,這一部分利用 JAQL 來拼接「原始標籤」與分詞後的標籤,一塊兒構成客戶肖像表。安全
圖 12. 語義分析流程
引擎中文語義分析的流程如圖 12 所示。語義分析的目的是產生用戶肖像中最重要的部分 - 用戶標籤,例如「喜歡運動」、「愛時尚」等,這些用戶標籤是商家向用戶推送商品信息的重要依據。對於語義分析分紅兩步,詞法分析和高級文本分析。第一部分爲詞法分析,主要進行分詞、匹配字典等。系統字典主要是由手動設置和詞語聚類生成的。情感分析模塊主要針對文本中表達情感的詞語進行分析,例如「喜歡」、「通常」、一些表示確定或否認的詞語來進行關鍵字匹配與規則匹配。情感詞的分析有助於商家找出商品潛在的缺陷和用戶的使用反饋,針對未購買的用戶,用戶發佈的針對產品的情感詞,有助於商家獲取用戶需求,因此情感詞的分析對輿情分析來講,十分重要。情感詞分詞的效果如圖 13 所示(某冰箱品牌用戶評論分詞):服務器
圖 13. 文本分析平臺分詞效果圖
字典,在本系統中的分析及爲重要,以人工字典爲例,圖 14 代表了分詞後與字典匹配構成的用戶標籤的示意圖。從某用戶的微博內容中提取的高頻詞彙如「籃球」、「NBA 球迷」、「球鞋」等,該用戶在運動類詞彙中屢次提到球鞋、以及某品牌的籃球鞋子等,這些詞語將人工標記爲字典中「喜好籃球」(範圍能夠擴大爲喜好運動),情感分析模塊將會根據描述這些詞語時候所運用的情感詞,來標記爲喜愛或者厭惡,或者「通常」。這裏情感分析直接給出結果爲「喜歡」。那麼結合字典中的「籃球」關鍵字,就會爲用戶打上其中一個標籤「喜好籃球運動」,Nike 商家能夠根據用戶的這樣一個喜愛來推送相關的優惠信息。
圖 14. 分析示例
更進一步的,在這個語義分析的系統裏,咱們還能夠作到,更細節的匹配與分析,例如,在這裏,用戶提到定製球鞋,一些商家能夠提供定製籃球鞋服務能夠推送給該用戶,這樣準確度比直接推送籃球運動產品優惠會更加精確。
因爲用戶的微博數據是實時更新的,那麼客戶的肖像也能夠是實時更新的。這樣,商家推送的內容纔會更加準確。在語義分析系統裏,字典的更新速度相對要緩慢一些,由於字典是人工標記或者聚類分析而生成,相對比較穩定,能夠定時更新。
IBM Cognos Dynamic Cube 無縫集成 DB2 BLU 提供迅捷的分析與查詢
本文用於存儲客戶肖像的爲 DB2 BLU Acceleration。BLU Acceleration 的架構以下圖所示:
圖 15. BLU Acceleration 架構
使用 DB2 BLU 的目的是由於其七大性能優點:
1. 列式存儲減小 I/O,基於列的高度壓縮:列式存儲只讀取須要的數據列,這樣能夠減小 I/O,並基於列的高度進行數據壓縮。
2. 基於壓縮數據進行操做,應用字典壓縮技術並採用近霍夫曼編碼:這樣,絕大部分的 SQL 都會基於壓縮數據進行,極大的減少內存的使用。
3. 採用數據跨越技術加快搜索速度:數據跨越技術會自動檢測並跳過不符合條件的數據區域,當數據有序或呈稀疏狀時,能夠顯著的減小 I/O,並對用戶透明,無需 DBA 的操做。
4. 多核高並行技術,全部 SQL 都採用並行運算模式:全部的 SQL 操做都採用並行的運算模式,有效的利用 CPU 寄存器,避免並行干涉。
5. 單指令多數據技術,加快數據的處理速度:CUP SIMD 技術採起矢量處理模式,高效利用 CUP,得到更高級別的數據操做並行度。
6. 針對列存儲的預取算法,緩存跟多數據:高效的利用內存 Buffer Pool,緩存更多的數據,有效減小 I/O。
7. 對用戶更簡潔,只需加載、運行便可:用戶無需進行數據庫調優操做,無需索引、MQT 等,對外沿用已有的 SQL 接口。
因爲 DB2 BLU 的七大優點,使數據庫操做更快、更簡、存儲更省。DB2 無縫集成 Cognos,本文的系統中使用 DB2 BLU 存儲客戶肖像、商家品牌樣本數據、簽到分析數據等,鏈接到 Cognos Server 上進行查詢並進行實時分析,使操做更快。
如圖 16 所示的三張圖表,分別爲某大型商場的消費者喜愛分佈餅圖、兒童用品的關注趨勢柱狀圖(包括北京昌平、豐臺以及海淀區)、客戶肖像表。
圖 16. Cognos 展現推送圖示
從 Cognos 展現的數據中能夠看到,在北京幾個地區的分佈中,其中海淀區(柱狀圖中的黃色區域)的用戶對兒童用品的關注度相對更高,那麼在海淀地區的零售商或者零售商分店能夠增長兒童用品的進貨量或者在商場裏增長兒童用品的分佈等等措施;針對個別用戶,客戶肖像表格裏最後一列爲分析出來每一個用戶最關注的商品類型,商家能夠根據用戶關注最密切的商品類型,向用戶推送優惠信息。
分析的流程從客戶喜愛開始,從總體喜愛到某類商品的用戶羣喜愛分析,再到針對每個用戶的分析。能夠從時間、地點、年齡段等不一樣角度來了解用戶羣的分佈、客戶要求的集中程度等。客戶針對某一類產品有需求或很是感興趣的時候,商家便可推送優惠券和優惠信息給該用戶。這種營銷方式因爲通過輿情分析,比廣播式的推送準確度要高不少,用戶的接受程度也高不少。將來,這種基於輿情分析的營銷方式也會普遍被運用。
結束語
本文介紹了基於大數據的中文輿情分析系統,採用基於 Hadoop 平臺的文本分析,以及 IBM Cognos 無縫集成 DB2 BLU 加速器的優化分析能力,提供快速的查詢和分析功能。整個系統針對互聯網大量的數據進行處理、文本分析,通過分析爲客戶定製肖像,商家能夠根據肖像來向客戶推送客戶須要的優惠信息。通過樣本數據測試,推送給用戶的信息,與用戶的天然標籤(用戶本身爲本身設定的)對應性很高。在實時性、大量重複詞彙的處理上面,因爲中文語義分析的侷限性,還有待優化和提升。
轉自http://www.ibm.com/developerworks/cn/data/library/bd-1404optionanalysis/index.html