我正在尝试使用ELKI DBSCAN聚类单词向量。我希望使用余弦距离来聚类300维的单词向量。数据集的大小为19,000个单词(19000 * 300大小矩阵)。这些是使用gensim word2vec计算的wordvectors,列表输出保存为CSV
以下是我在UI中传递的命令
KDDCLIApplication -dbc.in" D:\ w2v \ vectors.csv" -parser.colsep'","' -algorithm clustering.DBSCAN -algorithm.distancefunction CosineDistanceFunction -dbscan.epsilon 1.02 -dbscan.minpts 5 -vis.window.single
我玩了epsilon值,在这样做时我尝试了3个值0.8,0.9,1.0。 适用于0.8& 0.9 - 我得到了#34;找到的邻居很少。 Epsilon可能太小了。" 而对于1.0 - 我得到了#34;发现了很多邻居。 Epsilon可能太大了。"
我在这里做错了什么?我对ELKI很新,所以感谢任何帮助
答案 0 :(得分:1)
在300维度上,您将看到维度的诅咒。
与流行的说法相反,维度的诅咒确实存在于余弦中(因为余弦在归一化向量上等同于欧几里德,它最好比欧几里得“更好”一维)。通常使余弦应用仍然有用的是内在维度远小于文本上的表示维度(即,当您的词汇可能有数千个单词时,只有少数单词出现在两个文档的交集中)。
单词向量通常不是稀疏的,所以你的内在维度可能很高,你会看到维数的诅咒。
因此,看到余弦距离集中并不奇怪,然后您可能需要选择几位精度的阈值。
由于显而易见的原因,1.0是余弦距离的无意义阈值。最大余弦距离为1.0!所以,是的,你需要尝试0.95和0.99,例如。
您可以使用KNNDistancesSampler来帮助您选择DBSCAN参数,或者您可以使用例如OPTICS(这将允许您查找具有不同阈值的群集,而不仅仅是一个阈值)。
请注意,单词向量是针对特定场景进行训练的:可替代性。到目前为止,它们并不像普遍基于“君王+女人=女王”的例子那样具有普遍性。试试“国王+男孩”,这通常也会回归“女王”(或“国王”)......结果主要是因为国王的最近邻居是“女王”和“国王”。由于训练数据,“资本”示例同样过度拟合。它受过新闻文章的培训,通常以“资本,国家,等等”开头。如果省略“大写”,如果省略“country”,则几乎可以获得完全相同的上下文。所以word2vec模型得知它们是“可替代的”。只要首都也是美国主要报纸的所在地(例如柏林,巴黎),这种方法就有效。对于主要报告中心位于加拿大,美国或澳大利亚等国家,例如在多伦多,纽约,悉尼,它经常会失败。它并没有真正证明向量已经学会了资本是什么。它首先起作用的原因是过度拟合新闻培训数据。