1. 程式人生 > >【doc2vec】學習筆記:From word2vec to doc2vec: an approach driven by Chinese restaurant process

【doc2vec】學習筆記:From word2vec to doc2vec: an approach driven by Chinese restaurant process

主要內容: 在google word2vec的基礎上,考慮文章(document)的向量化方法,借鑑了隨機過程中的Chinese restaurant process過程。 Chinese restaurant process過程: 基本上的過程就是,餐館中有無限多個桌子,每個桌子可以坐無限多個人。當第一位顧客過來的時候,直接開闢一張桌子坐下;當第n+1位顧客過來的時候,他有n/(n+1)的概率坐到前面n個人已經佔據的桌子上,也有1/(n+1)的概率開闢一張新的桌子獨自坐下。細節可以參考wiki上的介紹(http://en.wikipedia.org/wiki/Chinese_restaurant_process) 作者主要想法: 1. google word2vec能夠把詞語表示成為實屬向量,如何表示由詞語組成的文章?一個最簡單的方法就是把文章中所有詞語的實屬向量的每個維度的值相加,形成新的向量。(也有方法是求平均、或者是求加權平均)。不過這樣做恐怕會損失文章的語義資訊。 2. 作者的想法是,將文章中的詞語聚類,挑選具有代表性的一個詞語聚類結果,來表示文章(的主要語義內容),並用這個聚類結果中的詞語向量,進行相加,最終獲得代表文章的實屬向量。 3. 聚類方法有很多,kmean、層次聚類、等等。不過,這些方法依賴於詞語向量之間的“幾何距離”,如:歐氏距離。google word2vec的結果,計算cosine的效果比較好,在幾何距離的度量上,效果還有待驗證。所以上述方法有風險。 4. 作者最終利用Chinese restaurant process這個隨機過程做詞語聚類——按需求對原始隨機過程做了一定的變形 作者的實際做法: step1:當遇見文章第一個詞語的時候,以這個詞語建立一個cluster,並記住該詞語對應的實屬向量(實際記住的應該是該cluster中所有詞語的實屬向量在各個維度上的和——如果把這個cluster看成一篇doc的話,就是該doc的表示方式) step2:當第n+1個詞語過來的時候,假設此時之前的n個詞語聚類成為C個類別,則計算當前詞語和這C個詞語類別的cosine距離(如step1所述:每個詞語類別的代表向量是該類別中所有詞語的向量的求和),並記住最相似的那個類別C_i,以及對應的相似度值Sim_i。此時,有兩種不同的作法: step3-1:以1/(n+1)的概率建立一個新的詞語cluster,或者,將這第n+1個詞語歸併到類別C_i中去,並更新類別Ci的表示向量。 這種做法,更容易形成更多的類別,且每個類別中的詞語並不太多。作者最終沒有采用這種方法,而是採用了下面這種更復雜的作法。 step3-2:判斷是否 Sim_i > 1/(n+1),如果是,則第n+1個詞語歸併到類別C_i中去,並更新類別Ci的表示向量;否則,以1/(n+1)的概率建立一個新的詞語cluster,以n/(n+1)的概率將第n+1個詞語仍舊歸併到類別C_i中去。 這種做法,作者評價,會產生較少的類別,且每個類別中的詞語比較多,這是作者最終採用的方法。 如何選擇cluster作為doc的代表cluster? 在文章中,作者是靠肉眼看的——汗!不過作者也提供了一些思路,來作自動選擇: 1. idf:cluster中詞語的idf越大,說明該類別中的詞語和文章關聯越大。 2. pos:...... 3. 用同樣的方法生成doc中每個類別的表示向量、以及title的表示向量,計算cluster和title的關聯,關聯越大越能夠代表文章

附:《From word2vec to doc2vec: an approach driven by Chinese restaurant process》的文章連結:http://eng.kifi.com/from-word2vec-to-doc2vec-an-approach-driven-by-chinese-restaurant-process/

如轉載請註明出處:http://blog.csdn.net/xceman1997/article/details/46277129

完。