Python程序写诗【训练1分钟】古诗生成

介绍了一种使用AI进行诗词创作的方法,通过训练词向量模型,能够快速生成不同风格的古诗词,包括五言绝句、七言绝句和对联。
原创AI程序写诗:训练 一分钟,诗词一秒成!
先看看写出来什么诗~
在这里插入图片描述

来看看程序

from gensim.models import Word2Vec  # 词向量
from random import choice
from os.path import exists
from warnings import filterwarnings
filterwarnings('ignore')  # 不打印警告


class CONF:
    path = '古诗词.txt'  # 语料路径
    window = 16  # 滑窗大小
    min_count = 60  # 过滤低频字
    size = 125  # 词向量维度
    topn = 14  # 生成诗词的开放度
    model_path = 'word2vec'  # 模型路径


class Model:
    def __init__(self, window, topn, model):
        self.window = window
        self.topn = topn
        self.model = model  # 词向量模型
        self.chr_dict = model.wv.index2word  # 字典

    """模型初始化"""
    @classmethod
    def initialize(cls, config):
        if exists(config.model_path):
            # 模型读取
            model = Word2Vec.load(config.model_path)
        else:
            # 语料读取
            with open(config.path, encoding='utf-8') as f:
                ls_of_ls_of_c = [list(line.strip()) for line in f]
            # 模型训练和保存
            model = Word2Vec(ls_of_ls_of_c, config.size,
                             window=config.window, min_count=config.min_count)
            model.save(config.model_path)
        return cls(config.window, config.topn, model)

    """古诗词生成"""
    def poem_generator(self, title, form):
        # list_of_tuples --> list_of_strings 并过滤标点符号
        filter = lambda lst: [t[0] for t in lst if t[0] not in [',', '。']]
        # 标题补全
        if len(title) < 4:
            if not title:
                title += choice(self.chr_dict)
            for _ in range(4 - len(title)):
                chrs = self.model.similar_by_word(title[-1], self.topn // 2)
                chrs = filter(chrs)
                char = choice([c for c in chrs if c not in title])
                title += char
        # 文本生成
        seq = list(title)
        for i in range(form[0]):
            for _ in range(form[1]):
                chrs = self.model.predict_output_word(
                    seq[-self.window:], max(self.topn, len(seq) + 1))
                chrs = filter(chrs)
                char = choice([c for c in chrs if c not in seq[len(title):]])
                seq.append(char)
            seq.append(',' if i % 2 == 0 else '。')
        # 返回标题+主体
        length = form[0] * (form[1] + 1)
        title = '《%s》' % ''.join(seq[:-length])
        poem = ''.join(seq[-length:])
        return title + '\n' + poem


def main(config=CONF):
    form = {'五言绝句': (4, 5), '七言绝句': (4, 7), '对联': (2, 9)}
    m = Model.initialize(config)
    while True:
        title = input('输入标题:').strip()
        try:
            poem = m.poem_generator(title, form['五言绝句'])
            print('\033[031m%s\033[0m' % poem)  # red
            poem = m.poem_generator(title, form['七言绝句'])
            print('\033[033m%s\033[0m' % poem)  # yellow
            poem = m.poem_generator(title, form['对联'])
            print('\033[036m%s\033[0m' % poem)  # purple
            print()
        except:
            pass


if __name__ == '__main__':
    main()

语料下载地址

https://gitee.com/arye/dl/tree/master/NLP/gensim%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90

关于程序的一些基础

猛戳→gensim词向量基础

更多诗词创作

山水田园

在这里插入图片描述
在这里插入图片描述

宫廷

在这里插入图片描述

别塞战争

在这里插入图片描述

抒情

在这里插入图片描述
在这里插入图片描述

春节

在这里插入图片描述

<think>嗯,用户想用Python编写自动生成古诗词的程序。首先,我需要回忆一下相关的技术方法。之前看到过使用RNN或者Transformer模型来生成文本,古诗生成应该也是类似的原理。可能需要用到自然语言处理的技术,比如NLP模型训练。 用户提到想要方法或代码示例,所以得找一些具体的实现步骤。记得引用中有提到PyTorch的Transformer例子,还有数据预处理的部分。比如引用4里的PyTorch示例,使用Transformer写古诗,这可能是一个很好的参考点。另外,引用2里也提到Python构建NLP诗词生成模型,需要准备数据,处理数据,定义模型结构。 接下来要考虑用户可能的背景。可能是对Python有一定了解,但对深度学习模型不太熟悉。所以需要分步骤解释,从数据准备到模型构建,再到训练生成。代码示例要简单明了,可能用简单的RNN作为例子,这样更容易理解。 还要注意引用相关的资料,比如提到的引用2和引用4,这两个应该能提供足够的支持。用户可能需要知道整个流程,包括数据集的获取,比如唐诗三百首的文本,然后进行分词,构建词表,定义模型,训练,最后生成诗句。 另外,用户可能对模型的原理不太清楚,需要简要解释一下,比如RNN如何处理序列数据,Transformer的自注意力机制。但可能不需要太深入,保持简洁,重点在实现步骤。 可能还需要提到一些库,比如TensorFlow或PyTorch,以及预处理工具。比如引用4中使用PyTorch的Transformer,而引用2中可能用其他框架。需要给出不同的示例,或者选择一个比较典型的例子,比如基于RNN的生成模型。 最后,生成相关问题,比如数据预处理的关键步骤,提升生成效果的方法,Transformer的优势,以及实际应用场景。这些问题可以帮助用户进一步深入学习。</think>### 使用Python实现古诗词自动生成的方法 #### 1. 核心原理 古诗词自动生成主要基于自然语言处理(NLP)的序列生成模型。通过深度学习算法(如RNN、LSTM或Transformer)学习诗词的平仄、对仗、押韵等特征,最终生成符合格律的新诗词[^2][^4]。 #### 2. 实现步骤 **(1) 数据准备** - 收集古诗词语料库(如《全唐诗》《宋词三百首》) - 清洗数据并建立词汇表 ```python # 示例:数据预处理 with open('poems.txt', 'r', encoding='utf-8') as f: poems = [line.strip().split('::')[-1] for line in f] ``` **(2) 模型构建** 基于PyTorch的Transformer实现示例[^4]: ```python import torch.nn as nn class PoetryTransformer(nn.Module): def __init__(self, vocab_size, d_model=256): super().__init__() self.embedding = nn.Embedding(vocab_size, d_model) self.transformer = nn.Transformer(d_model=d_model) self.fc = nn.Linear(d_model, vocab_size) ``` **(3) 训练流程** ```python # 使用交叉熵损失函数 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters()) for epoch in range(100): for inputs, targets in dataloader: outputs = model(inputs) loss = criterion(outputs.view(-1, vocab_size), targets.view(-1)) loss.backward() optimizer.step() ``` **(4) 诗词生成** ```python def generate_poem(model, start_words, max_len=32): tokens = tokenizer.encode(start_words) for _ in range(max_len): output = model(torch.LongTensor([tokens])) next_token = output.argmax(-1)[-1].item() tokens.append(next_token) return tokenizer.decode(tokens) ``` #### 3. 关键优化方向 - 加入平仄押韵约束规则 - 使用注意力机制增强上下文关联 - 结合知识图谱补充文学常识[^5]
评论 52
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值