热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lstm生成文本_CharLSTM模型的文本生成

lstm生成文本在笑话语料库上训练角色级语言模型。我决定尝试解决此问题的方法,我在OpenAI的RequestforResearch博客中找到了该方法。您可以在这里查

lstm 生成文本

在笑话语料库上训练角色级语言模型。

我决定尝试解决此问题的方法,我在OpenAI的Request for Research博客中找到了该方法。 您可以在这里查看代码。 这是用Pytorch编写的,并且受到Fast.ai关于从头实现RNN的精彩课程的启发。

我开始使用OpenAI提供的数据集进行 数据准备 。 数据被转换为小写字母,并且在初次运行时,我选择了评分最高的笑话,其单词长度小于200。这是遇到的所有令牌的示例:

*前面有明确的单词!*这个特定的数据集具有明确的单词/内容,因此这些都出现在模型的输出预测中。 另一个需要解决的有趣问题是从模型的输出中过滤掉不适当的单词-通过检查生成的输出中一组已知的显式单词的出现,或者更好的方法-通过构建干净/不干净的情感分类器! 我还使用在github上找到的更干净的数据集运行了结果。

我为LSTM尝试了几种模型,这些模型主要改变了批次大小,隐藏层。 随着反向传播char令牌数量( bptt )的增加,训练char级模型变得越来越困难。 现在让我们主要关注文本生成部分。 该模型一次输出一个字符,我们的目标是生成一堆(看似可理解且可能很有趣)的文本。 可以采用许多方法:

贪婪的做法:

这是最简单的方法,在该方法中我们递归选择最可能的下一个序列字符。 为了猜测接下来的n个字符,我们需要对模型进行n次推断,这非常快。 然而,在这种情况下,输出的分集较少,并且容易陷入循环。 似乎有一组很可能的char序列,并且预测通常会收敛到这些序列之一。

前K或多项式方法:

这种方法模拟了n个类别中每个结果具有定义的出现概率的结果的发生。 为了向输出中注入更多的多样性,我们没有选择最可能的角色,而是将神经网络建模为概率事件,并观察在一次游戏中输出的令牌。 然而,观察结果,这种方法在产生完整单词方面不是很好。 单词中固有的结构更容易被破坏。 一种替代方法是与贪婪的最佳拟合方法结合使用少量使用跨国发行

组合

我们看到,使用贪婪方法总是会导致循环或重复模式,而top-k方法的多项式会在char级别上产生更多难以理解的单词。 我尝试通过使用贪婪的方法来生成字符来获得两个世界的平衡,直到遇到空格(单词间的空白)。 在这一点上,我使用了多项式生成器,因此单词选择的多样性更大。 这导致文本更加多样化,但整体上具有更多可理解的词。

光束搜索

光束搜索是一种尝试获得更多“最佳结果”的方法,我们着眼于在迭代中预测比一个字符长的序列。 给定一个输入序列,我们要预测接下来的k个字符,而不是预测下一个字符。 这有助于我们在一组输出序列上找到更全局的解决方案。 从某种意义上讲,我们需要考虑所有可能的长度为k的输出字符的波束。 并且需要一些比较指标。

在计算概率时,有几件事可以帮助我们:首先,使用贝叶斯规则,我们可以将获得特定输出序列的概率建模为各个条件概率序列的乘积。 例如:预测“和”给定输入序列“太阳”的得分将为得分= P('a'|输入='太阳')* P('n'|输入='他太阳a')* P ('d'| input ='e sun an')。 其次,soft-max模型的输出通常为对数格式,这使实现更容易,我们可以添加对数值而不是将它们相乘。

下面显示的是实现波束搜索滤波器所需的大多数代码。 我们定义一个数据结构字母来存储给定长度(例如3)和其分数的占位符的所有可能序列。 charscore函数计算为给定输入序列预测给定输出的概率。 beam_search函数迭代可能的序列,并计算每个序列的分数。 beam_text是迭代应用beam_search函数以生成给定长度序列的函数。

波束搜索的这种天真的实现方式花费了相当长的时间(例如,需要8分钟才能产生15个样本)。 下面是另一个示例,我们正在生成15个波束或45个char令牌。

我相信可以通过在CPU上完全运行推理并更好地优化beam_search来大大降低此速度。

未来的实验

这是我一直在尝试的其他几种变体,但是都没有成功。 这些主要是由于波束搜索的运行时间较慢。

贪婪的波束搜索:这类似于波束搜索,但不是搜索所有序列,而是搜索“最可能”的序列。 例如,对于3的光束宽度,我们可以查看3个阶段中每个阶段的前10个最可能的选择。 因此,我们将在每次迭代中搜索10 * 10 * 10个光束。 当然,这可以大大减少延迟问题,但是结果很快就会陷入一个循环,重复不断。 例如,两个光束图案“ ..”和“…”不断重复。

为了增加多样性,我在计算波束得分时将各个概率相乘而不是相加。 结果更加多样化,但不一定更好。

[i, j, k], i_score * j_score * k_score]

参考文献:

fast.ai·使神经网络不再酷
fastai是第一个为所有最常用的深度学习提供单一一致接口的深度学习库。www.fast.ai
如何实现用于自然语言处理的波束搜索解码器
自然语言处理任务(例如字幕生成和机器翻译)涉及到生成以下序列的信息: machinelearningmastery.com

https://github.com/coderbee/jokes/

短笑话数据集

翻译自: https://hackernoon.com/text-generation-for-char-lstm-models-685dc186e319

lstm 生成文本



推荐阅读
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • PyTorch实用技巧汇总(持续更新中)
    空洞卷积(Dilated Convolutions)在卷积操作中通过在卷积核元素之间插入空格来扩大感受野,这一过程由超参数 dilation rate 控制。这种技术在保持参数数量不变的情况下,能够有效地捕捉更大范围的上下文信息,适用于多种视觉任务,如图像分割和目标检测。本文将详细介绍空洞卷积的计算原理及其应用场景。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 本文探讨了BERT模型在自然语言处理领域的应用与实践。详细介绍了Transformers库(曾用名pytorch-transformers和pytorch-pretrained-bert)的使用方法,涵盖了从模型加载到微调的各个环节。此外,还分析了BERT在文本分类、情感分析和命名实体识别等任务中的性能表现,并讨论了其在实际项目中的优势和局限性。 ... [详细]
  • 本文将深入探讨生成对抗网络(GAN)在计算机视觉领域的应用。作为该领域的经典模型,GAN通过生成器和判别器的对抗训练,能够高效地生成高质量的图像。本文不仅回顾了GAN的基本原理,还将介绍一些最新的进展和技术优化方法,帮助读者全面掌握这一重要工具。 ... [详细]
  • 2018年热门趋势:轻松几步构建高效智能聊天机器人
    2018年,构建高效智能聊天机器人的简易步骤成为行业焦点。作为AI领域的关键应用,聊天机器人不仅被视为企业市场智能化转型的重要工具,也是技术变现的主要途径之一。随着自然语言处理技术的不断进步,越来越多的企业开始重视并投资于这一领域,以期通过聊天机器人提升客户服务体验和运营效率。 ... [详细]
  • 不用蘑菇,不拾金币,我通过强化学习成功通关29关马里奥,创造全新纪录
    《超级马里奥兄弟》由任天堂于1985年首次发布,是一款经典的横版过关游戏,至今已在多个平台上售出超过5亿套。该游戏不仅勾起了许多玩家的童年回忆,也成为强化学习领域的热门研究对象。近日,通过先进的强化学习技术,研究人员成功让AI通关了29关,创造了新的纪录。这一成就不仅展示了强化学习在游戏领域的潜力,也为未来的人工智能应用提供了宝贵的经验。 ... [详细]
author-avatar
一个怪瓜的自白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有