• 【机器学习300问】121、RNN是如何生成文本的?


            当RNN模型训练好后,如何让他生成一个句子?其实就是一个RNN前向传播的过程。通常遵循以下的步骤。

    (1)初始化

            文本生成可以什么都不给,让他生成一首诗。首先,你需要确定采样的起始点。这可以是一个特殊的开始标记或者是一个随机选取的词汇索引作为第一个时间步的输入。如果是基于字符的模型,则可能从一个特殊字符或空格开始。

    如果什么都不输入,那么a^{<0>}=0x^{<1>}=0

    (2)前向传播

            将起始输入送入RNN模型,得到第一个时间步的隐藏状态。对于之后的每个时间步,使用上一时间步的隐藏状态和当前输入(上一时间步模型预测的词或字符的索引)来计算新的隐藏状态,并得到下一个词的概率分布。

    第一个时间步得到的输出(吴恩达老师手写)
    第一个时间步(吴恩达老师手写)

            模型会得到一个概率分布,在这个分布上采样以预测下一个token。通常会使用softmax函数输出每个可能token的概率。例如,有10000个token的词典,那么得到的就是每一个token的概率。

    (3)采样

            根据当前时间步的词概率分布进行采样,以决定下一个词。贪婪采样为例,每一步都选择概率最高的词作为下一个词,也就是y^{<1>}

    举例说明一下,比如我们的RNN模型在一个给定时间步产生了以下5个token及其对应概率

    TokenProbability
    the0.4
    cat0.25
    sat0.15
    on0.1
    mat0.1

            'the'具有最高的概率0.4。因此,根据贪婪采样策略,我们会选择'the'作为下一个词。 

    (4)更新序列

            将采样出的token加入到输入序列的末端。如果模型使用固定长度的序列,则需要将序列的第一个token去掉,以确保长度保持不变。

    (5)重复采样

            反复执行步骤2至步骤4,逐步生成新的tokens,将它们加入到序列中。继续这个过程直到达到句子结束标记或达到预定最大序列长度。

    (6)终止采样

            设定一个终止条件,比如:达到预定的最大序列长度;遇到结束标记(如);基于某种规则判断生成完成(如遇到句号、问号等)。

  • 相关阅读:
    hiredis的代码示例
    【求助】西门子S7-200PLC定时中断+数据归档的使用
    零基础如何学好Photoshop
    idea所有历史版本下载
    实现DM VXN 的各阶段
    Spring(bean的生命周期)
    个人商城系统开源(发送邮箱验证码!)
    初级java每日一道面试题-2024年7月16日
    Kubernetes技术与架构(八)
    数据结构与算法5-排序算法
  • 原文地址:https://blog.csdn.net/qq_39780701/article/details/139754711