您当前的位置: 首页 > 体育

网站更懂读者戳中开发者痛点的文章推荐算法

2019-01-31 06:51:37

在很多站中我们看到有文章推荐功能,有的站中还使用的无觅插件或百度的脚本挂件,然而推荐出来的文章却存在两个问题:相关性不大,不能引起读者兴趣。

那么,有没有一种方法,提高相关文章的推荐吻合度呢?答案是有的。

我还见过很多博客中放出的根据标签来推荐相关文章的代码,这种方法应该是比较好的,但是问题是,很多博主对标签的选择非常不专业,标签的选取常常是 随意的,即便两篇文章都含有百度这个标签,可能一篇文章是讲百度搜索规则的变化,而另一篇讲百度年营收,两篇文章根本没有非常明显的相关性。

1.期待谷歌更加强大的推荐挂件

在这个方面,虽然我们对百度寄予了厚望,但是实际上我更相信谷歌的技术。原理很简单:

通过不同用户的不同搜索词进入不同文章,而这些搜索词在其他用户而言又是意思相近的。

理解起来有点难,我们只能通过例子来说明:有A、B、C三个用户。有a、b、c三篇文章。A搜索w点击进入了a文章,B搜索m点击进入了b 文章,C搜索p进入c文章时,谷歌发现w、m、p这三个词组意思非常相近,所以判断a、b、c三篇文章是相关文章,因此在三篇文章下方返回了一个相关 文章列表(使用javascript来调用)。

通过历史记录来判断某些文章相关,很多用户点击进入某篇文章后,同时进入另外一篇文章,说明文章相关性强。

如果非得靠谷歌搜索的关键词,就显得太傻了,通过谷歌统计代码,从历史浏览记录来进行深入判断。当A进入a文章之后,发现下方有一个随机的推荐列 表,如果发现有自己需要的或者感兴趣的文章b,就会点击进去,这些行为被记录在谷歌的大数据中,当从a进入b被无数人实践过后,甚至可以统计b出现在a页 面的那个位置更容易被点击,第几次进入的时候是否不愿意再点击b文章了,而谷歌完全有能力做到这种分析,终当B、C首次进入a文章的时候,b文章的链接 就会非常合理的出现在该出现的位置。而实际上,如果无数用户从a进入,到了c这篇文章,那么为什么不直接把c文章链接放在a页面呢?这多少有点大数据 的意思。

2.统计和聚类:数据库爬虫

人工智能希望计算机有理解能力,但实际上目前我们只能通过统计和聚类来更加只能的判断相关性和可能性。100个人买了尿不湿的时候买了啤酒,这不能说明什么,但是有1万亿人次都这样做了呢?

通过设计一个爬虫程序,到数据库中的文章表中去抓取,对文章标题、内容、摘要、关键词、标签等进行分词统计。原始的方案是长匹配词数量越多,文章相关性越强。

爬虫要做的就是匹配词组,因此开始应该有一个词典。但是词典需要人为手工建立,略显麻烦。解决方案也很简单,用一篇典型文章作为原始案例,让爬虫 去爬,反复的爬,通过分词建立原始词典。利用这个原始词典再去爬其他的文章,遇到新词的时候就加入到词典中。这种方法能够保证新词只会在后面去爬的文章中 出现。在爬的过程中,一方面可以发现新词加入词典,另一方面又把词频统计出来,按照词组的长度降序排,找到长词。通过对文章长词的对比,确定文章的相 关性。

但是这种方法必须面临两个问题,一个是效率问题,一个是干扰问题。搜索引擎中核心的问题之一就是效率,主要是两个方面的效率,一个是爬取,另一个是检索。对应到推荐系统中,一方面是如何确定文章的相关性(爬的效率),另一方面是如何更快的根据爬的结果返回相关文章列表(取的效率)。干扰问题则是指 部分文章的词频无法反应这个问题的核心主旨,例如一篇含有100行代码的文章,介绍性的文字可能只有行,这种情况下很难防止统计结果与文章核心 主旨不符(而其他文章的统计结果又相对比较准确)。

为了提高效率,你可以鼓动你的读者来为你提供词典,比如说读者读完文章后,你要求他输入认为可以概括本文的关键词,这样可以让爬虫更加确定自己是否应该省去某些词,而重视某些词。

3.有可行性:标签、搜索和浏览记录

上面说到的两种方案都是离我们比较远的,普通程序员很难在自己的站中实现。回归现实,我们希望真正可以在站中实现的一种方案(即使可能相关性结果稍微弱一点)。

标签是合理的一种方案。给不同的文章贴上3个以上的标签,因为标签是人工撰写的,所以有一个自己的标签列表,防止把 同一个意思写成了不同的标签,例如自行车单车脚踏车。把标签统一起来,意思相近的,全部统归为一个词,下次再打算贴标签的时候,就只用这个 词。3个以上的标签基本上能反映出该文章大概要讲什么内容。在使用程序去挑选相关文章的时候,尽可能的匹配所有标签,假如两篇文章有3个以上的标签,那应 该是有相同主题的内容的吧。我见过只要有一个标签相同就推荐出来,我认为这种方法不好,文章开头已经举过了例子。

但标签的方法毕竟是人工来弄,思考和统归过程是很累的。

一个站中相关性比标签还要强的,应该是站内搜索结果。我是指那些具备稍微强大的搜索模块的站内搜索,仅仅用LIKE去匹 配一下数据库的情况,个人认为搜索结果参考价值比较低,特别是只用一个搜索词的情况下。但是大部分站的搜索模块还是比较差的,因此,我的建议是,规定用 户必须使用两个以上的词进行搜索,这样可以保证搜索结果相对准确。

但是如何将搜索应用到文章推荐中呢?

搜索的出发点是关键词,因此你得找到和这篇文章相关的关键词。怎么找呢?一种是直接使用标签,把这篇文章的标签作为关键词 (上面说了,3个标签以上),利用站的搜索模块,搜索出文章,返回到当前文章的页面,列出链接列表即可。另一种比较复杂,通过浏览记录来获取关键词。 (这里需要提一下,面对普通的站,分词的想法被我放弃了。)浏览记录里面记录了一些关键词,包括站外搜索引擎关键词、站内搜索关键词和浏览过的文章的标 签。浏览记录里面需要通过社会络方法,找出与当前文章相关的关键词,再通过站的搜索模块,搜索出相关文章,把链接列表显示出来。

当A通过w搜索进入站的时候,记录下w(如何获取搜索引擎过来的关键词的文章上一大堆),并且标记它跟a文章相关(例如记录到a的一个 字段里,或者另外建立一个表记录对应关系)。当B和A发生了同样的情况的时候,增加相关次数n。当n的值大到一个区间的时候,那么w肯定和a相关。同样的 方法,m、p也跟a相关,可见w、m、p这三个词组和a都相关。拿w、m、p到站的搜索模块中检索,返回的结果可能就是用户需要的。

站内搜索的道理一样,通过记录不同的用户搜索的词和点击进入的结果的一个n值,终找到某些文章相关的关键词,用这些词去搜索,返回的结果应该是比较相关的。

历史浏览记录主要是指用户都阅读了站内的那些文章,在这个用户的浏览器中用cookie记录下来,为文章。下一次有新用户访问上面5次访问内的文章的时候,都可以尝试把这些搜索到的文章作为推荐 文章推荐给用户。

这就有点前文提到的大数据的意味儿了。

结语

无论是那一种方案,你会发现,其实你的站读者在推荐文章的程序中会起到非常大的作用。这是Web2.0带来的影响,除了第二种方案需要迫使用户参 与之外,我们都可以利用程序,神不知鬼不觉的监听用户行为,从中挖掘出有用的信息。而推荐系统,也可能因为人的参与而更加准确,为后面新来的读者提供更重要的信息。

双层叠帐厂家
乐清光伏自动重合闸厂家价格
上海进口红酒批发
推荐阅读
图文聚焦