全文共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表示赞同!
推荐阅读专题
留言 点赞 发个朋友圈
我们一起分享AI学习与发展的干货
推荐文章阅读
长按识别二维码可添加关注
读芯君爱你
转载:https://blog.csdn.net/duxinshuxiaobian/article/details/102030666