作者 | Vincent Tatan
来源 | Medium
编辑 | 代码医生团队
问题陈述
“Damn, after my 3 days leaves, I’m already lost of what’s important on my Slack group” “There should be a quick access to the posts which are most relevant and get me updated quickly”
同行评审或论坛的最大问题是网站上大量可用信息。很多时候对与他们一直在搜索的内容无关的评论数量感到沮丧。以Reddit为例,主页上有很多帖子。所有的信息杂乱都很难跟踪。
这些Reddit帖子显示了一个论坛可能会在几天不活动的情况下带来多大的混乱
在本文中,将更多地了解如何从Reddit等论坛中提取信息更容易,更直观。实现此目的的一种方法是构建一个仪表板页面,用于从论坛中提取关键主题并将其打包在可过滤的仪表板中以便快速浏览 - 将称之为自动生成的常见问题,因为它通过文本语料库并提取主题以形成创建常见问题(FAQ)/帖子的趋势和模式。这有助于在合适的时间保持联系。
为什么自动生成FAQ?
虽然总是有搜索引擎可以在这些论坛上找到需要的信息,但功能却受限制,特别是对于那些不活跃或落后于讨论流程的用户。最终搜索引擎对于已经知道他们应该寻找什么的人来说非常有用(例如最新的机器学习论文)。但是对于想要为热门话题做出贡献或想要发现与主题相关的新想法/信息来说,它的功能可能没什么用。
考虑以下知识矩阵
知识矩阵及其间的解决方案
在学习过程中存在四个知识领域。第一个涉及已知的知识,并且易于获取以帮助解决人们熟悉的问题。接下来将是已知的未知数,或者目前未发现但可访问的知识。一个例子是查找有关python编程语法的信息,目前还不知道。第三种形式是未知的知识。这被定义为知道存在但不知道如何访问/获取的知识。一个例子是完成一项不知道如何开始/研究的任务。最后一个案例是未知的未知数,一个他/她不知道的知识。在这种情况下,一个人实际上对正在发生的事情以及重要的事情一无所知。
解决方案将帮助C和D领域,用户可能不知道在给定时间什么是重要主题。目标是为用户提供知识仪表板,以便快速浏览论坛讨论。
目的和Github代码
此概念证明(POC)的目的是作为乔治亚理工学院计算机科学硕士的作业提交的一部分创作的,作者目前正在整理。本文中的部分内容经过修改,以更好地反映一般受众的需求。请参考文档:
https://docs.google.com/document/d/1hepA07dBfL_7JMQW0G3SAQekAbd3uNrDFxpzt9MPlvo/edit
目的是使用Python和Flask / Dash将此应用程序构建为网页应用程序。其他工具如Github for Version Control也将实施。Github代码:
https://github.com/VincentTatan/EduTechAutoGenFaq
工作流程
创建Auto Gen常见问题需要考虑3个步骤
创建Auto-Gen FAQ的工作流程
用Praw Python库提取Reddit
如何提取Reddit语料库?
身份验证从使用Reddit的praw库开始。由于有许多可用资源,不会详细讨论如何准备好身份验证。相关链接如下:
http://www.storybench.org/how-to-scrape-reddit-with-python/
Reddit praw代码输入授权配置文件
然后将获得将被导出的subreddit信息。
Reddit Code获得某个subreddit频道
接下来使用以下元数据将hot_python导出到topics.csv
从Reddit Praw中提取帖子后检索的元数据
主题提取
本节说明如何在Python中进行近似主题建模
将使用一种称为非负指标因子分解(NMF)的技术,该技术用于从单词包(单词列表)中查找提取主题。NMF引入了确定性算法,以使用文本语料库创建单个表示。由于这个原因,NMF被表征为ML算法。
有关NMF等主题建模技术的详细信息如下:
https://www.aclweb.org/anthology/D12-1087
使用sklearn Count Vectorizer来矢量化单词
这将在topics.csv中的1115个帖子中返回500个单词。
将使用NMF来获取文档主题矩阵(这里的主题也将被称为“组件”)以及每个主题的顶部单词列表。将使用相同的变量名称来明确类比:doctopic和topic_words
创建的doctopic和主题词
然后将生成如下的主题和可视化
DocTopic创建
这将为5个主题创建可视化,每个主题将根据NMF管理的欧几里德距离将5个密切相关的单词组合在一起。在给定主题长度的情况下附加argmax的计算也有助于为语料库中的每个文档定义基本主导主题。
以下是找到的5个主题
主题1:omscs计划学生的工作课程
主题2:cs本科学位非评论
主题3:格鲁吉亚科技在线硕士课程
主题4:课程学期学生新
主题5:时间确实是工作提供承诺
主题分析的分析与可视化
然后尝试将主题映射到每个相关帖子,将计算与某些主题相关的帖子数量,并在饼图和折线图中将其可视化。
分析
可以看到,顶级主题讨论了硕士生和非硕士生的工作机会。接下来是omscs学生的时间承诺。然后由程序和本科课程。
分析
1.在5月和8月,可以看到关于硕士生的工作和提议方面的话题越来越多
2. 10月份对OMSCS学生的时间和工作量感兴趣的趋势(可能是由于新的sems的开始)
3.对于整体活动,可以看到4月的下降,但10月的活动增加
Dash Visualizations
将使用Dash Python,它是在Plotly和Flask之上构建的Python数据可视化框架。这将是在本地进行可视化和部署的基础。请查看演示文稿和演示,以获得更加动画的应用程序视图。
通过应用程序,用户将能够选择最近最重要的主题,过滤它们并显示时间线。此外下表将根据所选主题展示最相关的帖子。因此用户可以快速浏览一下此仪表板,而不是点击所有可用帖子,以便了解讨论情况。
只需点击几下即可过滤相关帖子。
Dash Python Visualization
调查:应用程序有用吗?
在构建以下原型之后,构建了一个调查,以确认应用程序的有用性。这些是发现的结果,表明93%对非常有用是有用的。用户还发现该应用程序非常直观,可以节省手动搜索未分类帖子的时间。
应用程序的实用性
建议的改进
演示
计算机科学教育技术在线硕士自动生成常见问题解答
结论和未来的工作
这个项目有机会解决许多人似乎在Reddit或教育论坛等典型论坛上遇到的实际和相关问题。可以添加对功能的建议改进,但是现在这似乎正在处理确切需要的东西。