目標:

我們內部系統裡記錄的酒店名字是由很多人輸入的,每個人輸入的可能不完全一樣,比如,‘成都凱賓斯基大酒店’, ‘凱賓斯基酒店’, ‘凱賓斯基’, 我們的初步想法是能不能把大量的記錄歸類,把很多相似的名字歸成一類,然後自動給出一個建議的名字

向量化和建模:

大概的想法是,先找出一個相似性演算法,然後在呼叫一種分類演算法。相似性演算法很多是基於vector的,怎麼把中文轉化成vector? 這個文章介紹了怎麼處理中文 (sklearn: TfidfVectorizer 中文處理及一些使用引數)

聚類:

聚類的時候我並不想像 K-means那樣指定一個K值,我需要的是自動根據輸入資料的集中程度來決定分多少類, 這個文章(機器學習總結(十):常用聚類演算法(Kmeans、密度聚類、層次聚類)及常見問題)裡介紹可以用 DBSCAN 演算法. 後來想我這個case其實根本不需要什麼DBSCAN, 只要設定一個threashold就可以了,我設定的0.5, 就是凡是相似度 >0.5的都認為相似度很高了,也就是同一個酒店

最終出來的效果如下: 

沒用什麼高階的技術,主要用的是參考資料裡sklearn: TfidfVectorizer 提供的API,來得到酒店名字之間的相似矩陣,然後取矩陣裡面相似度高的歸為同一個酒店,我選的相似度 >0.8 這個threshold. 最後,從選出來的裡面取最常見的那個酒店名字作為推薦使用的名字.

Ref:

Quick review on Text Clustering and Text Similarity Approaches, http://www.lumenai.fr/blog/quick-review-on-text-clustering-and-text-similarity-approaches

通俗理解word2vec, https://www.jianshu.com/p/471d9bfbd72f

sklearn: TfidfVectorizer 中文處理及一些使用引數,https://blog.csdn.net/blmoistawinde/article/details/80816179

https://www.coursera.org/lecture/text-mining/4-2-text-clustering-generative-probabilistic-models-part-1-gJTFA, 這裡講了基於 Generative Probabilistic Model 和 Similarity 兩種方法的 Text Clustering.