1

我有一个包含大约 30,000 个文档的 tf-idf 向量的数据库。

我想为给定的文档返回一组类似的文档 - 大约 4 个左右。

我考虑过对数据(具有余弦相似度)实施 K-Means(聚类算法),但由于存在许多不确定性,我不知道它是否是最佳选择:我不确定在我的初始聚类中放入什么,我不知道要创建多少个集群,我担心集群会太不平衡,我不确定结果质量会不会好,等等。

经验丰富的用户的任何建议和帮助将不胜感激。

谢谢,

凯蒂

4

2 回答 2

0

我想为给定的文档返回一组类似的文档 - 大约 4 个左右。

然后不要做k-means。只需按 tf-idf 相似性返回四个最接近的文档,就像任何搜索引擎一样。您可以将其实现为 k-最近邻搜索,或者通过安装搜索引擎库并将初始文档用作查询来更容易地实现。想到了Lucene 。

于 2011-06-21T15:42:09.560 回答
0

如果我明白,你

  1. 从更大的数据库读取 30k 条记录到缓存文件/内存
  2. 余弦相似度,10 个术语 * 30k 条记录 -> 最佳 4。

你能分别估计这些阶段的运行时间吗?

  1. 读取或缓存:多久执行一次,30k 向量加在一起有多大?
  2. 10 * 30k 乘加:在你的 c / java / ...或一些不透明的数据库中?在 c 或 java 中,这应该花费 < 1 秒。

一般来说, 在花哨之前做一些粗略的估计。

(顺便说一句,我发现直接 c 中的 best-4 比 std::partial_sort; ymmv 更快更简单。)

于 2011-06-23T14:10:32.580 回答