【问题标题】:How to cluster similar text tokens如何聚类相似的文本标记
【发布时间】:2019-04-08 04:00:59
【问题描述】:

我正在做一个项目来聚类相似的文本标记。目标是对可能是拼写错误的标记和拼写相似的标记进行分组。这是我的数据的 sn-p 和预期的聚类:

John (cluster 1)
Mike  (cluster 2)
Joe  (cluster 1)
Jon  (cluster 1)
Jony  (cluster 1)
Ajon  (cluster 1)
Brown  (cluster 3)

我只是在进行集群化,所以我不确定如何才能实现这一目标。通过 ScikitLearn 中的各种聚类技术,我遇到了 AffinityPropagation 来预先计算相似性,但它对于大型数据集是不可行的(我有大约 20 万个令牌)。所有其他聚类算法都需要向量,但我不确定如何从这些标记中生成特征。

这里的任何指导都会非常感激。

谢谢

【问题讨论】:

  • 这些令牌的来源是什么?例如,您可以为每个标记生成一个嵌入(浮点值的密集向量),并将这些向量用作聚类算法的输入

标签: text scikit-learn cluster-analysis


【解决方案1】:

您需要一个相似函数来编码直觉,即仅相差几个字母的标记可能是拼写错误。

您可以这样做的一种方法:

您可以将每个标记转换为具有 26 维的向量(每个字母一个),每个元素代表给定字母在标记中出现的次数。

只有一个字母不同的标记(可能是拼写错误)将在该特征空间中靠近在一起,因为数组中只有一个元素不同。

【讨论】:

  • 谢谢,这听起来很有趣。让我明天试一试
  • 好吧,通过这种方法,Jon 和 Joe 有两个共同的字母。但是“One”和“neo”具有三个共同点。字母直方图可以用于语言检测,但我不会将它们用于相似性。至少,使用字母二元组或三元组...
【解决方案2】:

我不认为你应该在这里做集群。

因为诸如 k-mrans 之类的方法强制将每个点都放入一个“簇”中。这可能不是你想要的。

您还会遇到传递的问题,几乎所有内容都是“相似的”。在很多游戏中,您必须一次将一个单词变成另一个字母。

不稳定尝试首先确定一些好的值(例如,按频率),然后决定以何种容差合并备选方案。但没有传递操作。这比集群更简单而且更快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2023-03-12
    • 2011-03-30
    • 2022-01-04
    相关资源
    最近更新 更多