上个月,我尝试构建一个 reddit 评论机器人,通过结合两个预先训练的深度学习模型 GPT-2 和 BERT 生成自然语言回复。在这里我想一步一步地介绍一下我的工作,这样其他人就可以用我所建立的东西来工作了。如果愿意,可以直接跳转到项目代码://p1-tt.byteimg.com/origin/pgc-image/RqXZfSTI19Hua5.jpg" style="width: 650px;">
这里有很多步骤,但我希望它们不要太混乱。以下是我将在这篇文章中解释的步骤。
步骤 0:从你最喜欢的 reddit 文章中获取一些 reddit 评论数据,并将其格式化为类似「comment[SEP]reply」的字符串
步骤 1:微调 GPT-2 以生成格式为「comment[SEP]reply」的 reddit 文本
步骤 2:微调两个 BERT 分类器:
a: 区分真实回复和 GPT-2 生成的回复
b: 预测评论将获得多少次支持
步骤 3:使用 praw 下载当前评论
步骤 4:使用微调的 GPT2 为每个评论生成多个回复
步骤 5:将生成的回复传递给两个 BERT 模型,以生成对真实性和投票数的预测
步骤 6:使用一些标准来选择要提交的回复
步骤 7:使用 praw 提交所选评论
步骤 8:享受成果!
获取大量 reddit 评论数据
与任何机器学习项目一样,只有获得用于训练模型的数据,才能启动项目。
我用来微调模型的数据来自之前检索到的 reddit 评论大型数据库://p1-tt.byteimg.com/origin/pgc-image/RqXZfT7IEWGZq9.jpg" style="width: 650px;">
基于BERT 的支持票预测的 ROC 曲线
在模型交叉验证性能的支持下,我很高兴将它连接到一个实时评论系统,并开始发布我的机器人的想法!
用PRAW拉实时评论
尽管我可以使用 bigquery 上的数据生成训练集,但大多数数据实际上都是几个月前的。在社交媒体网站上回复几个月前的评论是一件非常不正常的事情,因此能够以某种方式从 reddit 上获取最新的数据非常重要。
幸运的是,我可以使用 praw 库和下面的代码片段,从几个我认为会产生一些有趣响应的 reddit 中的前 5 个「上升」帖子中获取所有评论。
for subreddit_name in ['sciencefiction',
'artificial',
'scifi',
'BurningMan',
'writing',
'MachineLearning',
'randonauts']:
subreddit = reddit.subreddit(subreddit_name)
for h in subreddit.rising(limit=5):
我可以在生成器和鉴别器中运行每条评论以生成一个回复。
运行生成器和鉴别器
最后,我只需要构建一些东西来重新加载所有经过微调的模型,并通过它们传递新的 reddit 评论来获得回复。在理想的情况下,我会在一个脚本中运行 GPT-2 和 BERT 模型。不幸的是,设计人员在实现 gpt2-simple 包的过程中有一个怪癖,使得在同一个环境中无法实例化两个计算图。
所以,我自己运行了一个 GPT-2 生成器 notebook(https://drive.google.com/open?id=1Z-sXQUsC7kHfLVQSpluTR-SqnBavh9qC),下载最新的评论,生成一批候选回复,并将它们存储在我的 Google 驱动器上的 csv 文件中。然后,我在一个单独的 BERT 鉴别器 notebook(https://drive.google.com/open?id=1mWRwK1pY34joZul5gBeMortfTu8M9OPC)中重新加载了候选的回复,选择最好的回复并将其提交回 reddit。
你可以在项目的 github repo(https://github.com/lots-of-things/gpt2-bert-reddit-bot)或 Google Drive文件夹(https://drive.google.com/open?id=1by97qt6TBpi_o644uKnYmQE5AJB1ybMK)中查看整个工作流。如果你认为事情可以解释得更清楚,或者你发现了错误,请将问题提交给项目。
最后一步:享受成果
我在 tupperware party 的 reddit 帐户下提交了所有回复(希望不会因为商标问题而被关闭)。你可以在这里(https://www.bonkerfield.org/2020/02/combining-gpt-2-and-bert/#replies)查看模型输出的一些亮点,或者查看注释的完整列表,以检查系统输出的所有内容。我也在 Google Drive 上共享了一个文件夹(https://drive.google.com/drive/folders/1a2MhIqL6jvyJ-3bGCXAweLbYtNXSUei7?usp=sharing),其中包含了所有的候选答案以及 BERT 模型中的分数。
最后,我知道在创作这样的作品时,肯定有一些伦理上的考虑。所以,请尽量负责任地使用这个工具。
via:https://www.bonkerfield.org/2020/02/reddit-bot-gpt2-bert/
雷锋网雷锋网雷锋网
版权声明:CosMeDna所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系删除!
本文链接://www.cosmedna.com/article/383343279.html