SinglepassTextCluster项目:基于single-pass算法思想的自动文本聚类组件
項目的背景
SinglepassTextCluster, an TextCluster tool based on Singlepass cluster algorithm that use tfidf vector and doc2vec,which can be used for individual real-time corpus cluster task。基于single-pass算法思想的自動文本聚類小組件,內(nèi)置tfidf和doc2vec兩種文本向量方法,可自動輸出聚類數(shù)目、類簇文檔集合和簇類大小,用于自有實時數(shù)據(jù)的聚類任務(wù)。
項目地址: https://github.com/liuhuanyong/SinglepassTextCluster
項目的由來
實時熱點話題、事件的發(fā)現(xiàn),是針對實時信息流的一個典型應(yīng)用場,如如HistoryHotEvent項目。地址:https://github.com/liuhuanyong/HistoryHotEventBase 。 其中包括了從2004年至2019年共16年的每日熱點事件項目(004年至今共16年的歷時熱點標(biāo)題數(shù)據(jù)庫)。如何高效、快速地從大規(guī)模實時文本數(shù)據(jù)中發(fā)現(xiàn)具有代表性的新聞標(biāo)題,并根據(jù)時間順序挖掘出熱點話題或事件的演化脈絡(luò)具有十分重要的現(xiàn)實意義。
在熱點挖掘這個方向上,筆者主要已經(jīng)進(jìn)行了若干項目的探索,并從這些項目中,可以總結(jié)出一個熱點事件生成和演化脈絡(luò)的挖掘,可以分成四個步驟:
1、面向?qū)崟r文本流的文本獲取。可以針對特定的主題詞過濾的方式進(jìn)行文本語料獲取(參考EventMonitor項目,地址:https://github.com/liuhuanyong/EventMonitor ), 也可以以無過濾的方式獲取實時的文本數(shù)據(jù)流,通過步驟2、3進(jìn)一步得到特定主題的文本集合。
2、面向?qū)崟r文本流的文本聚類。目標(biāo)是將眾多個文本進(jìn)行文本聚類,包括文本的去重,聚類成不同的文本主題(粗分類),如將偷稅、漏稅文本事件聚合在一起。(話題聚類、文本聚類)。
3、聚類文本中的文本主題進(jìn)行事件細(xì)分。針對每一類話題,進(jìn)一步細(xì)分為不同的事件,形成不同主題下的事件,如A偷稅漏稅、B偷稅漏稅。(話題事件切分,參考TopicCluster項目。地址:https://github.com/liuhuanyong/TopicCluster )。
4、對細(xì)分的事件進(jìn)行故事里程碑劃分。借助時間信息,設(shè)定時間窗口,將同一個事件進(jìn)一步劃分成若干個時間事件切片,并挖掘出該事件切片中的代表性事件名稱。(事件重要性計算,參考:ImportantEventExtractor項目。地址:https://github.com/liuhuanyong/ImportantEventExtractor )。
5、子事件演化脈絡(luò)識別。對識別好的代表性事件名稱,通過事件演化的特征(方向性特征、時間先后順序特征、語義轉(zhuǎn)移特征),構(gòu)建事件演化脈絡(luò)鏈。(事件演化脈絡(luò)識別) 。
目前,關(guān)于步驟4和5目前還沒有對應(yīng)的項目,因此,為了填補(bǔ)這一空白,本項目選擇步驟4,以Single-Pass算法的實現(xiàn)為例,進(jìn)行實踐說明:
Single-Pass算法又稱單通道法或單遍法,是流式數(shù)據(jù)聚類的增量式方法,算法的時間效率高,適合對流數(shù)據(jù)進(jìn)行挖掘,而。對于依次到達(dá)的文本數(shù)據(jù)流,該方法按輸入順序每次處理一個數(shù)據(jù),依據(jù)當(dāng)前數(shù)據(jù)與已有類的匹配度大小,將該數(shù)據(jù)判為已有類或者創(chuàng)建一個新的數(shù)據(jù)類,實現(xiàn)流式數(shù)據(jù)的增量和動態(tài)聚類。
項目的構(gòu)成
1、data:待處理文本,如train.txt。
2、model: token_vector.bin,預(yù)先訓(xùn)練好的字向量,可用于文本的快速向量化。
3、result: 最終聚類結(jié)果文件,文件以json格式保存,記錄聚類結(jié)果id、類簇中文本數(shù)量、類簇文本集合信息。
4、cluster_demo.py:聚類主控腳本,在該腳本中可直接指定聚類閾值,聚類的方法和聚類輸入、輸出文本路徑。
5、cluster_doc2vec.py:基于doc2vec的主控聚類接口。
6、cluster_tfidf.py:基于tfidf的主控聚類接口。
7、singlepass_cluster_tfidf.py:基于tfidf的single-pass聚類算法實現(xiàn)細(xì)節(jié)。
8、singlepass_cluster_doc2vec.py:基于doc2vec的single-pass聚類算法實現(xiàn)細(xì)節(jié)。
項目的運行效果
1、項目運行方式:python cluster_demo.py
2、處理輸入文本:train.txt,其中選擇了1000條汽車需求評論語料,每條為1行,內(nèi)容如下:
3、參數(shù)設(shè)置。使用doc2vec向量化方法,theta選擇0.85。
4、聚類運行結(jié)果: cluster_doc2vec.json,共得到779個聚類結(jié)果,示例如下:
項目的總結(jié)
1、針對用戶自有實時文本數(shù)據(jù),利用聚類方法進(jìn)行自動的文本聚類,得到聚類主題以及聚類的相關(guān)文檔,可以為數(shù)據(jù)集文本的分析提供較好的幫助?;趕ingle-pass算法思想的自動文本聚類小組件,可以直接使用。
2、singlepass聚類算法是一個簡單、快速的聚類算法,其核心在于文檔向量化方法以及聚類閾值,本工具內(nèi)置tfidf和doc2vec兩種文本向量方法,閾值可作為超參供用戶指定輸入。
3、文檔向量化方法,有其他的更好的建模方法,如LDA聚類方法、bert向量化、word2vec向量化方法,大家可以在向量化階段根據(jù)實際需求自動地進(jìn)行向量化模塊替換。
4、singlepass聚類方法對輸入數(shù)據(jù)的順序、閾值敏感,同一份數(shù)據(jù),不同的輸入順序,不同的閾值,會得到不同的聚類結(jié)果。
5、singlepass聚類方法與輸入數(shù)據(jù)的規(guī)模敏感,隨著簇規(guī)模的增加,其計算量會越來越大(新文本要對所有簇中心進(jìn)行比對),因此針對大的數(shù)據(jù),需要設(shè)計高效的選型,如mapreduce或者根據(jù)某些特征過濾部分類簇,再進(jìn)行相識度計算,減少計算量。
6、在處理具有時間序列信息的聚類任務(wù)(如實時熱點挖掘)中,單獨使用文本語義相似度的方法進(jìn)行聚類是不夠的,還需要考慮時間因素,因此可以在聚類的過程中設(shè)置時間聚類的閾值(一個新的超參), 在么每個聚類中心加入時間片段參數(shù)(記錄該文簇中文檔的第一個時間以及最后一個時間),如果新加的文本時間大于設(shè)定的時間,則不再加入該簇。
7、具體聚類的效果還與輸入語料文本情況有關(guān),不同的語料在同一個算法下,可能得出不同的聚類效果。
關(guān)于作者
劉煥勇,liuhuanyong,現(xiàn)任360人工智能研究院算法專家,前中科院軟件所工程師,主要研究方向為知識圖譜、事件圖譜在實際業(yè)務(wù)中的落地應(yīng)用。
得語言者得天下,得語言資源者,分得天下,得語言邏輯者,爭得天下。
1、個人主頁:https://liuhuanyong.github.io
2、個人博客:https://blog.csdn.net/lhy2014/
3、個人公眾號:老劉說NLP
歡迎對自然語言處理、知識圖譜、事件圖譜理論技術(shù)、技術(shù)實踐等落地應(yīng)用的朋友一同交流。
總結(jié)
以上是生活随笔為你收集整理的SinglepassTextCluster项目:基于single-pass算法思想的自动文本聚类组件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】深入理解Java线程
- 下一篇: Android官方开发文档Trainin