You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改LSTM文本生成代码 获取Top3预测结果实现多样化生成

LSTM文本生成Top3候选采样修改方案

核心修改逻辑是替换原有np.argmax固定取最高概率词的逻辑,改为从预测概率Top3的候选词中随机选择,即可实现相同输入生成多样化语句的效果。

关键修改点

  • 移除原有固定取概率最大值的np.argmax逻辑
  • 对模型输出的概率分布排序,提取概率最高的3个词对应的索引
  • 支持按候选词的原始概率做加权随机抽样,比等概率随机选的生成结果更自然
  • 修复原代码中ouput_word的拼写错误(原代码变量名漏写t,会触发运行报错)

修改后完整代码

import numpy as np

def prediction(seed_text, next_words, top_k=3):
    for _ in range(next_words):
        token_list = tokenizer.texts_to_sequences([seed_text])[0]
        token_list = pad_sequences([token_list], maxlen=max_seq_length-1, padding='pre')
        # 拿到单样本的全词表预测概率
        pred_probs = model.predict(token_list, verbose=0)[0]
        
        # 取概率最高的top3候选的索引
        topn_indices = pred_probs.argsort()[-top_k:][::-1]
        # 提取这3个候选对应的概率,做归一化后加权随机选
        topn_probs = pred_probs[topn_indices]
        topn_probs = topn_probs / topn_probs.sum()
        # 按概率加权随机抽1个候选索引
        predicted = np.random.choice(topn_indices, p=topn_probs)
        
        output_word = ""
        for word, index in tokenizer.word_index.items():
            if index == predicted:
                output_word = word
                break
        seed_text += ' ' + output_word
    return seed_text

代码说明

  • pred_probs.argsort()[-top_k:][::-1]:argsort会返回概率从小到大排序的索引,取最后3个就是概率最高的3个索引,最后反转是为了让索引按概率从高到低排列
  • 对Top3候选的概率做归一化后加权抽样,会让概率更高的候选被选中的概率更大,既保证生成内容的合理性,又能带来多样性;如果想要完全等概率选3个词,把np.random.choice的p参数去掉即可
  • 函数加了top_k参数,后续想调整候选池大小(比如改成Top5)直接传参就行,不用改内部逻辑

如果想要生成结果的多样性更高,可以适当调大top_k值;如果想要内容更稳定,就把top_k调小。

内容的提问来源于stack exchange,提问作者FlubberBeer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:39:32