【AI达人创造营第二期】基于LSTM的现代诗生成器


本项目利用LSTM模型实现现代诗自动生成,解决个人创作难题。数据集含约2000首爬取的现代情诗,另混合部分古诗补充数据量。采用LSTM模型,其通过逻辑门优化长文本语义理解。项目含训练与使用文件,models文件夹存两种风格模型。加载模型时,输入前缀和开头即可生成诗句,虽部分内容语义模糊,但能生成连贯文本,实现核心功能。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

基于LSTM自动生成现代诗

数据集使用

本项目一共使用了两个数据集。

  1. 现代情诗的数据集,是我通过网络爬虫爬取的现代诗,大致有2000首。
  2. 古诗集数据,考虑到数据集1的仅有0.5M,数据量较少,所以混合了部分古诗数据进行训练。

LSTM模型简介

LSTM是一种非常流行的循环神经网络,相比较于simpleRNN对于较长的句子理解能力较差(因为RNN不加选择地更新ceil state,导致对于前文地信息地丢失),而LSTM通过增加四个逻辑门,有选择地更新ceil state,这使得LSTM对于长文本语义理解上下推断有着更加好地效果。 具体地原理有很多大佬讲过,大家可以看看这份写的相当透彻的Understanding LSTM network。

效果演示

我寄愁心与明月 一棵落落山染来 我沿着一匹回银花的曲子高走短过的那样 我已是那么都在秋天 没有停动地流动一根线儿 一个人在他的身口里 你的手里还在我的身送面指成远 我不成日亮 你不会把彼此装上
我寄愁心与明月。都将别,一回一回,莫问无情何。
无事无人知,无生无与非

模型训练和模型评估

详细的训练流程在参见model_LSTM.ipynb,其中很全面地写了注释和核心思想。

文件组织

  • main.ipynb可以直接拿过来玩,自动加载训练好的模型
  • model_LSTM.ipynb是训练文件,写了详细的注释,调用它则可以训练自己的模型。
  • 【静态图测试】文件夹被废弃了。。。原本打算导出静态图模型但遇到了一点点问题,挖个坑回头解决
  • 【models】文件夹存放了不同数量样本训练好的两个模型,可以直接调用
  • 【vocab】文件夹存放用于制作词汇表的数据

加载模型进行测试

In [1]
# 导入相关依赖from paddle.io import Datasetimport paddle.fluid as fluidimport numpy as npimport paddleimport paddle.nnfrom paddlenlp.embeddings import TokenEmbeddingfrom paddlenlp.data import JiebaTokenizer,Vocabimport visualdl
In [3]
# 定义超参数class Config(object):
    # version = 'models/version1-modern/version1.pdparams' # 现代诗风格
    version = 'models/version2-ancient/version2.pdparams' # 古体诗风格
    maxl = 120
    filepath = "vocab/poems_without_title.txt"
    filepath2 = "vocab/poems_zh.txt"
    embedding_dim = 300
    hidden_dim = 512
    num_layers = 3

    max_gen_len = 150
    prefix = "爱你一生一世" # 前置风格,可以调整生成文本的风格
    beginning = "陪伴是最长情的告白" # 需要给出诗篇的开头,模型进行续写config = Config()
In [4]
# 加载词汇表vocabdic = {'[PAD]':0,'':1,'':2,'[UNK]':3}
cnt=4with open (config.filepath) as fp:    for line in fp:        for char in line:            if char not in dic:
                dic[char] = cnt
                cnt+=1with open (config.filepath2) as fp:    for line in fp:        for char in line:            if char not in dic:
                dic[char] = cnt
                cnt+=1vocab = Vocab.from_dict(dic,unk_token='[UNK]')
In [5]
# 加载模型class Poetry(paddle.nn.Layer):
    def __init__(self,vocab_size,embedding_dim,hidden_dim):
        super().__init__()
        self.embeddings = paddle.nn.Embedding(vocab_size,embedding_dim)
        self.lstm = paddle.nn.LSTM(
            input_size=embedding_dim,
            hidden_size=hidden_dim,
            num_layers=config.num_layers,
        )
        self.linear = paddle.nn.Linear(in_features=hidden_dim,out_features=vocab_size)    def forward(self,input,hidden=None):
        batch_size, seq_len = paddle.shape(input)
        embeds = self.embeddings(input)        if hidden is None:
            output,hidden = self.lstm(embeds)        else:
            output,hidden = self.lstm(embeds,hidden)
        output = paddle.reshape(output,[seq_len*batch_size,Config.hidden_dim])
        output = self.linear(output)        return output,hidden

poetry = Poetry(len(vocab),config.embedding_dim,config.hidden_dim)
poetry.set_state_dict(paddle.load(config.version))
In [6]
results = [i for i in config.beginning]
start_words_len = len(results)input = (paddle.to_tensor(vocab(""))).reshape([1,1])
hidden = Noneif config.prefix:
    words = [i for i in config.prefix]    for word in words:
        _, hidden = poetry(input, hidden)        input = (paddle.to_tensor(vocab(word))).reshape([1,1])for i in range(config.max_gen_len):
    output, hidden = poetry(input, hidden)    if i < start_words_len:
        word = results[i]        input = (paddle.to_tensor(vocab(word))).reshape([1,1])    else:
        _,top_index = paddle.fluid.layers.topk(output[0],k=1)
        top_index = top_index.item()
        word = vocab.to_tokens(top_index)
        results.append(word)        input = paddle.to_tensor([top_index])        input = paddle.reshape(input,[1,1])    if word == '':        del results[-1]        breakresults = ''.join(results)print(results)


# ai  # 循环  # rnn  # lstm  # 加载  # 词汇表  # 写了  # 自动生成  # 大佬  # 自己的  # 无事  # 是一种  # 我不  # 都在 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 3步教你用AI总结会议录音,再也不怕错过重点  机器学习赋能AI生产力工具:提升效率与智能决策  LALAL.AI教程:音视频人声分离、降噪终极指南  Depseek如何让提示词包含上下文_Depseek上下文补充提示词写法【步骤】  AI威胁论:超人工智能ASI时代来临,人类如何应对?  Jetson SegNet: 语义分割深度探索与实践  播客数据深度分析:揭秘全球听众分布及增长策略  GitHub Copilot终极指南:提升代码效率与质量  CodeRabbit CLI: AI 代码审查工具,提升编码效率与代码质量  解读诗歌中的女性视角:Shelley Puhak 的作品解析  通义千问怎样写小红书文案_通义千问文案写作步骤【步骤】  想做自媒体?教你用AI批量生成视频脚本,实现内容自由  Claude怎么用新功能诗歌创作_Claude诗歌创作使用【方法】  快速生成PPT工具怎么用_快速生成PPT工具使用方法详细指南【教程】  轻松入门:如何创建自己的图像识别模型  Gamma做年终总结PPT怎么用_Gamma做年终总结PPT使用方法详细指南【教程】  ClickUp AI Agents:项目管理的革命性突破  使用Autogen框架进行业务分析和执行报告生成  即梦AI怎样生成产品描述_即梦AI产品描述生成与卖点提炼【实操】  AI写作工具检测:学生如何避免学术不端行为  如何用AI一键生成名片设计 AI个人电子名片制作指南【教程】  Brevio AI:利用AI代理提升电商营销效果  定价3499炒到1.2万,豆包AI手机遭“封杀”,变革之路何去何从?  AI猫咪视频创作指南:轻松打造百万级YouTube Shorts  Wrike:AI赋能的项目管理平台,提升电商效率与团队协作  Universe:用 iPhone 在 5 分钟内打造网站的终极指南  零成本AI营销机构:2025年自动化运营,颠覆传统营销模式  AI社交媒体自动化:n8n与HeyGen打造个性化内容引擎  利用 DeepSeek 进行大规模 C++ 代码库审计  AI 时代高效开发:版本控制与 AI 协同工作流  微信AI数字人怎样切换形象风格_微信AI数字人形象更换与风格选择【技巧】  SteosVoice:电报语音克隆终极教程  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Kindroid AI:打造你的专属虚拟伙伴,开启AI社交新体验  文心一言 4.0 在公文写作规范中的实战技巧  AI工具投资指南:10个关键要素,助您明智决策  豆包AI里的智能体有什么用_不同类型智能体使用场景介绍  CareerCraft AI:提升大学生实习就业的智能平台  Claude 4.5 深度解析: Coding, VS Code & AI Agent 新纪元  ChatGPT如何进行数据可视化构思 ChatGPT图表设计指南  ChatGPT 如何助力建筑承包商?三大实用技巧解析  AI绘画工具怎么用_AI绘画工具使用方法详细指南【教程】  AI在软件测试中的应用:提升效率与质量的关键策略  VoiceBrigade:AI 赋能,革新语音合成与内容创作  重温经典:宝可梦动画中的精彩瞬间与幕后花絮  Midjourney怎样加元素词丰富画面_Midjourney元素词技巧【方法】  Gemini怎样写精准提示词_Gemini提示词编写方法【步骤】  GitHub Copilot与Azure AI Foundry模型:加速AI编程实践  雷小兔ai智能写作怎样导入素材_雷小兔ai智能写作素材上传与引用【技巧】  GoHighLevel AI Agent:终极指南,释放你的CRM潜力 

 2025-07-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.