python中的单词聚类列表
Posted
技术标签:
【中文标题】python中的单词聚类列表【英文标题】:clustering list of words in python 【发布时间】:2017-06-16 19:37:34 【问题描述】:我是文本挖掘的新手,这是我的情况。 假设我有一个单词列表 ['car', 'dog', 'puppy', 'vehicle'],我想将单词聚类到 k 个组中,我希望输出为 [['car', 'vehicle' ],['狗','小狗']]。 我首先计算每个成对词的相似度得分,得到一个 4x4 矩阵(在这种情况下)M,其中 Mij 是词 i 和 j 的相似度得分。 将单词转换成数字数据后,我利用不同的聚类库(如sklearn)或自己实现得到单词簇。
我想知道这种方法有意义吗?此外,我如何确定 k 的值?更重要的是,我知道存在不同的聚类技术,我正在考虑是否应该使用 k-means 或 k-medoids 进行词聚类?
【问题讨论】:
您要计算什么类型的相似度?字符系列的相似性(例如“rock”与“clock”非常相似)或词义的相似性(例如“dog”与“puppy”非常相似)? @Marcel P 可能是词义相似度 你将如何计算? “意义”没有等式。 【参考方案1】:根据Brian O'Donnell 的答案,一旦您计算出与word2vec(或FastText 或GLoVE,...)的语义相似度,您就可以使用sklearn.clustering
对矩阵进行聚类。我发现对于小矩阵,谱聚类给出了最好的结果。
值得记住的是,词向量通常嵌入在高维球体上。带有欧几里得距离矩阵的 K-means 无法捕捉到这一点,并且可能导致非直接邻居词的相似性结果不佳。
【讨论】:
【参考方案2】:如果您想通过单词的“语义相似性”(即含义的相似性)对单词进行聚类,请查看 Word2Vec 和 GloVe。 Gensim 有一个 Word2Vec 的实现。这个网页,"Word2Vec Tutorial",由 Radim Rehurek 提供了一个使用 Word2Vec 来确定相似词的教程。
【讨论】:
【参考方案3】:除了关于相似度分数的内容之外,在聚类应用程序中找到k
通常由scree plots(也称为“肘曲线”)辅助。在这些图中,您通常会在 y 轴上测量集群之间的离散度,在 x 轴上测量集群的数量。在碎石图中找到曲线的最小值(二阶导数)可以更客观地衡量集群“唯一性”。
【讨论】:
以上是关于python中的单词聚类列表的主要内容,如果未能解决你的问题,请参考以下文章