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