这是一个家庭作业问题.我有一个充满文字的巨大文件.我的挑战是将这些单词分类为充分代表单词的不同组/群.我处理它的策略是使用K-Means算法,如您所知,采用以下步骤.
>为整个组生成k随机方法
>通过将每个单词与最近的平均值相关联来创建K个群集
>计算每个集群的质心,这成为新的意思
>重复步骤2和步骤3,直到达到某个基准/收敛.
从理论上讲,我有点得到它,但并不完全.我想在每一步,我都有与之相对应的问题,这些是:
>我如何决定k随机方法,技术上我可以说5,但这可能不一定是一个好的随机数.那么这个k纯粹是一个随机数,还是实际上是由启发式驱动的,例如数据集的大小,涉及的单词数量等等
>你如何将每个单词与最近的平均值相关联?从理论上讲,我可以得出结论,每个单词与距离最近均值的距离相关联,因此,如果有3个均值,则任何属于特定聚类的单词都取决于它具有最短距离的平均值.但是,这实际上是如何计算的?在两个单词“group”,“textword”和假设一个平均单词“pencil”之间,我如何创建一个相似性矩阵.
>你如何计算质心?
>当您重复步骤2和步骤3时,您假设每个先前的群集都是新的数据集?
很多问题,我显然不清楚.如果有任何我可以阅读的资源,那就太好了.维基百科还不够:(
解决方法
因为你不知道确切的簇数 – 我建议你使用一种层次聚类:
>想象一下,所有的词语都只是非欧几里德空间中的一个点.使用Levenshtein distance计算单词之间的距离(如果你想检测字典相似单词的集群,它的效果很好)
> Build minimum spanning tree,其中包含您的所有单词
>删除长度大于某个阈值的链接
>链接的单词组是相似单词的集群
这是一个小插图:
附:你可以在网上找到很多论文,其中描述了基于最小生成树构建的聚类
P.P.S.如果要检测语义相似的单词集群,则需要一些自动同义词库构造的算法