相似性检测技术可以应用于格式化为大ASCII编码整数字节数组的文本文档吗?

时间:2013-01-18 09:01:22

标签: machine-learning cosine-similarity

我想检测文件之间的相似之处。这样做的一种方法是对文件进行编码以减少相似性算法的输入空间,其次是为结果提供更准确的结果。这是通过仅考虑文档的信息特征来完成的。这样做的一种方法是将文件转换为跟随tf-idf频率的向量空间变换,该变换扩展了非常有用的术语并缩减了频繁的术语。我的问题是,这是否可以在不保留其文本表示的文档中完成。例如,假设首先将文档转换为大整数数组,其中的字符表示为ASCII值。

2 个答案:

答案 0 :(得分:3)

文件在字节数组中的编码不是问题,因为@Ivan Koblik指出,因为文本总是用数字数据编码。您的任务是标准文档相似性检测问题。我建议采取以下步骤:

预处理

  • 解码
  • 标记化;
  • 案例折叠;
  • 删除停用词;
  • 词干。

生成功能

  • 正如你所指出的那样,tf-idf可能是一个很好的。
  • 一组加权特征构成一个高维向量。

指纹

使用simhash,您可以将高维向量转换为f-bit指纹,例如f=64。这正是Google用于near duplicate web page detection的技术。

  

我们维持一个   f维向量V,其每个维度被初始化为零。将特征散列为f位散列值。这些f位(特征独有)递增/递减   矢量的f分量由该特征的权重   如下:如果散列值的第i位为1,则V的第i个分量增加该特征的权重;   如果散列值的第i位是0,则是第i个分量   V的值减去该特征的权重。什么时候   已经处理了所有功能,V的一些组件   积极而有些则是消极的。组件的迹象   确定最终指纹的相应位。

但是,在您的情况下,您可能会发现其他相似函数,如余弦距离或欧几里德距离表现更好。如果simhash不适合您,请尝试为您的问题找到最佳相似度函数。

查询类似文件

为每个文档生成指纹后,类似的文档应该有类似的指纹(类似意味着他们的指纹的汉明距离很小)。有关详细信息,请参阅near duplicate web page detection

修改

如果你不能做第一步,即解码,那么简单地计算每个唯一整数的出现仍然是可行的。您可以将tf-idf应用于这些唯一的整数,并按照子序列步骤操作。

答案 1 :(得分:1)

如果您不介意TF-IDF方法,布隆过滤器适合您的情况:http://research.microsoft.com/en-us/um/people/navendu/mypapers/webdb-167.pdf
这样,您可以根据您对误报的容忍度,使矢量任意小或大。

无论如何看NLP工具包大多数算法都可以适应任务,问题是你如何指定相似性?

如果您可以指定不同类别的文档,那么值得研究Naive Bayes,或者如果您想以不同方式定义相似性,MaxEnt模型可能对您有用: http://www.kamalnigam.com/papers/maxent-ijcaiws99.pdf