Flu*_*ffy 4 nlp information-retrieval machine-learning spam
我正在做一个大学项目,必须收集和组合用户提供的主题数据.我遇到的问题是许多术语的Google搜索结果都被低质量的自动生成页面污染,如果我使用它们,我最终会得到错误的事实.如何评估页面的质量/可信度?
您可能会认为"不,Google工程师正在解决这个问题已有10年了,他正在寻求解决方案",但如果您考虑一下,SE必须提供最新的内容,如果它标记为一个好的页面是一个坏的一,用户会不满意.我没有这样的限制,所以如果算法意外地将某些好页面标记为坏,那就不会有问题了.
这是一个例子:说输入是buy aspirin in south la.尝试谷歌搜索它.前三个结果已从网站中删除,但第四个结果很有趣:( radioteleginen.ning.com/profile/BuyASAAspirin我不想创建一个活动链接)
这是文本的第一段:
目前,在美国购买加拿大处方药的情况很少.这是因为在美国,处方药价格飙升,使那些收入有限或集中收入的人购买他们急需的药物变得艰难.美国人为他们的药物支付的费用高于班上的任何人.
文本的其余部分类似,然后是相关关键字列表.这就是我认为的低质量页面.虽然这个特定的文本似乎有意义(除了它太可怕了),我见过的其他例子(现在还找不到)只是一些垃圾,其目的是让一些用户从谷歌获得并在创作后一天被禁止.
N-gram语言模型
您可以尝试在自动生成的垃圾邮件页面上训练一个n-gram语言模型,在一组其他非垃圾邮件网页上训练一个.
然后,您可以使用两种语言模型对新页面进行简单评分,以查看文本是否与垃圾网页或常规网页内容更相似.
贝叶斯法更好的得分
使用垃圾邮件语言模型对文本进行评分时,可以估算在垃圾邮件网页上查找该文本的概率,P(Text|Spam).符号读作Text给定的概率Spam (page).非垃圾邮件语言模型的得分是对在非垃圾邮件网页上查找文本的概率的估计,P(Text|Non-Spam).
但是,您可能真正想要的术语是P(Spam|Text)或者等效P(Non-Spam|Text).也就是说,您想知道页面的概率Spam或Non-Spam给出页面上显示的文本.
要获得这些中的任何一个,您需要使用贝叶斯定律,其中指出
P(B|A)P(A)
P(A|B) = ------------
P(B)
Run Code Online (Sandbox Code Playgroud)
使用贝叶斯定律,我们有
P(Spam|Text)=P(Text|Spam)P(Spam)/P(Text)
Run Code Online (Sandbox Code Playgroud)
和
P(Non-Spam|Text)=P(Text|Non-Spam)P(Non-Spam)/P(Text)
Run Code Online (Sandbox Code Playgroud)
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分发的.