我在进行一项大学项目,需要收集和整合用户提供的主题数据。我遇到的问题是,许多搜索词的Google搜索结果中充斥着低质量的自动生成页面,如果我使用这些页面,可能会得到错误的事实。如何评估一个页面的质量/可信度呢?
你可能会想“算了吧,Google的工程师们已经研究这个问题10年了,他还在问解决方案”,但如果你仔细想想,搜索引擎必须提供最新的内容,如果它将一个好的页面标记为坏的,用户会不满意。我没有这样的限制,所以如果算法偶然将一些好的页面标记为坏的,这不会是个问题。
这里有一个例子:假设输入是buy aspirin in south la
。尝试用Google搜索它。前三个结果已经从网站上删除了,但第四个结果很有趣:radioteleginen.ning.com/profile/BuyASAAspirin
(我不想创建一个活动链接)
这是文本的第一段:
目前在美国,从加拿大购买处方药的需求很大。这是因为在美国,处方药的价格猛涨,使得收入有限或固定的群体难以购买他们急需的药物。美国人支付的药物费用比世界上任何地方的人都要高。
文本的其余部分类似,然后是相关关键词的列表。我认为这是一个低质量的页面。虽然这个特定的文本似乎有意义(尽管写得非常糟糕),但我见过的其他例子(现在找不到)只是一些垃圾,其目的是从Google吸引一些用户,然后在创建一天后被封禁。
回答:
N-gram语言模型
你可以尝试在一个自动生成的垃圾页面上训练一个n-gram语言模型,并在另一组非垃圾网页上训练另一个模型。
然后,你可以用这两个语言模型对新页面进行评分,看看文本看起来更像是垃圾网页还是常规网页内容。
通过贝叶斯定律进行更好的评分
当你用垃圾语言模型对文本进行评分时,你会得到该文本出现在垃圾网页上的概率估计,P(Text|Spam)
。这个符号表示在给定Spam (page)
的情况下Text
的概率。非垃圾语言模型的得分是该文本出现在非垃圾网页上的概率估计,P(Text|Non-Spam)
。
然而,你可能真正想要的术语是P(Spam|Text)
,或者等同的P(Non-Spam|Text)
。也就是说,你想知道给定页面上的文本,页面是Spam
或Non-Spam
的概率。
要得到这些,你需要使用贝叶斯定律,它指出
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)
是你对从网络上随机选择的页面是垃圾页面的先验信念。你可以通过计算某个样本中垃圾网页的数量来估计这个量,或者你甚至可以将其用作一个参数,手动调整以权衡精确度和召回率。例如,给这个参数一个高值会导致较少的垃圾页面被错误地分类为非垃圾,而给它一个低值会导致较少的非垃圾页面被意外地分类为垃圾。
术语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分发的。