互聯(lián)網(wǎng)時代的社會語言學(xué):基于SNS的文本數(shù)據(jù)挖掘

互聯(lián)網(wǎng)時代的社會語言學(xué):基于SNS的文本數(shù)據(jù)挖掘

永昌ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

今年上半年,我在人人網(wǎng)實習(xí)了一段時間,期間得到了很多寶貴的數(shù)據(jù),并做了一些還算有意義的事情,在這里和大家一塊兒分享。感謝人人網(wǎng)提供的數(shù)據(jù)與工作環(huán)境,感謝趙繼承博士、詹衛(wèi)東老師的支持和建議。在這項工作中,我得到了很多與眾人交流的機會,特別感謝 OpenParty 、 TEDxBeijing 提供的平臺。本文已發(fā)表在了《程序員》雜志,分上下兩部分刊于 2012 年 7 月刊和 8 月刊,在此感謝盧鶇翔編輯的辛勤工作。由于眾所周知的原因,《程序員》刊出的文章被和諧過(看到后面大家就自動地知道被和諧的內(nèi)容是什么了),因而我決定把完整版發(fā)在 Blog 上,同時與更多的人一同分享。對此感興趣的朋友可以給我發(fā)郵件繼續(xù)交流。好了,開始說正文吧。

數(shù)據(jù)挖掘

作為中文系應(yīng)用語言學(xué)專業(yè)的學(xué)生以及一名數(shù)學(xué) Geek ,我非常熱衷于用計算的方法去分析漢語資料。漢語是一種獨特而神奇的語言。對漢語資料進行自然語言處理時,我們會遇到很多其他語言不會有的困難,比如分詞——漢語的詞與詞之間沒有空格,那計算機怎么才知道,“已結(jié)婚的和尚未結(jié)婚的青年都要實行計劃生育”究竟說的是“已/結(jié)婚/的/和/尚未/結(jié)婚/的/青年”,還是“已/結(jié)婚/的/和尚/未/結(jié)婚/的/青年”呢?這就是所謂的分詞歧義難題。不過,現(xiàn)在很多語言模型已經(jīng)能比較漂亮地解決這一問題了。但在中文分詞領(lǐng)域里,還有一個比分詞歧義更令人頭疼的東西——未登錄詞。中文沒有首字母大寫,專名號也被取消了,這叫計算機如何辨認(rèn)人名地名之類的東西?更慘的則是機構(gòu)名、品牌名、專業(yè)名詞、縮略語、網(wǎng)絡(luò)新詞等等,它們的產(chǎn)生機制似乎完全無規(guī)律可尋。最近十年來,中文分詞領(lǐng)域都在集中攻克這一難關(guān)。自動發(fā)現(xiàn)新詞成為了關(guān)鍵的環(huán)節(jié)。

技術(shù)向:數(shù)據(jù)挖掘-分詞入門

數(shù)據(jù)處理-分詞技術(shù)

挖掘新詞的傳統(tǒng)方法是,先對文本進行分詞,然后猜測未能成功匹配的剩余片段就是新詞。這似乎陷入了一個怪圈:分詞的準(zhǔn)確性本身就依賴于詞庫的完整性,如果詞庫中根本沒有新詞,我們又怎么能信任分詞結(jié)果呢?此時,一種大膽的想法是,首先不依賴于任何已有的詞庫,僅僅根據(jù)詞的共同特征,將一段大規(guī)模語料中可能成詞的文本片段全部提取出來,不管它是新詞還是舊詞。然后,再把所有抽出來的詞和已有詞庫進行比較,不就能找出新詞了嗎?有了抽詞算法后,我們還能以詞為單位做更多有趣的數(shù)據(jù)挖掘工作。這里,我所選用的語料是人人網(wǎng) 2011 年 12 月前半個月部分用戶的狀態(tài)。非常感謝人人網(wǎng)提供這份極具價值的網(wǎng)絡(luò)語料。

要想從一段文本中抽出詞來,我們的第一個問題就是,怎樣的文本片段才算一個詞?大家想到的第一個標(biāo)準(zhǔn)或許是,看這個文本片段出現(xiàn)的次數(shù)是否足夠多。我們可以把所有出現(xiàn)頻數(shù)超過某個閾值的片段提取出來,作為該語料中的詞匯輸出。不過,光是出現(xiàn)頻數(shù)高還不夠,一個經(jīng)常出現(xiàn)的文本片段有可能不是一個詞,而是多個詞構(gòu)成的詞組。在人人網(wǎng)用戶狀態(tài)中,“的電影”出現(xiàn)了 389 次,“電影院”只出現(xiàn)了 175 次,然而我們卻更傾向于把“電影院”當(dāng)作一個詞,因為直覺上看,“電影”和“院”凝固得更緊一些。

為了證明“電影院”一詞的內(nèi)部凝固程度確實很高,我們可以計算一下,如果“電影”和“院”真的是各自獨立地在文本中隨機出現(xiàn),它倆正好拼到一起的概率會有多小。在整個 2400 萬字的數(shù)據(jù)中,“電影”一共出現(xiàn)了 2774 次,出現(xiàn)的概率約為 0.000113 。“院”字則出現(xiàn)了 4797 次,出現(xiàn)的概率約為 0.0001969 。如果兩者之間真的毫無關(guān)系,它們恰好拼在了一起的概率就應(yīng)該是 0.000113 × 0.0001969 ,約為 2.223 × 10-8 次方。但事實上,“電影院”在語料中一共出現(xiàn)了 175 次,出現(xiàn)概率約為 7.183 × 10-6 次方,是預(yù)測值的 300 多倍。類似地,統(tǒng)計可得“的”字的出現(xiàn)概率約為 0.0166 ,因而“的”和“電影”隨機組合到了一起的理論概率值為 0.0166 × 0.000113 ,約為 1.875 × 10-6 ,這與“的電影”出現(xiàn)的真實概率很接近——真實概率約為 1.6 × 10-5 次方,是預(yù)測值的 8.5 倍。計算結(jié)果表明,“電影院”更可能是一個有意義的搭配,而“的電影”則更像是“的”和“電影”這兩個成分偶然拼到一起的。

當(dāng)然,作為一個無知識庫的抽詞程序,我們并不知道“電影院”是“電影”加“院”得來的,也并不知道“的電影”是“的”加上“電影”得來的。錯誤的切分方法會過高地估計該片段的凝合程度。如果我們把“電影院”看作是“電”加“影院”所得,由此得到的凝合程度會更高一些。因此,為了算出一個文本片段的凝合程度,我們需要枚舉它的凝合方式——這個文本片段是由哪兩部分組合而來的。令 p(x) 為文本片段 x 在整個語料中出現(xiàn)的概率,那么我們定義“電影院”的凝合程度就是 p(電影院) 與 p(電) · p(影院) 比值和 p(電影院) 與 p(電影) · p(院) 的比值中的較小值,“的電影”的凝合程度則是 p(的電影) 分別除以 p(的) · p(電影) 和 p(的電) · p(影) 所得的商的較小值。

可以想到,凝合程度最高的文本片段就是諸如“蝙蝠”、“蜘蛛”、“彷徨”、“忐忑”、“玫瑰”之類的詞了,這些詞里的每一個字幾乎總是會和另一個字同時出現(xiàn),從不在其他場合中使用。

光看文本片段內(nèi)部的凝合程度還不夠,我們還需要從整體來看它在外部的表現(xiàn)??紤]“被子”和“輩子”這兩個片段。我們可以說“買被子”、“蓋被子”、“進被子”、“好被子”、“這被子”等等,在“被子”前面加各種字;但“輩子”的用法卻非常固定,除了“一輩子”、“這輩子”、“上輩子”、“下輩子”,基本上“輩子”前面不能加別的字了。“輩子”這個文本片段左邊可以出現(xiàn)的字太有限,以至于直覺上我們可能會認(rèn)為,“輩子”并不單獨成詞,真正成詞的其實是“一輩子”、“這輩子”之類的整體??梢?,文本片段的自由運用程度也是判斷它是否成詞的重要標(biāo)準(zhǔn)。如果一個文本片段能夠算作一個詞的話,它應(yīng)該能夠靈活地出現(xiàn)在各種不同的環(huán)境中,具有非常豐富的左鄰字集合和右鄰字集合。

“信息熵”是一個非常神奇的概念,它能夠反映知道一個事件的結(jié)果后平均會給你帶來多大的信息量。如果某個結(jié)果的發(fā)生概率為 p ,當(dāng)你知道它確實發(fā)生了,你得到的信息量就被定義為 – log(p) 。 p 越小,你得到的信息量就越大。如果一顆骰子的六個面分別是 1 、 1 、 1 、 2 、 2 、 3 ,那么你知道了投擲的結(jié)果是 1 時可能并不會那么吃驚,它給你帶來的信息量是 – log(1/2) ,約為 0.693 。知道投擲結(jié)果是 2 ,給你帶來的信息量則是 – log(1/3) ≈ 1.0986 。知道投擲結(jié)果是 3 ,給你帶來的信息量則有 – log(1/6) ≈ 1.79 。但是,你只有 1/2 的機會得到 0.693 的信息量,只有 1/3 的機會得到 1.0986 的信息量,只有 1/6 的機會得到 1.79 的信息量,因而平均情況下你會得到 0.693/2 + 1.0986/3 + 1.79/6 ≈ 1.0114 的信息量。這個 1.0114 就是那顆骰子的信息熵。現(xiàn)在,假如某顆骰子有 100 個面,其中 99 個面都是 1 ,只有一個面上寫的 2 。知道骰子的拋擲結(jié)果是 2 會給你帶來一個巨大無比的信息量,它等于 – log(1/100) ,約為 4.605 ;但你只有百分之一的概率獲取到這么大的信息量,其他情況下你只能得到 – log(99/100) ≈ 0.01005 的信息量。平均情況下,你只能獲得 0.056 的信息量,這就是這顆骰子的信息熵。再考慮一個最極端的情況:如果一顆骰子的六個面都是 1 ,投擲它不會給你帶來任何信息,它的信息熵為 – log(1) = 0 。什么時候信息熵會更大呢?換句話說,發(fā)生了怎樣的事件之后,你最想問一下它的結(jié)果如何?直覺上看,當(dāng)然就是那些結(jié)果最不確定的事件。沒錯,信息熵直觀地反映了一個事件的結(jié)果有多么的隨機。

我們用信息熵來衡量一個文本片段的左鄰字集合和右鄰字集合有多隨機??紤]這么一句話“吃葡萄不吐葡萄皮不吃葡萄倒吐葡萄皮”,“葡萄”一詞出現(xiàn)了四次,其中左鄰字分別為 {吃, 吐, 吃, 吐} ,右鄰字分別為 {不, 皮, 倒, 皮} 。根據(jù)公式,“葡萄”一詞的左鄰字的信息熵為 – (1/2) · log(1/2) – (1/2) · log(1/2) ≈ 0.693 ,它的右鄰字的信息熵則為 – (1/2) · log(1/2) – (1/4) · log(1/4) – (1/4) · log(1/4) ≈ 1.04 ??梢姡谶@個句子中,“葡萄”一詞的右鄰字更加豐富一些。

在人人網(wǎng)用戶狀態(tài)中,“被子”一詞一共出現(xiàn)了 956 次,“輩子”一詞一共出現(xiàn)了 2330 次,兩者的右鄰字集合的信息熵分別為 3.87404 和 4.11644 ,數(shù)值上非常接近。但“被子”的左鄰字用例非常豐富:用得最多的是“曬被子”,它一共出現(xiàn)了 162 次;其次是“的被子”,出現(xiàn)了 85 次;接下來分別是“條被子”、“在被子”、“床被子”,分別出現(xiàn)了 69 次、 64 次和 52 次;當(dāng)然,還有“疊被子”、“蓋被子”、“加被子”、“新被子”、“掀被子”、“收被子”、“薄被子”、“踢被子”、“搶被子”等 100 多種不同的用法構(gòu)成的長尾??所有左鄰字的信息熵為 3.67453 。但“輩子”的左鄰字就很可憐了, 2330 個“輩子”中有 1276 個是“一輩子”,有 596 個“這輩子”,有 235 個“下輩子”,有 149 個“上輩子”,有 32 個“半輩子”,有 10 個“八輩子”,有 7 個“幾輩子”,有 6 個“哪輩子”,以及“n 輩子”、“兩輩子”等 13 種更罕見的用法。所有左鄰字的信息熵僅為 1.25963 。因而,“輩子”能否成詞,明顯就有爭議了。“下子”則是更典型的例子, 310 個“下子”的用例中有 294 個出自“一下子”, 5 個出自“兩下子”, 5 個出自“這下子”,其余的都是只出現(xiàn)過一次的罕見用法。事實上,“下子”的左鄰字信息熵僅為 0.294421 ,我們不應(yīng)該把它看作一個能靈活運用的詞。當(dāng)然,一些文本片段的左鄰字沒啥問題,右鄰字用例卻非常貧乏,例如“交響”、“后遺”、“鵝卵”等,把它們看作單獨的詞似乎也不太合適。我們不妨就把一個文本片段的自由運用程度定義為它的左鄰字信息熵和右鄰字信息熵中的較小值。

在實際運用中你會發(fā)現(xiàn),文本片段的凝固程度和自由程度,兩種判斷標(biāo)準(zhǔn)缺一不可。只看凝固程度的話,程序會找出“巧克”、“俄羅”、“顏六色”、“柴可夫”等實際上是“半個詞”的片段;只看自由程度的話,程序則會把“吃了一頓”、“看了一遍”、“睡了一晚”、“去了一趟”中的“了一”提取出來,因為它的左右鄰字都太豐富了。

我們把文本中出現(xiàn)過的所有長度不超過 d 的子串都當(dāng)作潛在的詞(即候選詞,其中 d 為自己設(shè)定的候選詞長度上限,我設(shè)定的值為 5 ),再為出現(xiàn)頻數(shù)、凝固程度和自由程度各設(shè)定一個閾值,然后只需要提取出所有滿足閾值要求的候選詞即可。為了提高效率,我們可以把語料全文視作一整個字符串,并對該字符串的所有后綴按字典序排序。下表就是對“四是四十是十十四是十四四十是四十”的所有后綴進行排序后的結(jié)果。實際上我們只需要在內(nèi)存中存儲這些后綴的前 d + 1 個字,或者更好地,只儲存它們在語料中的起始位置。

十十四是十四四十是四十

十是十十四是十四四十是四十

十是四十

十四是十四四十是四十

十四四十是四十

是十十四是十四四十是四十

是十四四十是四十

是四十

是四十是十十四是十四四十是四十

四十

四十是十十四是十四四十是四十

四十是四十

四是十四四十是四十

四是四十是十十四是十四四十是四十

四四十是四十

這樣的話,相同的候選詞便都集中在了一起,從頭到尾掃描一遍便能算出各個候選詞的頻數(shù)和右鄰字信息熵。將整個語料逆序后重新排列所有的后綴,再掃描一遍后便能統(tǒng)計出每個候選詞的左鄰字信息熵。另外,有了頻數(shù)信息后,凝固程度也都很好計算了。這樣,我們便得到了一個無需任何知識庫的抽詞算法,輸入一段充分長的文本,這個算法能以大致 O(n · logn) 的效率提取出可能的詞來。

對不同的語料進行抽詞,并且按這些詞的頻數(shù)從高到低排序。你會發(fā)現(xiàn),不同文本的用詞特征是非常明顯的。下面是對《西游記》上冊的抽詞結(jié)果:

行者、師父、三藏、八戒、大圣、菩薩、悟空、怎么、和尚、唐僧、老孫、潰骸、什么、沙僧、太宗、徒弟、袈裟、妖精、玉帝、今日、兄弟、公主、玄奘、陛下、寶貝、性命、曉得、門外、妖魔、光蕊、觀音、花果山、土地、木叉、東土、變化、變做、伯欽、判官、多少、真君、齊天大圣、蟠桃、丞相、魏征、扯住、潰骸澳、抬頭、揭諦、言語、豬八戒、兵器、吩咐、安排、叩頭、清風(fēng)、哪吒、左右、美猴王、釘鈀、孩兒、女婿、金箍棒、二郎、東西、許多、奈何、人參果、收拾、近前、太保、明月、南海、水簾洞、門首、弼馬溫、李天王??

《資本論》全文:

商品、形式、貨幣、我們、過程、自己、機器、社會、部分、表現(xiàn)、沒有、流通、需要、增加、已經(jīng)、交換、關(guān)系、先令、積累、必須、英國、條件、發(fā)展、麻布、兒童、進行、提高、消費、減少、任何、手段、職能、土地、特殊、實際、完全、平均、直接、隨著、簡單、規(guī)律、市場、增長、上衣、決定、什么、制度、最后、支付、許多、雖然、棉紗、形態(tài)、棉花、法律、絕對、提供、擴大、獨立、世紀(jì)、性質(zhì)、假定、每天、包含、物質(zhì)、家庭、規(guī)模、考察、剝削、經(jīng)濟學(xué)、甚至、延長、財富、紡紗、購買、開始、代替、便士、怎樣、降低、能夠、原料、等價物??

《圣經(jīng)》全文:

以色列、沒有、自己、一切、面前、大衛(wèi)、知道、什么、猶大、祭司、摩西、看見、百姓、吩咐、埃及、聽見、弟兄、告訴、基督、已經(jīng)、先知、掃羅、父親、雅各、永遠、攻擊、智慧、榮耀、臨到、潔凈、離開、怎樣、平安、律法、支派、許多、門徒、打發(fā)、好像、仇敵、原文作、名叫、巴比倫、今日、首領(lǐng)、曠野、所羅門、約瑟、兩個、燔祭、法老、衣服、脫離、二十、公義、審判、十二、亞伯拉罕、石頭、聚集、按著、禱告、罪孽、約書亞、事奉、指著、城邑、進入、彼此、建造、保羅、應(yīng)當(dāng)、摩押、圣靈、懼怕、應(yīng)許、如今、幫助、牲畜??

《時間簡史》全文:

黑洞、必須、非常、任何、膨脹、科學(xué)、預(yù)言、太陽、觀察、定律、運動、事件、奇點、坍縮、問題、模型、方向、區(qū)域、知道、開始、輻射、部分、牛頓、產(chǎn)生、夸克、無限、軌道、解釋、邊界、甚至、自己、類似、描述、最終、旋轉(zhuǎn)、愛因斯坦、繞著、什么、效應(yīng)、表明、溫度、研究、收縮、吸引、按照、完全、增加、開端、基本、計算、結(jié)構(gòu)、上帝、進行、已經(jīng)、發(fā)展、幾乎、仍然、足夠、影響、初始、科學(xué)家、事件視界、第二、改變、歷史、世界、包含、準(zhǔn)確、證明、導(dǎo)致、需要、應(yīng)該、至少、剛好、提供、通過、似乎、繼續(xù)、實驗、復(fù)雜、伽利略??

哦,對了,還有我最喜歡的,《人民日報》 2000 年 4 月新聞版的抽詞結(jié)果:

發(fā)展、我們、經(jīng)濟、主席、江澤民、領(lǐng)導(dǎo)、建設(shè)、關(guān)系、教育、干部、企業(yè)、問題、主義、政治、群眾、改革、政府、思想、加強、臺灣、地區(qū)、北京、總統(tǒng)、世界、記者、代表、民族、組織、歷史、訪問、原則、努力、管理、今天、技術(shù)、市場、世紀(jì)、堅持、社會主義、財政、江澤民主席、增長、積極、精神、同志、雙方、自己、友好、領(lǐng)導(dǎo)干部、進一步、基礎(chǔ)、提高、必須、不斷、制度、政策、解決、取得、表示、活動、支持、通過、研究、沒有、學(xué)習(xí)、穩(wěn)定、舉行、歡迎、農(nóng)村、生活、促進、科技、投資、科學(xué)、環(huán)境、領(lǐng)域、公司、情況、充分??

當(dāng)然,我也沒有忘記對人人網(wǎng)用戶狀態(tài)進行分析——人人網(wǎng)用戶狀態(tài)中最常出現(xiàn)的詞是:

哈哈、什么、今天、怎么、現(xiàn)在、可以、知道、喜歡、終于、這樣、覺得、因為、如果、感覺、開始、回家、考試、老師、幸福、朋友、時間、發(fā)現(xiàn)、東西、快樂、為什么、睡覺、生活、已經(jīng)、希望、最后、各種、狀態(tài)、世界、突然、手機、其實、那些、同學(xué)、孩子、尼瑪、木有、然后、以后、學(xué)校、所以、青年、晚安、原來、電話、加油、果然、學(xué)習(xí)、中國、最近、應(yīng)該、需要、居然、事情、永遠、特別、北京、他媽、傷不起、必須、呵呵、月亮、畢業(yè)、問題、謝謝、英語、生日快樂、工作、雖然、討厭、給力、容易、上課、作業(yè)、今晚、繼續(xù)、努力、有木有、記得??

事實上,程序從人人網(wǎng)的狀態(tài)數(shù)據(jù)中一共抽出了大約 1200 個詞,里面大多數(shù)詞也確實都是標(biāo)準(zhǔn)的現(xiàn)代漢語詞匯。不過別忘了,我們的目標(biāo)是新詞抽取。將所有抽出來的詞與已有詞庫作對比,于是得到了人人網(wǎng)特有的詞匯(同樣按頻數(shù)從高到低排序):

尼瑪、傷不起、給力、有木有、掛科、坑爹、神馬、淡定、老爸、臥槽、牛逼、腫么、苦逼、無語、微博、六級、高數(shù)、選課、悲催、基友、蛋疼、很久、人人網(wǎng)、情何以堪、童鞋、哇咔咔、腦殘、吐槽、猥瑣、奶茶、我勒個去、刷屏、妹紙、胃疼、飄過、考研、弱爆了、太準(zhǔn)了、搞基、忽悠、羨慕嫉妒恨、手賤、柯南、狗血、秒殺、裝逼、真特么、碎覺、奧特曼、內(nèi)牛滿面、斗地主、騰訊、灰常、偶遇、拉拉、屌絲、九把刀、高富帥、阿內(nèi)爾卡、魔獸世界、線代、三國殺、林俊杰、速速、臭美、花癡??

我還想到了更有意思的玩法。為什么不拿每一天狀態(tài)里的詞去和前一天的狀態(tài)作對比,從而提取出這一天里特有的詞呢?這樣一來,我們就能從人人網(wǎng)的用戶狀態(tài)中提取出每日熱點了!從手里的數(shù)據(jù)規(guī)模看,這是完全有可能的。我選了 12 個比較具有代表性的詞,并列出了它們在 2011 年 12 月 13 日的用戶狀態(tài)中出現(xiàn)的頻數(shù)(左列的數(shù)),以及 2011 年 12 月 14 日的用戶狀態(tài)中出現(xiàn)的頻數(shù)(右列的數(shù)):

下雪 33 92
那些年 139 146
李宇春 1 4
看見 145 695
魔獸 23 20
高數(shù) 82 83
生日快樂 235 210
今天 1416 1562
北半球 2 18
脖子 23 69
悲傷 61 33
電磁爐 0 3

大家可以從直覺上迅速判斷出,哪些詞可以算作是 12 月 14 日的熱詞。比方說,“下雪”一詞在 12 月 13 日只出現(xiàn)了 33 次,在 12 月 14 日卻出現(xiàn)了 92 次,后者是前者的 2.8 倍,這不大可能是巧合,初步判斷一定是 12 月 14 日真的有什么地方下雪了。“那些年”在 12 月 14 日的頻數(shù)確實比 12 月 13 日更多,但相差并不大,我們沒有理由認(rèn)為它是當(dāng)日的一個熱詞。

一個問題擺在了我們面前:我們?nèi)绾稳チ炕粋€詞的“當(dāng)日熱度”?第一想法當(dāng)然是簡單地看一看每個詞的當(dāng)日頻數(shù)和昨日頻數(shù)之間的倍數(shù)關(guān)系,不過細(xì)想一下你就發(fā)現(xiàn)問題了:它不能解決樣本過少帶來的偶然性。 12 月 14 日“李宇春”一詞的出現(xiàn)頻數(shù)是 12 月 13 日的 4 倍,這超過了“下雪”一詞的 2.8 倍,但我們卻更愿意相信“李宇春”的現(xiàn)象只是一個偶然。更麻煩的則是“電磁爐”一行, 12 月 14 日的頻數(shù)是 12 月 13 日的無窮多倍,但顯然我們也不能因此就認(rèn)為“電磁爐”是 12 月 14 日最熱的詞。

忽略所有樣本過少的詞?這似乎也不太好,樣本少的詞也有可能真的是熱詞。比如“北半球”一詞,雖然它在兩天里的頻數(shù)都很少,但這個 9 倍的關(guān)系確實不容忽視。事實上,人眼很容易看出哪些詞真的是 12 月 14 日的熱詞:除了“下雪”以外,“看見”、“北半球”和“脖子”也應(yīng)該是熱詞。你或許堅信后三個詞異峰突起的背后一定有什么原因(并且迫切地想知道這個原因究竟是什么),但卻會果斷地把“李宇春”和“電磁爐”這兩個“異常”歸結(jié)為偶然原因。你的直覺是對的—— 2011 年 12 月 14 日發(fā)生了極其壯觀的雙子座流星雨,此乃北半球三大流星雨之一。白天網(wǎng)友們不斷轉(zhuǎn)發(fā)新聞,因而“北半球”一詞熱了起來;晚上網(wǎng)友們不斷發(fā)消息說“看見了”、“又看見了”,“看見”一詞的出現(xiàn)頻數(shù)猛增;最后呢,仰望天空一晚上,脖子終于出毛病了,于是回家路上一個勁兒地發(fā)“脖子難受”。

讓計算機也能聰明地排除偶然因素,這是我們在數(shù)據(jù)挖掘過程中經(jīng)常遇到的問題。我們經(jīng)常需要對樣本過少的項目進行“平滑”操作,以避免分母過小帶來的奇點。這里,我采用的是一個非常容易理解的方法:一個詞的樣本太少,就給這個詞的熱度打折扣。為了便于說明,我們選出四個詞為例來分析。

下表截取了前四個詞,右邊四列分別表示各詞在 12 月 13 日出現(xiàn)的頻數(shù),在 12 月 14 日出現(xiàn)的頻數(shù),在兩天里一共出現(xiàn)的總頻數(shù),以及后一天的頻數(shù)所占的比重。第三列數(shù)字是前兩列數(shù)字之和,第四列數(shù)字則是第二列數(shù)字除以第三列數(shù)字的結(jié)果。最后一列應(yīng)該是一個 0 到 1 之間的數(shù),它表明對應(yīng)的詞有多大概率出現(xiàn)在了 12 月 14 日這一天。最后一列可以看作是各詞的得分。可以看到,此時“下雪”的得分低于“李宇春”,這是我們不希望看到的結(jié)果。“李宇春”的樣本太少,我們想以此為緣由把它的得分拖下去。

下雪 33 92 125 0.736
那些年 139 146 285 0.512
李宇春 1 4 5 0.8
看見 145 695 840 0.827
(平均)     313.75 0.719

怎么做呢?我們把每個詞的得分都和全局平均分取一個加權(quán)平均!首先計算出這四個詞的平均總頻數(shù),為 313.75 ;再計算出這四個詞的平均得分,為 0.719 。接下來,我們假設(shè)已經(jīng)有 313.75 個人預(yù)先給每個詞都打了 0.719 分,換句話說每個詞都已經(jīng)收到了 313.75 次評分,并且所有這 313.75 個評分都是 0.719 分。“下雪”這個詞則還有額外的 125 個人評分,其中每個人都給了 0.736 分。因此,“下雪”一詞的最終得分就是:

下雪 (0.736 × 125 + 0.719 × 313.75) / (125 + 313.75) ≈ 0.724

類似地,其他幾個詞的得分依次為:

那些年 (0.512 × 285 + 0.719 × 313.75) / (285 + 313.75) ≈ 0.62
李宇春 (0.8 × 5 + 0.719 × 313.75) / (5 + 313.75) ≈ 0.7202
看見 (0.827 × 840 + 0.719 × 313.75) / (840 + 313.75) ≈ 0.798

容易看出,此時樣本越大的詞,就越有能力把最終得分拉向自己本來的得分,樣本太小的詞,最終得分將會與全局平均分非常接近。經(jīng)過這么一番調(diào)整,“下雪”一詞的得分便高于了“李宇春”。實際運用中, 313.75 這個數(shù)也可以由你自己來定,定得越高就表明你越在意樣本過少帶來的負(fù)面影響。這種與全局平均取加權(quán)平均的思想叫做 Bayesian average ,從上面的若干式子里很容易看出,它實際上是最常見的平滑處理方法之一——分子分母都加上一個常數(shù)——的一種特殊形式。

利用之前的抽詞程序抽取出人人網(wǎng)每一天內(nèi)用戶狀態(tài)所含的詞,把它們的頻數(shù)都與前一天的作對比,再利用剛才的方法加以平滑,便能得出每一天的熱詞了。我手上的數(shù)據(jù)是人人網(wǎng) 2011 年 12 月上半月的數(shù)據(jù),因此我可以得出從 12 月 2 日到 12 月 15 日的熱詞(選取每日前 5 名,按得分從高到低)。

2011-12-02:第一場雪、北京、金隅、周末、新疆

2011-12-03:荷蘭、葡萄牙、死亡之組、歐洲杯、德國

2011-12-04:那些年、宣傳、期末、男朋友、升旗

2011-12-05:教室、老師、視帝、體育課、質(zhì)量

2011-12-06:喬爾、星期二、攝影、經(jīng)濟、音樂

2011-12-07:陳超、星巴克、優(yōu)秀、童鞋、投票

2011-12-08:曼聯(lián)、曼城、歐聯(lián)杯、皇馬、凍死

2011-12-09:保羅、月全食、交易、火箭、黃蜂

2011-12-10:變身、羅伊、穿越、皇馬、巴薩

2011-12-11:皇馬、巴薩、卡卡、梅西、下半場

2011-12-12:淘寶、阿內(nèi)爾卡、雙十二、申花、老師

2011-12-13:南京、南京大屠殺、勿忘國恥、默哀、警報

2011-12-14:流星雨、許愿、愿望、情人節(jié)、幾顆

2011-12-15:快船、保羅、巴薩、昨晚、龍門飛甲

看來, 12 月 14 日果然有流星雨發(fā)生。

注意,由于我們僅僅對比了相鄰兩天的狀態(tài),因而產(chǎn)生了個別實際上是由工作日/休息日的區(qū)別造成的“熱詞”,比如“教室”、“老師”、“星期二”等。把這樣的詞當(dāng)作熱詞可能并不太妥。結(jié)合上周同日的數(shù)據(jù),或者干脆直接與之前整個一周的數(shù)據(jù)來對比,或許可以部分地解決這一問題。

事實上,有了上述工具,我們可以任意比較兩段不同文本中的用詞特點。更有趣的是,人人網(wǎng)狀態(tài)的大多數(shù)發(fā)布者都填寫了性別和年齡的個人信息,我們?yōu)楹尾话褷顟B(tài)重新分成男性和女性兩組,或者 80 后和 90 后兩組,挖掘出不同屬性的人都愛說什么?要知道,在過去,這樣的問題需要進行大規(guī)模語言統(tǒng)計調(diào)查才能回答!然而,在互聯(lián)網(wǎng)海量用戶生成內(nèi)容的支持下,我們可以輕而易舉地挖掘出答案來。

我真的做了這個工作(基于另一段日期內(nèi)的數(shù)據(jù))。男性愛說的詞有:

兄弟、籃球、男籃、米蘭、曼聯(lián)、足球、蛋疼、皇馬、比賽、國足、超級杯、球迷、中國、老婆、政府、航母、踢球、賽季、股市、砸蛋、牛逼、鐵道部、媳婦、國際、美國、連敗、魔獸、斯內(nèi)德、紅十字、經(jīng)濟、腐敗、程序、郭美美、英雄、民主、鳥巢、米蘭德比、官員、內(nèi)涵、歷史、訓(xùn)練、評級、金融、體育、記者、事故、程序員、媒體、投資、事件、社會、項目、伊布、主義、決賽、操蛋、納尼、領(lǐng)導(dǎo)、喝酒、民族、新聞、言論、和諧、農(nóng)民、體制、城管??

下面則是女性愛說的詞:

一起玩、蛋糕、加好友、老公、嗚嗚、姐姐、嘻嘻、老虎、討厭、媽媽、嗚嗚嗚、啦啦啦、便宜、減肥、男朋友、老娘、逛街、無限、帥哥、禮物、互相、奶茶、委屈、各種、高跟鞋、指甲、城市獵人、閨蜜、巧克力、第二、爸爸、寵物、箱子、吼吼、大黃蜂、獅子、胃疼、玫瑰、包包、裙子、游戲、遇見、嘿嘿、灰常、眼睛、各位、媽咪、化妝、玫瑰花、藍精靈、幸福、陪我玩、任務(wù)、怨念、舍不得、害怕、狗狗、眼淚、溫暖、面膜、收藏、李民浩、神經(jīng)、土豆、零食、痘痘、戒指、巨蟹、曬黑??

下面是 90 后用戶愛用的詞:

加好友、作業(yè)、各種、乖乖、蛋糕、來訪、臥槽、通知書、麻將、聚會、補課、歡樂、刷屏、錄取、無限、互相、速度、一起玩、啦啦啦、晚安、求陪同、基友、美女、矮油、巨蟹、五月天、第二、唱歌、老虎、扣扣、嘖嘖、帥哥、哈哈哈、尼瑪、便宜、苦逼、斯內(nèi)普、寫作業(yè)、勞資、孩紙、哎喲、炎亞綸、箱子、無聊、求來訪、查分、上課、果斷、處女、首映、屏蔽、混蛋、暑假、嚇?biāo)馈⑿聳|方、組隊、下學(xué)期、陪我玩、打雷、妹紙、水瓶、射手、搞基、吐槽、同學(xué)聚會、出去玩、嗚嗚、白羊、表白、做作業(yè)、簽名、姐姐、停機、伏地魔、對象、哈哈、主頁、情侶、無壓力、共同、摩羯、碎覺、腫么辦??

下面則是 80 后用戶愛用的詞:

加班、培訓(xùn)、周末、工作、公司、各位、值班、砸蛋、上班、任務(wù)、公務(wù)員、工資、領(lǐng)導(dǎo)、包包、辦公室、校內(nèi)、郭美美、時尚、企業(yè)、股市、新號碼、英國、常聯(lián)系、實驗室、論文、忙碌、項目、部門、祈福、邀請、招聘、順利、朋友、紅十字、男朋友、媒體、產(chǎn)品、標(biāo)準(zhǔn)、號碼、存錢、牛仔褲、曼聯(lián)、政府、簡單、立秋、事故、伯明翰、博士、辭職、健康、銷售、深圳、奶茶、搬家、實驗、投資、節(jié)日快樂、堅持、規(guī)則、考驗、生活、體制、客戶、發(fā)工資、忽悠、提供、教育、處理、惠存、溝通、團購、缺乏、腐敗、啟程、紅十字會、結(jié)婚、管理、環(huán)境、暴跌、服務(wù)、變形金剛、祝福、銀行??

不僅如此,不少狀態(tài)還帶有地理位置信息,因而我們可以站在空間的維度對信息進行觀察。這個地方的人都愛說些什么?愛說這個詞的人都分布在哪里?借助這些包含地理位置的簽到信息,我們也能挖掘出很多有意思的結(jié)果來。例如,對北京用戶的簽到信息進行抽詞,然后對于每一個抽出來的詞,篩選出所有包含該詞的簽到信息并按地理坐標(biāo)的位置聚類,這樣我們便能找出那些地理分布最集中的詞。結(jié)果非常有趣:“考試”一詞集中分布在海淀眾高校區(qū),“天津”一詞集中出現(xiàn)在北京南站,“逛街”一詞則全都在西單附近扎堆。北京首都國際機場也是一個非常特別的地點,“北京”、“登機”、“終于”、“再見”等詞在這里出現(xiàn)的密度極高。

從全國范圍來看,不同區(qū)域的人也有明顯的用詞區(qū)別。我們可以將全國地圖劃分成網(wǎng)格,統(tǒng)計出所有簽到信息在各個小格內(nèi)出現(xiàn)的頻數(shù),作為標(biāo)準(zhǔn)分布;然后對于每一個抽出來的詞,統(tǒng)計出包含該詞的簽到信息在各個小格內(nèi)出現(xiàn)的頻數(shù),并與標(biāo)準(zhǔn)分布進行對比(可以采用余弦距離等公式),從而找出那些分布最反常的詞。程序運行后發(fā)現(xiàn),這樣的詞還真不少。一些明顯具有南北差異的詞,分布就會與整個背景相差甚遠。例如,在節(jié)假日的時候,“滑雪”一詞主要在北方出現(xiàn),“登山”一詞則主要在南方出現(xiàn)。地方特色也是造成詞語分布差異的一大原因,例如“三里屯”一詞幾乎只在北京出現(xiàn),“熱干面”一詞集中出現(xiàn)在武漢地區(qū),“地鐵”一詞明顯只有個別城市有所涉及。這種由當(dāng)?shù)厝说挠迷~特征反映出來的真實的地方特色,很可能是許多旅游愛好者夢寐以求的信息。另外,方言也會導(dǎo)致用詞分布差異,例如“咋這么”主要分布在北方地區(qū),“搞不懂”主要分布在南方城市,“伐”則非常集中地出現(xiàn)在上海地區(qū)。當(dāng)數(shù)據(jù)規(guī)模足夠大時,或許我們能通過計算的方法,自動對中國的方言區(qū)進行劃分。

其實,不僅僅是發(fā)布時間、用戶年齡、用戶性別、地理位置這四個維度,我們還可以對瀏覽器、用戶職業(yè)、用戶活躍度、用戶行為偏好等各種各樣的維度進行分析,甚至可以綜合考慮以上維度,在某個特定范圍內(nèi)挖掘熱點事件,或者根據(jù)語言習(xí)慣去尋找出某個特定的人群。或許這聽上去太過理想化,不過我堅信,有了合適的算法,這些想法終究會被一一實現(xiàn)。

標(biāo)題名稱:互聯(lián)網(wǎng)時代的社會語言學(xué):基于SNS的文本數(shù)據(jù)挖掘
網(wǎng)站鏈接:http://muchs.cn/article10/sdijdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)商城網(wǎng)站、網(wǎng)站制作品牌網(wǎng)站建設(shè)、用戶體驗、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)