文章目录
前言
发现自己已经很久没有更新博客了,读研的这些日子其实过得并没有想象中的那么顺利。这学期发现自己其实并不适合搞科研…唉,希望能顺利毕业吧。
言归正传,本篇博文将介绍如何利用TextRank算法实现一个可以提取QQ群聊天热词的机器人。制作这个机器人的初衷是:有的QQ群非常活跃,可能没一会儿,消息就99+了,这样时间久了,就不想去翻历史记录了。但是在这些历史记录中,可能藏有我们感兴趣的话题,利用这个聊天机器人,就可以提取一段时间(例如一天)以内的聊天热词,这样我们就可以快速地了解这一天群内的小伙伴讨论了什么话题。
由于我比较喜欢科幻,我就把这个机器人称为FG(Fifth Generation),这是刘慈欣长篇科幻小说《超新星纪元》里的一台超级计算机,负责协助管理那个只有孩子们的世界。本文后续也会使用FG来指代这个聊天机器人。
效果
在讲解FG实现的过程前,先看下FG的最终效果:

在FG的输出中,有这样几个元素
- 词云
- 前Top3个关键热词
这两个元素可以说是FG的核心功能之一了。之所以说之一,是因为FG还有其他技能,但这并不是本文讨论的重点。
TextRank算法
TexkRank算法起源于谷歌的PageRank算法,这里先简单介绍一下PageRank算法。
PageRank算法
PageRank算法最早是使用在搜索引擎的网页排序中,也就是可以把某一个搜索关键词相关的,最重要的网页排在前面。这个算法的主要思想是参考了民主投票的思想。
考虑这样的一幅图结构,图中的每一个节点表示一个网站,节点之间的有向边表示弧头的网站中有一个链接指向了弧尾的网站。

下面介绍PageRank的计算过程,在PageRank算法中,使用PR值来衡量一个网站的重要性:
- 刚开始的时候,假设所有网站的PR值都是一样的,为 1 n \frac{1}{n} n1,其中 n n n表示网站的总数量。例如上图, n = 4 n=4 n=4,于是每一个网站的初始PR值为 1 4 \frac{1}{4} 41
- 对于每一个网站,其出度的个数表示了这个网站“投”给其他网站的票数,也就是说,要将自己的PR值平均分给这些网站。例如上图,网站A有3个出度,那么A将自己的PR值平均分给网站B、C、D,每一个站点收到的值为 1 4 ∗ 1 3 = 1 12 \frac{1}{4} * \frac{1}{3} =\frac{1}{12} 41∗31=121
- 对于一个网站来说,其一次迭代后的PR值为其他网站“投”给自己票数的总和。例如上图中的网站B,收到了来自网站A和D的投票。因此,网站B的PR值为 1 12 + 1 8 = 5 24 \frac{1}{12} + \frac{1}{8} = \frac{5}{24} 121+81=245
- 重复第二步和第三步,直到每一个网站的PR值收敛即可
我们可以引入矩阵来加快计算的过程,这个矩阵叫做概率转移矩阵,其中的每一个元素代表了从某一个网站跳转到其他网站的概率。
上图的概率转移矩阵如下:
M = [ 0 1 / 2 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 0 0 1 / 3 0 1 0 ] M = \begin{bmatrix} 0&1/2& 0& 1/2\\ 1/3& 0& 0& 1/2\\ 1/3 & 1/2 & 0& 0\\ 1/3& 0& 1& 0 \end{bmatrix} M=

本文介绍如何利用TextRank算法实现QQ群聊天热词提取机器人FG。先阐述TextRank源于PageRank算法,介绍其图构建等原理,接着说明实现过程,包括会话监听、数据预处理、分词,用TextRank抽关键词并生成词云,还设置了定时任务,最后给出代码库地址。
最低0.47元/天 解锁文章
1678

被折叠的 条评论
为什么被折叠?



