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

我查看了《智能网络的算法》,书中第55页描述了一种有趣的算法——称为DocRank,用于为商业文档(例如没有链接的PDF、MS Word文档等)创建类似于PageRank的评分。简而言之,它分析集合中每个文档之间的术语频率交集。

还有其他人能否指出其他地方描述的有趣算法,或者在这里分享一些新颖的算法,用于这些类型的文档以改进搜索结果?

请避免涉及点击跟踪或其他与分析实际文档无关的答案。


回答:

第一种技术:逐步相似性

我可以提供一个例子——我实际上已经对真实数据进行了测试/验证。如果你收集了许多技术,并根据两个轴对它们进行排名——固有的复杂性或实施的难易程度以及性能(分辨率或预测准确性),这种技术在第一个轴上排名较高,在第二个轴上排名居中;这是一种简单而有效的技术,但可能在面对最先进的技术时表现不佳。

我们发现,低频关键词交集与文档阅读者/观众的相似性相结合,是文档内容的相当强有力的预测指标。换句话说:如果两个文档有一组非常低频的术语(例如,特定领域的术语,如“决策流形”等)相似,并且它们有相似的入站流量模式,这种组合强烈表明文档的相似性。

相关细节如下:

第一过滤器低频术语。我们解析了一大组文档以获取每个术语的频率。我们使用这个词频谱作为“指纹”,这很常见,但我们应用了逆向加权,使得常见术语(如“a”、“of”、“the”)在相似性度量中几乎不计,而罕见术语则计入很多(这很常见,你可能知道)。

仅根据这一点来判断两个文档是否相似是有问题的;例如,两个文档可能共享一组与MMO相关的罕见术语,但文档仍然不相似,因为一个是针对玩MMO的,另一个是针对设计MMO的。

第二过滤器读者。显然我们不知道谁读过这些文档,所以我们从流量来源推断读者的情况。你可以看到这在上面的例子中是如何帮助的。MMO玩家网站/文档的入站流量反映了内容,同样适用于针对MMO设计的文档。


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

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

数据是从对文学作品的简单文本解析中收集的——特别是,这四位作者的大部分已出版作品:莎士比亚、简·奥斯汀、杰克·伦敦、弥尔顿。(我相信,尽管我不确定,普通大学生会参加课程,在这些课程中他们被分配阅读这些作者的小说。)

这个数据集在机器学习中被广泛使用,并且可以在网络上的许多地方找到。

因此,这些作品被分成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' ]

这些成为了字段(列)名称。最后,准备了一行对应于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 ]

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

再次强调,虽然这些数据主要用于有监督分类(类标签的存在是有原因的),但我使用的技术是无监督的——换句话说,我从未向算法展示类标签。kPCA算法完全不知道这四个不同的聚类(如下图所示)对应什么,也不知道它们彼此如何不同——算法甚至不知道数据由多少组(类)组成。我只是给了它数据,它根据固有的排序非常整齐地将其划分为四个不同的组。

结果如下:alt text

再次强调,我在这里使用的算法是kPCA。使用Python、NumPy和Matplotlib,生成这些结果的脚本大约有80行代码——用于IO、数据处理、应用kPCA和绘制结果。

不多,但对于SO帖子来说太多了。无论如何,任何想要这个代码的人都可以从我的仓库中获取它。同时,在这些Python包中也有一个完整的、文档齐全的用Python + NumPy编写的kPCA算法(所有这些都可以在mloss.org获得):shogun(“大规模机器学习工具箱”)、’sdpy(一组针对计算机视觉和机器学习的模块),以及mlpy(“Python中的机器学习”)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注