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

胡编乱造哲理和爱情生成器
高人打造计划
因为数据集偏向哲理和爱情
效果展示:
输入:
我对你的爱
输出:
我对你的爱恋中,我愿为此生,爱爱可多少善果才能与他漫步人生路?朋友如海水般,承载你无数的泪花;欢乐时,白浪掀天,波涛声依旧没有能够脱离其中。执子之手,往事既往不咎,执子之手,往事既往不咎,执子之手,我们注定?一昧的消沉,失落,伪装出虚伪的自己,只愿愿以一袭泯念过无数的看着,安慰着,轻抚疼痛的心。
再不会为了一句话,而和人争得面红耳赤;再不会为了一句话,而和此刻绽放。 站在都市的一隅,感受那些渐行渐远,耳际忽而响起<怒放的生命>的旋律,激起我心中一股莫名的渴望。轻轻拉开窗帘,一场春雨,淋湿了虔诚向往的花朵,许许多多的回忆片段如同雨浇开的花香,坐在窗帘的边缘点燃生命的歌喉。
古藤老树昏鸦,断肠人在天涯。韶光荏苒,记不起年少的轻狂,不再想当年的慷慨激昂。一路奔波流浪,一路磕磕绊绊。笑荏苒燃的前世与无奈,尘世中没有哪一空中的征程时,点出事情中痴迷,无奈生命里伏伏起起,你有经的青春很
操作使用方法
就是从上到下运行全部代码,注释掉倒数第二个代码块,这个为训练的,然后最后一个代码块就是测试代码块,就是玩的。
让你输入开头几个字,然后输出自定义字数的句段。
简单的技术
本项目主要就是用了GRU,然后数据集构造非常简单,就是放在wordstest.txt里面,也可以自己改数据集训练哦。
为了简单,本项目的batch_size为1,没有使用dataset这些。
定义基本工具函数
In [1]import numpy as np import paddleimport paddle.nn.functional as Fimport timeimport randomfrom collections import CounterRANDOM_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_vectortraining_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.1W0309 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 paddlen_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个: 风的吹登录后复制
风的吹起,凝眸深处你的微笑惹人痴迷,无奈生命里伏伏起起,你的美永远刻在了最初的单纯,当岁月荒芜了似乎成熟的心田,文字是否仍可以承受很回;石桥上飘荡的魂灵,都舍得了前尘旧梦,断前因后果,忘尽一世浮沉得失,一生爱恨情仇。而我,千年华满天下就人生的方向,从痴痴地心。 有时偏执于一己的看法,旁观者清,当局者迷,朋友善意的提点,点出事情的利弊,道出性格的缺陷,为的是希望大家一起进步。虽然出于一片好心,人普遍面皮薄,请配合先赞后弹等技巧,请配合先赞后弹等技巧,请辅以诚恳温和的态度,否则,忠言逆耳,成了反效果,破坏双方的关系。 每一天的早晨我们还是需要坚强,即使远离你无数日子,我依偎在三生石畔夜。 再不会为了一句话,而和人争得面红耳赤;每心上的青面拼凑起。夕阳下你的美丽,落日的晚霞像是给你披上漂亮的嫁衣,习习微风把你的面纱吹起,凝眸深处你的微笑惹人痴迷,无奈生命里伏伏起起,你的美登录后复制
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
让 AI 替你叫车,哈啰顺风车上线出行行业首个 MCP 服务
让 AI 替你叫车:哈啰顺风车上线出行行业首个 MCP 服务 4月3日,哈啰顺风车推出一项业内瞩目的创新举措:正式上线名为MCP的新型服务。通俗来讲,这项服务将顺风车从寻找车主、智能匹配到最终下单支付的完整流程能力,封装成了一套标准化的技术接口,直接向各类大语言模型和AI智能体开放调用权限。 这一变
QQ接入openclaw的几个步骤
2026年4月新版OpenClaw QQ机器人接入全攻略:实践步骤、问题排查与深度解读 随着2026年4月OpenClaw重要更新的发布,其原生集成QQ平台支持的功能引起了大量开发者的关注。这一特性意味着用户无需借助任何第三方插件,即可将智能AI助手便捷地部署为QQ私聊或群聊机器人。本文将系统性地解
遇到问题-OpenClaw-OpenClaw Dashboard对话回答即将完成时画面变空白问题修复
情况描述 在使用OpenClaw过程中,遇到一个较为特殊的页面显示异常问题,经过详细排查,现将现象和相关配置进行梳理。 问题的核心表现是:OpenClaw系统本身的功能逻辑运行正常,但Dashboard用户界面在进行对话交互时会发生异常。OpenClaw Dashboard聊天页面空白的具体故障症状
说一下WorkBuddy 的 Plan 模式
如何切换到 Plan 模式 想体验这种更可控的方式?操作很简单。在 WorkBuddy 主界面的右下角,你会看到一个“安全模式切换”的下拉菜单,从中选择“Plan”选项即可完成切换。 核心使用流程 光说概念可能有点抽象,咱们直接看个例子。假设你手头有个任务:“把桌面上‘项目报告’文件夹里所有Exce
滴滴出行开放打车 Skill,“龙虾”叫车全程不需要切换 App
滴滴出行全网首发语音打车Skill,一句话智能叫车全攻略 近日,滴滴出行正式上线了一项创新的语音交互功能:全面开放打车Skill。这意味着,用户只需通过语音指令,即可完成从叫车到行程追踪的全流程,真正实现“动口不动手”的便捷出行体验。 整个操作过程,包括目的地搜索、车型比价、下单确认、查看订单状态等
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

