没有链接的文档有哪些有用的排名算法?

ora*_*ips 15 algorithm search machine-learning

我查看了智能Web的算法,它描述了一个有趣的算法(第55页),用于创建类似于商业文档得分的PageRank(即没有PDF,MS Word文档等链接的文档......).简而言之,它分析集合中每个文档之间的术语频率交集.

任何人都可以识别其他地方描述的有趣算法,或者想在这里分享一些新颖的东西,以应用这些类型的文档来改善搜索结果吗?

请放弃涉及点击跟踪或其他操作的答案,而不是分析实际文档.

dou*_*oug 18

第一种技术:逐步相似

我可以提供一个例子 - 我实际上已经测试/验证了真实数据.如果你要收集许多技术并按照两个轴进行排名 - 固有的复杂性或易于实现和性能(分辨率或预测精度),这种技术在第一轴上会很高,而在中间的某个位置靠近第二; 一种简单有效的技术,但它可能会对最先进的技术表现不佳.

我们发现,组合低频关键字联合路口读者/观众之间的相似文档,是该文件的内容的一个非常强有力的预测.换句话说:如果两个文档具有相似的一组非常低频率的术语(例如,特定于域的术语,如"决策流形"等)并且它们具有相似的入站流量配置文件,则该组合具有相似性的强烈证明的文件.

相关细节:

第一个过滤器:低频术语.我们解析了大量文档来获取每个文档的术语频率.我们使用这个词频谱作为'指纹',这是常见的,但我们应用了反加权,因此常用术语('a','of','the')在相似性度量中计数很少,而罕见的术语计算了很多(这很常见,你可能知道).

试图根据这一点确定两个文件是否相似是有问题的; 例如,两个文件可能共享一个与MMO有关的罕见术语列表,但这些文件仍然不相似,因为一个是针对玩MMO而另一个是设计它们.

第二个过滤器:读者.显然我们不知道谁读过这些文件,所以我们从流量来源推断了读者群.您可以在上面的示例中看到它有何帮助.MMO播放器站点/文档的入站流量反映了内容,同样也是针对MMO设计的文档.


第二种技术:核主成分分析(kPCA)

kPCA是无监督技术(在传入数据之前从数据中删除类标签).该技术的核心只是基于特征向量的矩阵分解(在这种情况下是协方差矩阵).该技术通过内核技巧处理非线性,该技巧仅将数据映射到更高维度的特征空间,然后在该空间中执行PCA.在Python/NumPy/SciPy中,它大约有25行代码.

这些数据来自对文学作品的非常简单的文本解析 - 特别是这四位作者的大部分出版作品:莎士比亚,简奥斯汀,杰克伦敦,米尔顿.(我相信,虽然我不确定,但是正常的大学生会选择他们被分配到这些作者阅读小说的课程.)

该数据集广泛用于ML,可从Web上的许多地方获得.

所以这些作品分为872件(大致相当于小说中的章节); 换句话说,四位作者中每一位约有220个不同的实质文本.

接下来,对组合的语料库文本执行词频扫描,并且选择70个最常见的词进行研究,丢弃频率扫描的剩余结果.

这70个字是:

[ 'a', 'all', 'also', 'an', 'and', 'any', 'are', 'as', 'at', 'be', 'been',
  'but', 'by', 'can', 'do', 'down', 'even', 'every', 'for', 'from', 'had',
  'has', 'have', 'her', 'his', 'if', 'in', 'into', 'is', 'it', 'its', 'may',
  'more', 'must', 'my', 'no', 'not', 'now', 'of', 'on', 'one', 'only', 'or', 
  'our', 'should', 'so', 'some', 'such', 'than', 'that', 'the', 'their', 
  'then', 'there', 'things', 'this', 'to', 'up', 'upon', 'was', 'were', 'what',
  'when', 'which', 'who', 'will', 'with', 'would', 'your', 'BookID', 'Author' ]
Run Code Online (Sandbox Code Playgroud)

这些成为了字段(列)的名称.最后,准备了对应于872个文本的一个数据行(来自截短的词频扫描).以下是其中一个数据点:

[ 46, 12, 0, 3, 66, 9, 4, 16, 13, 13, 4, 8, 8, 1, 0, 1, 5, 0, 21, 12, 
  16, 3, 6, 62, 3, 3, 30, 3, 9, 14, 1, 2, 6, 5, 0, 10, 16, 2, 54, 7, 8,
  1, 7, 0, 4, 7, 1, 3, 3, 17, 67, 6, 2, 5, 1, 4, 47, 2, 3, 40, 11, 7, 5,
  6, 8, 4, 9, 1, 0, 1 ]
Run Code Online (Sandbox Code Playgroud)

总之,数据由70个维度组成(每个维度是特定单词的频率或总数,在这四个作者之一的给定文本中.

同样,虽然这个数据主要用于监督分类(类标签是有原因的),但我使用的技术是无监督的 - 另一种方式,我从未向算法展示类标签.kPCA算法完全不知道这四个不同的簇(如下图所示)对应于什么,以及每个簇如何与另一个不同 - 算法甚至不知道数据由多少组(类)组成.我只是给了它数据,它根据固有的顺序将它非常巧妙地划分为四个不同的组.

结果:替代文字

同样,我在这里使用的算法是kPCA.使用Python,NumPy和Matplotlib,产生这些结果的脚本大约有80行代码 - 用于IO,数据处理,应用kPCA以及绘制结果.

对于SO帖子来说并不多,但太多了.无论如何,任何想要这个代码的人都可以从我的回购中获取它.同时,还有一个完整的,有文档记录的kPCA算法,在每个python包中都有python + numpy编码(所有这些都来自mloss.org):shogun('大型机器学习工具箱'),' sdpy(一组针对计算机视觉和机器学习的模块)和mlpy(' PYthon中的机器学习').

  • 道格,如果你正在进行无监督学习,你确定你不是指**潜在的Dirichlet分配(LDA)**而不是**线性判别分析(LDA)**吗?使用**线性判别分析**(维基百科链接:http://en.wikipedia.org/wiki/Linear_discriminant_analysis),您可以使用类标签.所以这种方法不是无人监督的. (2认同)