我正在做一个大学项目,必须收集和组合用户提供的主题的数据。我遇到的问题是,许多术语的 Google 搜索结果都被低质量的自动生成页面污染了,如果我使用它们,最终可能会得到错误的事实。如何估计页面的质量/可信度?
你可能会想“不,谷歌工程师已经研究这个问题 10 年了,他正在寻求解决方案”,但如果你考虑一下,SE 必须提供最新的内容,如果它把一个好页面标记为一个坏页面一,用户会不满意。我没有这样的限制,所以如果算法不小心将一些好的页面标记为坏,那也不是问题。
下面是一个例子:
假设输入是 buy aspirin in south la
。尝试谷歌搜索它。前 3 个结果已从站点中删除,但第四个结果很有趣:radioteleginen.ning.com/profile/BuyASAAspirin
(我不想创建事件链接)
这是正文的第一段:
文本的其余部分是相似的,然后是相关关键字列表。这就是我认为的低质量页面。虽然这个特定的文字似乎有道理(除了它很可怕),但我见过的其他例子(现在还找不到)只是一些垃圾,其目的是从谷歌获取一些用户并在创建后 1 天被禁止.
最佳答案
N-gram 语言模型
您可以尝试在自动生成的垃圾邮件页面上训练一个 n-gram language model ,并在其他非垃圾邮件网页的集合上训练一个。
然后,您可以简单地使用两种语言模型对新页面进行评分,以查看文本是否与垃圾邮件网页或常规 Web 内容更相似。
通过贝叶斯定律更好地得分
当您使用垃圾邮件语言模型对文本进行评分时,您可以估计在垃圾邮件网页 P(Text|Spam)
上找到该文本的概率。该符号读作 Text
给定 Spam (page)
的概率。来自非垃圾邮件语言模型的分数是对在非垃圾邮件网页 P(Text|Non-Spam)
上找到文本的概率的估计。
但是,您可能真正想要的术语是 P(Spam|Text)
或等效的 P(Non-Spam|Text)
。也就是说,您想知道 给定页面上显示的文本 页面是 Spam
或 Non-Spam
的概率。
要获得其中任何一个,您需要使用 Bayes Law ,其中指出
P(B|A)P(A)
P(A|B) = ------------
P(B)
使用贝叶斯定律,我们有
P(Spam|Text)=P(Text|Spam)P(Spam)/P(Text)
和
P(Non-Spam|Text)=P(Text|Non-Spam)P(Non-Spam)/P(Text)
P(Spam)
是您的 先验信念 从网络中随机选择的页面是垃圾邮件页面。您可以通过计算某个样本中有多少垃圾邮件网页来估计这个数量,或者您甚至可以将其用作手动 调整以权衡 precision and recall 的参数。例如,给这个参数一个高的值将导致更少的垃圾页面被错误地归类为非垃圾邮件,而给它一个低的值将导致更少的非垃圾页面被错误地归类为垃圾邮件。术语
P(Text)
是在任何网页上找到 Text
的总体概率。如果我们忽略 P(Text|Spam)
和 P(Text|Non-Spam)
是使用不同模型确定的,则可以将其计算为 P(Text)=P(Text|Spam)P(Spam) + P(Text|Non-Spam)P(Non-Spam)
。这总结了二进制变量 Spam
/Non-Spam
。仅分类
但是,如果您不打算将概率用于其他任何事情,则不需要计算
P(Text)
。相反,您可以只比较分子 P(Text|Spam)P(Spam)
和 P(Text|Non-Spam)P(Non-Spam)
。如果第一个较大,则该页面很可能是垃圾邮件页面,而如果第二个较大,则该页面很可能是非垃圾邮件页面。这是有效的,因为 P(Spam|Text)
和 P(Non-Spam|Text)
的上述等式都由 相同的 P(Text)
值归一化。工具
就您可以用于此类用途的软件工具包而言,SRILM 将是一个不错的起点,它可免费用于非商业用途。如果您想将某些东西用于商业用途并且不想为许可证付费,则可以使用 IRST LM ,它在 LGPL 下分发。
关于machine-learning - 如何评估一个网页的质量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2749150/