使用LSTM进行诗歌创作(pytorch版本)

该文详细介绍了如何从GitHub上的ChinesePoetry数据集中提取唐诗,进行数据预处理,包括将所有诗句合并成一个长文本并进行分词。接着,使用torchtext库构建中文字符级别的词汇表,并将文本转换为整数序列。之后,通过随机采样构建训练集和测试集,使用LSTM网络进行训练。最后,文章展示了模型预测新诗句的过程。
摘要由CSDN通过智能技术生成

数据集来源:GitHub - chinese-poetry/chinese-poetry: The most comprehensive database of Chinese poetry 🧶最全中华古诗词数据库, 唐宋两朝近一万四千古诗人, 接近5.5万首唐诗加26万宋诗. 两宋时期1564位词人,21050首词。

 这里仅仅选用了其中的唐诗部分进行训练:chinese-poetry/全唐诗/

原始数据:

在原始数据中包含作者,内容,标题,id四个部分,这里使用内容进行训练

 

 数据预处理

首先将所有唐诗的诗句合并成一个长文本

import numpy as np
import json
import torch
import os
import pkuseg


# 读取 json 文件
def get_json(path):
    with open(path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    return data

# 对 ./tang/ 文件夹下的所有 json 文件进行遍历
# 获取文件夹下的所有文件名
def get_file_name(path):
    file_name = []
    for root, dirs, files in os.walk(path):
        for file in files:
            file_name.append(file)
    return file_name


file_name_ls = get_file_name('./tang/')

ret_ls = []

for file_name in file_name_ls:
    ls = get_json('./tang/' + file_name)
    n_ls = len(ls)

    for i in range(n_ls):
        para = ls[i]['paragraphs']
        para = ''.join(para)
        ret_ls.append(para)

n_poet = len(ret_ls)  # 一共 57607 首诗歌
# 全部合并成一个 string
str_all = ''.join(ret_ls)

接着对其分词,我这里里使用了torchtext库,在代码中使用了collections.Countertorchtext.vocab.Vocab来构建中文字符级别的词汇表,并将文本转换为整数序列。

在这段代码中,首先定义了一个字符级别的分词器chinese_char_tokenizer,它将文本拆分为单个字符。接下来,使用该分词器对所有文本进行分词处理,并使用Counter统计

LSTM 是一种循环神经网络(RNN)的变体,具有记忆单元和三个门(输入门、遗忘门、输出门)的结构。它可以有效地处理序列数据,包括自然语言处理、语音识别和时间序列预测等任务。 PyTorch 是一个开源的深度学习框架,提供了丰富的工具和库,帮助用户设计、训练和部署神经网络模型。在 PyTorch 中,我们可以使用 torch.nn 模块来构建 LSTM 模型。 LSTMPyTorch 中的实现是基于二维张量的。具体而言,输入数据需要是一个形状为 (seq_len, batch_size, input_size) 的张量,其中 seq_len 表示序列的长度,batch_size 表示每个 batch 的大小,input_size 表示每个时间步的输入特征维度。 要创建一个 LSTM 模型,首先需要引入 torch.nn 和 torch.nn.functional 包,并定义一个继承自 nn.Module 的类。在这个类中,我们可以定义 LSTM 的结构,比如设置输入维度、隐藏单元的数量、层数等。 在 forward 方法中,我们可以通过调用 nn.LSTM 的构造函数来创建 LSTM 层。我们可以指定输入维度、隐藏单元的数量以及层数等参数。然后,将输入数据传递给 LSTM 层,进行前向传播计算。 在 PyTorch 中,我们还可以通过设置 batch_first=True 来使输入数据的维度变为 (batch_size, seq_len, input_size),以适应更多的应用场景。 总结一下,LSTMPyTorch 中以二维张量的形式呈现,输入数据需要具有特定的形状,整个模型的构建过程需要使用到 torch.nn 模块。通过这些基本操作,我们可以使用 PyTorch 来构建和训练 LSTM 模型,以应用于序列数据处理的各种任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值