在知乎、微博這種展示個性的平台上,能否通過軟體分析個人的文字、關注、被關注者、關注問題,分析當事人的性格?有具體的設計、實現思路么?

性格分析


這跟我實驗室的研究領域有類似的地方,這樣的需求是一種比較典型的文本挖掘和分析應用,想要實現需要用到自然語言處理(NLP)和數據挖掘一類的技術。

首先我想說的是做文本挖掘和分析並不是那麼想當然的事情,每個準確率高的語言處理系統,背後都有一套嚴謹的理論和方法。

拿前段比較火的,清華開發的「微博關鍵詞」來說,它流行的原因除了美觀的Tag Cloud呈現以外,更多的可能是準確的、有意義的關鍵詞抽取。很多人看到以後下意識地就以為是用詞頻做的,但不知道有人想過沒有,你關鍵詞中最大的那個詞真的頻繁地出現在你的微博里嗎?實際上它可能一次都沒有出現過,但它依然是準確的。

「微博關鍵詞」使用的其實是一種中文到中文的機器翻譯,運用機器翻譯的詞對齊技術,將一些你微博中無意義的詞語比如「文件」、「使命召喚」,映射到「Windows」、「遊戲」這些更適合做關鍵詞的詞上。且不說這項技術本身的複雜性,這種映射關係又是怎麼得到的?也許又會有人下意識的認為用人工去維護一個詞對齊的映射表,事實上就靠實驗室里的幾個研究生根本Cover不了整個微博語言的數據模式。但它依然Cover得很好。因為它又用了另一項技術,通過分析大量的文檔,自動地從中識別出詞與詞之間的映射關係,這本身又是一項比較複雜的技術。這些都搞定了,還有很多細節問題,比如怎樣計算關鍵詞的權重,怎樣判定對齊的關鍵詞是「Windows」還是「微軟」。

所以「微博關鍵詞」做得比其他關鍵詞要好不是沒有原因的,如果簡單詞頻分析,詞義分析就能做出這樣的效果,也許早就有人做出來了。

接下來我說一下知乎、微博上做性格分析的問題。這個問題很大,而我並沒有特別深入這個領域進行研究,所以只是一些比較粗淺的思路。

首先問一個問題,我們人自己在看微博的時候能看出一個人的性格嗎?如果不能,那麼程序也不能,如果很難,那麼程序也很難。當你帶著這個眼光去讀一個人的微博的時候,你就會發現微博是內容為主的,上面主要是大量的轉發、消息和觀點,而性格更多的是體現在交流和行為中的,所以我覺得做微博的挖掘,性格分析並不是一個好的切入點,會很難。但並不是無法可循,我有一點思路。

為了讓事情容易理解,可以把自己想像成一個程序,你去看別人的時候如何去判斷他的性格。通常的情況是,他發布了一條言辭激進的批評社會的微博,於是你覺得這是一個激進的人。問題來了,你怎麼知道言辭激進就代表了一種激進的性格?這在我們看來是十分理所當然的,但對程序來說卻不是的。這其中的差別在哪裡?試想你自己是一個未諳世事的5歲小孩,你再去看這條微博,你還能說出他是一個激進的人嗎?應該就不能了,5歲跟20歲,差別在哪裡,答案是經驗。一個成人見識過很多各種各樣性格的人,一個孩子卻沒有如此豐富的經驗,計算機程序本身就是一個毫無經驗的孩子,我們要做的就是培養它對於人類性格的經驗和認知,而對計算機來說,經驗就是數據。

所以主要工作大致分三部分:數據分析和處理數據準備演算法準備
1)數據分析和處理
既然要讓程序對人類性格形成認知,就需要把微博內容和性格本身用程序能夠識別的結構表示出來。

首先人的性格是多維的,比如激進或保守,樂觀或悲觀等等,你只能從一條微博中得到某個人性格中的一點或幾點甚至什麼都得不到。所以我們可以把「性格」這個概念本身看作一個N維歐幾里得空間,而每個「性格點」就是空間中的一個坐標,我們用性格點評價一個人的性格,評價他發布的每一條內容,這樣就可以用他所有內容的性格點的幾何中心來表示他的性格。比如&<10, -5&>就表示性格中有10的激進成分,有5的悲觀成分。在決定有哪些維度的時候要儘可能保持他們的正交性,即互相之間不要有太多關聯,比如樂觀與否並不十分影響他是否激進。

數據處理的過程就可以表示為公式:

其中C表示發布的內容,P表示內容的性格點。fp表示它們之間的映射演算法。這樣主要的工作就是利用經驗數據擬合出函數fp,並以此計算內容中包含的性格特徵,進而綜合得到一個人的性格特徵。

2)數據準備
數據就是程序的經驗,對人來說就是有人不斷教他說什麼樣話的人最可能具有怎樣的性格特點。所以關鍵數據有兩類:內容中哪些體現性格特徵的元素,和這些元素分別如何影響這段內容的性格特性評價。這就需要兩方面的經驗,首先語言十分靈活,必須教給它怎樣過濾其中需要關注的有限的語言成分,比如詞,比如句式。其次是在它能識別出這些元素之後,又怎樣用其判定性格數值。

數據準備的工作就是:
a)獲取大量內容。
b)人工標註出內容中的關鍵特徵。
c)人工為這些內容賦予性格數值。
這樣就完成了經驗傳授的過程,但工作量巨大,也是很多缺乏人力財力的組織難以做好這類項目的主要原因之一。

3)演算法準備
演算法準備就是設計或應用一些學習演算法,對上面的經驗加以學習和使用,通常是一些統計類的演算法,同時具有一定泛化能力,就是說根據教給它的內容的特點識別出一些沒教過但相似的內容。

需要學習演算法的地方有兩個,對應上述兩種經驗。
a)在給出內容的分詞序列和語法信息之後,總結第二步中人工標註的元素的特點,自動在新的內容中識別出這類體現性格特點的元素。
b)在給出一個語言元素集合後,總結第二步中人工賦予的性格數值,自動根據這類元素為內容賦予恰當的性格數值。

具體的學習演算法可以依據機器學習和數據挖掘的基礎理論來設計,或者根據主流演算法的特徵選擇合適的。

這樣只要準備的數據的數量和質量足夠擬合出微博的主體信息,程序就能得到一個足夠擬合的fp函數,為用戶發布的內容做出恰當的性格特徵評價。

在最後計算人本身的性格值時,也可以把他關注的人、關注的內容的性格值納入演算法體系綜合考慮,這需要單獨的邏輯來處理,一般是基於經驗的公式。

整個過程中的難點應該在選擇恰當的性格維度,選擇恰當的元素類型來提取內容中的性格特點,這往往需要大量的試驗反饋。同時整體準確程度也會受到學習演算法本身的限制。程序的規模大概在5000LOC(Java)以內。


最後我說一下我對知乎、微博這類內容平台文本挖掘的看法,我覺得這類平台的用戶主要需求有三方面:獲取有價值的內容,交友和互動。在第一個問題上,文本挖掘可以可以做的事情還是比較多的,我覺得最有前景的是通過興趣優化過濾內容。

拿知乎首頁Feed來說,首頁Feed是依賴用戶關注的,通常依據是關注的人和話題,也就是說只要是與我關注的人和話題有關的問題都會推給我,但問題是即使在我關注的話題下,也存在大量我不感興趣的問題。知乎不能預知在我感興趣的話題下,哪些問題我更感興趣,這樣在我關注的話題和人特別多的時候,首頁並不能聚集最優的問題。如果進行恰當的挖掘,首頁Feed應該可以推送更多我想點開的問題。


其實這個領域的research已經做得比較全面了。。。特別是twitter的mining。。。分析性格的文章我沒有看到過相關的論文,我覺得這個的問題是因為evaluation的標準沒有確定,導致這個不是一個好的research topic. http://www.cc.gatech.edu/~jeisenst/papers/emnlp2010.pdf 可能和你的想法有些類似,通過twitter text中的方言語言現象來判斷用戶的所屬地。。。


基本上,文如其人。
這次交論文,幾個不同的學生,寫出來的文風也極其迥異。
邏輯嚴密類型的,如果讓你讀得順暢愉快,又還有啟發的,當然是聰明又有趣的人。
邏輯嚴密卻味如嚼蠟的,可能沒什麼生活情趣,但涉獵卻很廣。
另外,人們寫出來的文字,如果你讀出聲音來,基本上也是他口語中講話的風格,你可以設想一下有這麼個人對著你,說這樣的話,就很好假設了。
當然也有很多人,生活中很有趣,但寫字比較枯燥,這個也和此人有沒有養成寫作習慣或者表達水平有關係,部分人是說得好寫不出的。
邏輯不太嚴謹的,想到哪出寫哪出的,可能是比較情緒化的人。


我認為技術層面上肯定是可以的,但這種機器分析不免會顯得生硬,且缺乏人性
我的設計思想如下:

  • 將一些詞語分類成庫,比如「積極」、「消極」,我們稱之為性格庫。當然這只是最基本的兩個極端層面。實際操作可以增加更多維度的性格庫。
  • 掃描一篇或多篇文字,掃描其中的欄位去比對性格庫中的詞語。分析得出一個大致百分比:這人有60%的積極,20%的消極,20%的冒險精神等等之類的。
  • 將不同的百分比設置頻度,例如20%=輕度,50%=普通,90%=高度。等等。低於某個低百分比(10%或5%)的可以忽略不計。
  • 同一種性格根據不同的頻度,你可以用不同的詞語來表達一種意思,只不過程度不同。例如:高度積極你可以輸出「活力四射」,普通積極=陽光,輕度積極=開朗。
  • 當然同一個程度的某種性格,你也可以設置更多的詞語作為並列關係,只是在輸出時隨機選擇一個輸出。這樣不同人的性格分析輸出結果就不會太明顯的雷同。

以上,有點凌亂,湊合看看。再說幾句題外話:
我覺得想要用文字去剖析一個人的性格很難,微博上的@陸琪 就是個例子。畢竟文字之中表現出的自己可以粉飾,可以偽裝,可以不等於自己,更可以大於自己。所以從人文層面來看,這個程序很難達到預期效果。


看了一下目前的幾個答案,完全不是在回答提問者的問題。
提問者的問題是如何實現用軟體來分析文本得出微博人的心情,狀態,性格。

我認為有兩種實現思路,

1,軟體分析語義得出結果,目前很難,
直接分析文本的意義,由某些辭彙的使用頻率來得出作者當時的心情。
對於英文環境來說,這樣通過軟體自動分析語句來獲得作者的感情,性格狀態的設想已經有很多實驗室在做了,具體商用的成熟作品還沒有看到。但是相對於中文來說,英文的語義分析相對要簡單很多。
因為中文的特殊性,目前中文分詞技術和語義識別技術還未發展到位,效果還不能達到正式使用的階段。所以提問者說設想的還不夠條件來完成。不知道提問者有沒有使用過「微博關鍵詞」這個應用, 這個應用就是清華大學自然語言處理組開發的一個自然語言處理應用平台。想要分析作者的性格等等,「微博關鍵詞」這個應用後面的原理就是實現這個構想的基礎。

2,演算法比對,得出結果。(不知道,純粹我瞎想的)
這個就類似於現在很多網站上的推薦功能,通過你之前動作來將你和其他有相同動作的瀏覽者進行歸類,在這個類別中其他人所具有的特徵有很大可能你也具有。


可以在性格心理學方面有切入口。一性格心理學作為主要的理論指導,結合研究對象所處的局部環境,將環境作為權值,然後通過加權統計分析,是可以有很大的可信度的。


如果和一些心理測量量表對應起來會怎樣?比如16PF MBTI 大五人格等等。 很多時候可以從少數典型特徵推測其它性格特點的,比如MBTI性格量表中直覺型的人有愛用抽象詞語,興趣廣泛,專註未來和宏觀,偏愛想像等特點。根據心理學量表選擇標誌標度,通過把微博知乎等用戶的語言特點,興趣分布等統計出來獲取用戶性格類型是否可行呢?


我有個想法,有點像現在的星座分析,結論裡面有很多模糊的句子,隨機組合起來。用戶使用起來一看,還真像那麼回事。


  1. 想對某一個人進行分析,需要長期對其提問和回答的觀察。
  2. 長時間的觀察,可以得到這個人的興趣愛好,這裡可以說是策動點。
  3. 在其本人回到的問題中找破綻,可以得到其職業信息,更確切的愛好,婚否,經歷,等等需要挖掘,如果你不是搞特工的,就別用社會工程學了,自己設套(向他提問,邀請回答),這個你懂的
  4. 前3個問題的挖掘到一定程度的時候,其本人的性格可以參考,自己周圍朋友的興趣愛好,職業進行模擬匹配,也是需要進行分析的。平常一個人性格,還需要長時間的接觸才曉得的。(ps:個人觀點哦,僅提供思路)

我最近也在做這方面工作,從用戶微博分析性格,有語料么。。。


Facebook貌似已經實現通過社交網站中的過往數據來模仿一個人說話的語氣了。


恐怕不能哦。就好比雅思考試,當然也有英語水平特別好的人,寫作和口語分數都高。但是如果是考試之前幾個月突擊某一項的話,因為時間有限,只能突擊一項,因此寫作得分高的人未必口語一定得分高。反而更有可能比較低。。所以怎樣的情況都有可能哦~不要太相信一種理論了


推薦閱讀:

不在乎贊同數和感謝數的是什麼樣人?
如何評價楊洋,張藝興?
表面很man的雙魚座女生性格是什麼樣的?
在並不認可父母性格的前提下,子女長大後還會變成父母的翻版嗎?

TAG:知乎 | 微博 | 數據挖掘 | 自然語言處理 | 社交產品 | 性格分析 |