小言_互联网的博客

用机器学习创建《哈利波特》的QuoteBot

229人阅读  评论(0)

全文共2146字,预计学习时长4分钟

如今,语言模型得到广泛应用。电子邮件、WhatsApp文本、自动聊天机器人中的单词预测都是基于语言模型进行的。

生成模型将文本作为输入对象,学习其中的词汇和句子结构后生成文本。《Python深度学习》(Deep Learning with Python)(Francois Chollet)一书能够帮助我们了解LSTMs以及神经网络是如何学习文本的。以下指南可以帮助大家更好地了解N-grams语言模型。

本文将使用生成模型创建一个QuoteBot,它可以创建哈利·波特的语言。

1.数据

首先,下载《哈利波特》系列的电影剧本。首个挑战便是在python中使用PDF格式文档。有一个“pdf2txt”的文件包,可以将这些PDF格式的文件转换为.txt格式文件。

pdf2txt.py -o HP1_movie_script.txt HP1.pdf

这样操作很变得更加容易。

2.准备工作

本文采用的Quotebot是针对角色特别设定的。因此,要学习特定人物的讲话风格,只需要找出相关对话即可。把每个角色台词分开,并作出标记。

 

因为QuoteBot需要一个生成模型,所以在数据准备阶段时只需创建一个语料库并对单词做出标记即可。而其他传统的NLP预处理步骤则没有采用的必要了,因为作者想要保持原始的文本状态,这样,模型就可以学习原有的语言序列。

3.模型

N元模型(N-grams model)

N-grams模型是基于单词或字符出现的条件概率形成的。至于QuoteBot,本文创建了一个单词模型,它能在给定一组语料库单词的情况下,查看下一个单词出现的概率。

一元模型和二元模型通常过于简单,无法创建连贯的文本。三元模型以及以上两种模型都是非常有用的。但是,我们应该谨慎使用高阶“模型”。例如,十元模型只会记住句子内容,而不会学习导致模型“过度拟合”的结构。       

       

三元模型比二元模型输出更加连贯,例如:

Have to admit, thought I did think maybe I saw something — when it blew away?” — Ron Weasley

四元模型,如

“Really? Was n’t you had to roll under the bed last night to avoid getting cut to ribbons! A person could die being your friend, Harry!” — Ron Weasley

酷毙了!利用这些N-grams模型,我们想知道在深入学习领域,递归神经网络是否有用。具体来说,LSTM模型是否有用。

LSTM模型         

     

LSTM模型也可以是单词模型或字符模型。至于QuoteBot,本文尝试了两种方法。

· 字符级LSTM

模型细节:1层(带退出机制),激活函数——softmax,优化器——RMSprop,损失函数——categorical cross-entropy。     

         

让模型运行100次,并且根据以上模型细节,char级模型给出了一个不怎么连贯的输出。如:        

       

“Ron! you’ll Iead the evolve those D wow gar’ What honored buitee. what’s that means, sir? I don’t enlw what happened? Thoss’ Iimay they learn admire me phec.” — Harry

句中的单词不够完整,句子结构也不太正确。

· 单词级LSTM

模型细节:3层(带退出机制),激活函数——ReLU & softmax,优化器——adam,损失函数——categorical cross-entropy。

将模型运行300次(在Google Colab上),采用以上这些细节,单词层面的模型输出要比Char级更好。

“Evening Harry I have an old luck of the maze continued you will also not been afraid Harry I think it’s Voldemort.” — Dumbledore

这样好多了!听起来字符和台词都是连贯的。

4.创建一个QuoteBot

基于每个生成模型的输出结果,选择三元模型来创建QuoteBot。

用Flask创建一个应用程序,它将一个字符作为输入,并输出特定字符的引用!

5.不断学习

少即是多?——错!深度学习模型需要一个大型数据集来从语料库中“学习”单词的出现顺序。为模型提供一个更大的语料库,对超参数进行更多的调整,这无疑会提高模型的性能。

创建更大的语料库可以通过以下两种方式实现:

1.数据扩充——基于现有语料库模拟更多字符文本。

2.范围扩展——将文本范围从《哈利波特》系列电影扩展至其他任何希望模型学习的文本。

多训练对优化模型输出总是好的…Snape表示赞同!


传送门: https://github.com/asmitakulkarni/QuoteGenerator

推荐阅读专题

留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货

编译组: 张璐瑶、殷睿宣
相关链接:
https://towardsdatascience.com/building-a-quotebot-with-machine-learning-eca39272e3b7
如需转载,请后台留言,遵守转载规范

推荐文章阅读

长按识别二维码可添加关注

读芯君爱你


转载:https://blog.csdn.net/duxinshuxiaobian/article/details/102030666
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场