语句生成之胡编乱造哲理和爱情生成器


这是一个基于GRU的哲理与爱情文本生成器。用wordstest.txt作数据集,通过字映射构建字表,模型含嵌入层、双向GRU层和全连接层。训练时以固定长度文本为输入预测下一字,迭代优化参数。使用时输入开头文字,模型生成指定长度文本,生字会提示未学会。

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

胡编乱造哲理和爱情生成器

高人打造计划

因为数据集偏向哲理和爱情

效果展示:

输入:

我对你的爱

输出:

我对你的爱恋中,我愿为此生,爱爱可多少善果才能与他漫步人生路?朋友如海水般,承载你无数的泪花;欢乐时,白浪掀天,波涛声依旧没有能够脱离其中。执子之手,往事既往不咎,执子之手,往事既往不咎,执子之手,我们注定?一昧的消沉,失落,伪装出虚伪的自己,只愿愿以一袭泯念过无数的看着,安慰着,轻抚疼痛的心。

再不会为了一句话,而和人争得面红耳赤;再不会为了一句话,而和此刻绽放。   站在都市的一隅,感受那些渐行渐远,耳际忽而响起<怒放的生命>的旋律,激起我心中一股莫名的渴望。轻轻拉开窗帘,一场春雨,淋湿了虔诚向往的花朵,许许多多的回忆片段如同雨浇开的花香,坐在窗帘的边缘点燃生命的歌喉。

古藤老树昏鸦,断肠人在天涯。韶光荏苒,记不起年少的轻狂,不再想当年的慷慨激昂。一路奔波流浪,一路磕磕绊绊。笑荏苒燃的前世与无奈,尘世中没有哪一空中的征程时,点出事情中痴迷,无奈生命里伏伏起起,你有经的青春很

操作使用方法

就是从上到下运行全部代码,注释掉倒数第二个代码块,这个为训练的,然后最后一个代码块就是测试代码块,就是玩的。

让你输入开头几个字,然后输出自定义字数的句段。

简单的技术

本项目主要就是用了GRU,然后数据集构造非常简单,就是放在wordstest.txt里面,也可以自己改数据集训练哦。

为了简单,本项目的batch_size为1,没有使用dataset这些。

定义基本工具函数

In [1]
import numpy as np 
import paddleimport paddle.nn.functional as Fimport timeimport randomfrom collections import Counter

RANDOM_SEED = 123paddle.seed(RANDOM_SEED)def elapsed(sec):
    if sec < 60:        return str(sec) +"sec"
    elif sec< 60*60:        return str(sec/60)+"min"
    else :        return str(sec/(60*60)) +"hr"training_file = "wordstest.txt" #定义样本文件def readalltxt(txt_files):
    labels = []    for txt_file in txt_files:
        target = get_ch_lable(txt_file)
        labels.append(target)    return training_filedef get_ch_lable(txt_file):
    labels = ""
    with open(txt_file,"rb") as f:        # print(f) #<_io.BufferedReader name='wordstest.txt'>
        for label in f:
            labels = labels + label.decode("utf-8")    return labelsdef get_ch_lable_v(txt_file,word_num_map,txt_label = None):
    words_size = len(word_num_map)
    to_num = lambda word:word_num_map.get(word,words_size)#如果word没有在训练集出现过,就输出words_size
    if txt_file != None:
        txt_label = get_ch_lable(txt_file)
    labels_vector = list(map(to_num,txt_label))    return labels_vector

training_data = get_ch_lable(training_file)print("loaded training data...")print("样本长度:",len(training_data))

counter  = Counter(training_data)# print(counter)words = sorted(counter)# print(words)words_size = len(words)
word_num_map = dict(zip(words,range(words_size))) # 字映射到对应的独热编码print("字表大小",words_size)
wordlabel = get_ch_lable_v(training_file,word_num_map)# print(wordlabel)
loaded training data...
样本长度: 4240
字表大小 1016

模型主体

In [2]
class GRURNN(paddle.nn.Layer):
    def __init__(self,word_size,embed_dim,hidden_dim,output_size,num_layers):
        super(GRURNN,self).__init__()
        self.num_layers = num_layers
        self.hidden_dim = hidden_dim

        self.embed = paddle.nn.Embedding(word_size,embed_dim)
        self.gru = paddle.nn.GRU(input_size=embed_dim,hidden_size=hidden_dim,num_layers=num_layers,direction = "bidirectional")
        self.fc = paddle.nn.Linear(hidden_dim*2,output_size)#输出概率

    def forward(self,features,hidden):
        embedded = self.embed(features.reshape([1,-1]))
        output,hidden = self.gru(embedded.reshape([1,1,-1]),hidden)        # output = self.attention(output)
        output = self.fc(output.reshape([1,-1]))        return output,hidden    def init_zero_state(self):
        init_hidden = paddle.zeros([self.num_layers*2,1,self.hidden_dim])        return init_hidden

训练前的小小准备

In [3]
EMBEDDING_DIM = 10HIDDEN_DIM = 20NUM_LAYERS = 1model = GRURNN(words_size, EMBEDDING_DIM, HIDDEN_DIM, words_size, NUM_LAYERS)
optimizer = paddle.optimizer.Adam(learning_rate=0.005,parameters=model.parameters())#定义测试函数def evaluate(model, prime_str, predict_len, temperature=0.8):

    hidden = model.init_zero_state()
    predicted = ''

    #处理输入语义
    for p in range(len(prime_str) - 1):
        _, hidden = model(prime_str[p], hidden)
        predicted +=words[prime_str[p]]
    inp = prime_str[-1]
    predicted +=words[inp]    
    for p in range(predict_len):
        output, hidden = model(inp, hidden)        
        #从多项式分布中采样
        output_dist = output.reshape([-1]).divide(paddle.to_tensor(temperature)).exp()
        inp = paddle.multinomial(output_dist, 1)[0]
        
        predicted += words[inp]    return predicted
W0309 22:03:40.237079  1212 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0309 22:03:40.242807  1212 device_context.cc:465] device: 0, cuDNN Version: 7.6.

正式训练(如果不想训练可以直接注释掉本代码块,然后直接运行全部的代码,最后一个代码块就可以直接玩了)

In [4]
# #定义参数训练模型# training_iters = 20000# display_step = 1000# n_input = 20# step = 0# offset = random.randint(0,n_input+1)# end_offset = n_input + 1# while step < training_iters:#     start_time = time.time()#     # 随机取一个位置偏移#     if offset > (len(training_data)-end_offset):#         offset = random.randint(0, n_input+1)
   #     inwords =wordlabel[offset:offset+n_input]#     inwords = np.reshape(np.array(inwords), [n_input, -1,  1])#     out_onehot = wordlabel[offset+1:offset+n_input+1]#     hidden = model.init_zero_state()#     # print(hidden)#     optimizer.clear_grad()
    #     loss = 0.#     inputs, targets = paddle.to_tensor(inwords), paddle.to_tensor(out_onehot)#     for c in range(n_input):#         outputs, hidden = model(inputs[c], hidden)#         loss += F.cross_entropy(outputs, targets[c].reshape([1]))#     loss /= n_input#求每个字的平均loss#     loss.backward()#     optimizer.step()#     #输出日志#     with paddle.set_grad_enabled(False):#         if (step+1) % display_step == 0:#             print(f'Time elapsed: {(time.time() - start_time)/60:.4f} min')#             print(f'step {step+1} | Loss {loss.item():.2f}\n\n')#             with paddle.no_grad():#                 print(evaluate(model, inputs, 32), '\n')#             print(50*'=')#             paddle.save(model.state_dict(), 'model_state'+str(2)+'.pdparams')#     step += 1#     offset += (n_input+1)#中间隔了一个,作为预测# print("Finished!")

可以直接玩的代码(如果字在txt中没有出现,就会进行提示“该字我还没学会”)

In [ ]
import paddle
n_input =20 layer_state_dictm = paddle.load("model_state2.pdparams")
model.set_state_dict(layer_state_dictm)while True:
    prompt = "请输入几个字,最好是%s个: " % n_input#因为训练我设置的句子长度为20,但是实际输入短一点又无所谓
    sentence = input(prompt)    if sentence == "break":        break
    inputword = sentence.strip()    
    try:
        inputword = get_ch_lable_v(None,word_num_map,inputword)
        keys = np.reshape(np.array(inputword), [ len(inputword),-1, 1])
        zi_num = 400
        model.eval()        with paddle.no_grad():
            sentence =evaluate(model, paddle.to_tensor(keys), zi_num)# zi_num就代表后面继续模型输出字数 总共为n_input + zi_num

        print(sentence)    # break
    except:        print("该字我还没学会")
请输入几个字,最好是20个:  风的悲伤
风的悲伤着?
茫然的心境,遥远的梦幻,飘荡,游离恍若几个世纪,那么漫长。为了那份渴望已久梦中痴缠的美丽,落日的晚霞像是给你披上漂亮的嫁衣,习习微风把你的面纱吹起,凝眸深处你的微笑惹人痴迷,无奈生命里伏伏起起,你的美永远刻在了无法倒转的悱侧惆怅,又有情深意意的悠悠旋律,不时的在你心中回荡。徘徊。萦绕间的人陶醉的温柔。往事都成过往云烟,无须无奈,尘世,无须追究,执子之手,我们注定?也许,是你的美丽婉却经的人争先恐后地射出地平线,沉寂的夜色默默退出舞台中间,润泽,用勉励去雕琢,用沟通去维系。

  当我们踏上人生的征程时,可拨不可多问,无须追究,执子之手,我们注定?那些盛开在流淌。而我一场前世的你的娇嘀。是我熏醉。绕完圈,又回到原点。再回去,那片记忆中的怅惘是否已布满历史风尘的青苔?
美丽的花。岁月荏苒,什么都可以改变,唯一手抚平处你的笑容岸,我爱泡一杯清茶,一片片盈绿,舞动翩翩,茗香阵阵,享受
请输入几个字,最好是20个:  风的吹
风的吹起,凝眸深处你的微笑惹人痴迷,无奈生命里伏伏起起,你的美永远刻在了最初的单纯,当岁月荒芜了似乎成熟的心田,文字是否仍可以承受很回;石桥上飘荡的魂灵,都舍得了前尘旧梦,断前因后果,忘尽一世浮沉得失,一生爱恨情仇。而我,千年华满天下就人生的方向,从痴痴地心。

  有时偏执于一己的看法,旁观者清,当局者迷,朋友善意的提点,点出事情的利弊,道出性格的缺陷,为的是希望大家一起进步。虽然出于一片好心,人普遍面皮薄,请配合先赞后弹等技巧,请配合先赞后弹等技巧,请辅以诚恳温和的态度,否则,忠言逆耳,成了反效果,破坏双方的关系。

  每一天的早晨我们还是需要坚强,即使远离你无数日子,我依偎在三生石畔夜。

  再不会为了一句话,而和人争得面红耳赤;每心上的青面拼凑起。夕阳下你的美丽,落日的晚霞像是给你披上漂亮的嫁衣,习习微风把你的面纱吹起,凝眸深处你的微笑惹人痴迷,无奈生命里伏伏起起,你的美


# 工具  # ai  # red  # 天下  # gru  # 个字  # 执子之手  # 生命里  # 请输入  # 的人  # 句话  # 既往不咎  # 惹人  # 给你  # 吹起 


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


相关推荐: AI聊天机器人引发伦理思考:泰国老人在Facebook上遭遇情感欺骗悲剧  百度AI助手入口在哪 怎么找到聊天入口  扣子AI如何绑定自有域名_扣子AI域名绑定与SSL配置【步骤】  N8N自动化营销:无需编程实现AI智能获客  如何通过文心一言进行地道的文言文翻译  AI绘画工具怎么用_AI绘画工具使用方法详细指南【教程】  网络安全警钟:揭秘“美足”背后隐藏的危机与防范  BeFunkyAI排版怎么给图片加艺术字_BefunkyAI排版艺术字添加与样式调整【指南】  Claude怎么用新功能代码调试_Claude代码调试使用【方法】  Fiverr网站审计终极指南:免费工具、SEO技巧和实战案例  CanvaAI抠图怎么批量处理_CanvaAI批量抠图与团队协作功能【指南】  7个简单高效的面部肌肉锻炼,改善面部不对称,塑造完美脸型  ChatGPT打造AI助手:10倍提升效率,掌控你的生活  ChatGPT 4.0赋能室内设计:20+实用技巧提升工作效率  使用 Claude 4 和 n8n 实现 AI 工作流自动化  MediCa AI:AI赋能的智能医疗保健平台全面解析  揭秘面部和谐:打造完美脸型的终极指南  智谱清言分析数据怎么用_智谱清言分析数据使用方法详细指南【教程】  生物医学图像分割:U-Net模型训练与应用详解  夸克AI怎样搜索医疗健康_夸克AI医疗频道与症状自查【技巧】  乐高积木重现约拿的故事:圣经故事趣味解读  AI广告全面解析:免费教程、JSON提示与营销策略  热门科技新闻:BetterHelp、Photoshop AI、AMD CPU及NVIDIA显卡  通义听悟转会议纪要怎么用_通义听悟转会议纪要使用方法详细指南【教程】  斑马AI怎样注册账号_斑马AI注册流程与儿童信息绑定【教程】  通义千问网页版怎么切换账号_通义千问账号切换步骤【指南】  普通人如何用豆包AI月入过万?2026最新内容创作变现全攻略!  解读 Karan Aujla:如何用音乐连接全球与故土?  2025数据科学学习指南:技能、工具和学习路线图  LogMeIn Resolve:IT 运维知识库的 AI 赋能实践  使用ChatGPT快速生成专辑封面:AI艺术创作指南  GTA Online: 2025最新无限隐形套装防消失技巧  Wrike:AI赋能的项目管理平台,提升电商效率与团队协作  AI聊天机器人:朋友还是谄媚者?深度解析与实用建议  文心一言辅助进行中文播客脚本起草教程  利用AI快速生成数组和枚举:详细指南与实用技巧  如何用AI生成正则表达式?再也不怕复杂的文本匹配  创客贴AI排版如何批量处理图文_创客贴AI排版批量操作与效率提升【方法】  文本分类:生成模型与朴素贝叶斯算法的全面指南  怎么用AI帮你写一份有说服力的加薪申请?  雷小兔ai智能写作如何生成日记_雷小兔ai智能写作日记模板调用【步骤】  2025年AI招聘大师班:初学者友好且功能强大  如何用AI帮你分析用户评论?3步挖掘用户真实需求  微信AI数字人能否识别语音消息_微信AI数字人语音识别与回复设置【教程】  ChatGPT官网免费使用入口 ChatGPT在线版官方地址  ChatGPT怎样用提示词分步骤提问_ChatGPT分步提问技巧【方法】  Power BI: 如何在 Power Query 中更改数据类型  一键改变发型:Gemini AI 助你轻松打造时尚造型  Higgsfield WAN 2.5:AI视频生成工具新纪元  播客数据深度解析:揭秘全球听众分布和增长策略 

 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.