Clustering

文本挖掘:如何用人工智能對文本(例如新聞文章)進行聚類?

  • June 7, 2015

我已經為不同的任務構建了一些神經網絡(MLP(全連接)、Elman(循環)),比如打乒乓球、對手寫數字進行分類等等……

此外,我嘗試構建一些第一個卷積神經網絡,例如用於對多位手寫筆記進行分類,但我對分析和聚類文本是全新的,例如在圖像識別/聚類任務中,可以依賴標準化輸入,例如 25x25 大小的圖像, RGB 或灰度等……有很多預先假設的功能。

對於文本挖掘,例如新聞文章,您有不斷變化的輸入大小(不同的單詞、不同的句子、不同的文本長度……)。

如何利用人工智能(最好是神經網絡/SOM)實現現代文本挖掘工具?

不幸的是,我找不到簡單的入門教程。複雜的科學論文很難閱讀,也不是學習主題的最佳選擇(在我看來)。我已經閱讀了很多關於 MLP、dropout 技術、卷積神經網絡等的論文,但是我無法找到一篇關於文本挖掘的基本論文——我發現的所有內容對於我非常有限的文本挖掘技能來說都太高了。

潛在狄利克雷分配 (LDA) 很棒,但如果你想要更好的使用神經網絡的東西,我強烈建議使用 doc2vec ( https://radimrehurek.com/gensim/models/doc2vec.html )。

它能做什麼?它的工作原理與 Google 的 word2vec 類似,但不是單個單詞特徵向量,而是一個段落的特徵向量。該方法基於skip-gram模型和神經網絡,被認為是提取文檔特徵向量的最佳方法之一。

現在有了這個向量,您可以運行 k-means 聚類(或任何其他優選算法)並對結果進行聚類。

最後,要提取特徵向量,您可以這樣做:

from gensim.models import Doc2Vec
from gensim.models.doc2vec import LabeledSentence

class LabeledLineSentence(object):
   def __init__(self, filename):
       self.filename = filename
   def __iter__(self):
       for uid, line in enumerate(open(self.filename)):
           yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])


sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5,
               dm=1, workers=8, sample=1e-5)

model.build_vocab(sentences)

for epoch in range(500):
   try:
       print 'epoch %d' % (epoch)
       model.train(sentences)
       model.alpha *= 0.99
       model.min_alpha = model.alpha
   except (KeyboardInterrupt, SystemExit):
       break

引用自:https://stats.stackexchange.com/questions/155880

comments powered by Disqus