开发一个 AI诗歌生成器,融合古典韵律与现代NLP模型,能够根据用户输入的情感关键词生成定制化的诗句,既可以表达情感,也符合传统的诗歌韵律。这个项目结合了深度学习的预训练模型(如 Transformers)与押韵算法,能够生成既富有情感又合乎音韵规则的诗歌。
关键技术
- Transformers:使用预训练的模型(如 GPT-2、GPT-3 或 T5)进行文本生成,这些模型在自然语言生成方面表现优秀。
- 押韵算法:将生成的诗句进行音韵检查和调整,确保符合诗歌的韵律要求。
- 情感分析:根据用户输入的情感关键词(如“爱”、“孤独”、“快乐”)来定制诗歌的主题和情感。
系统架构
- 情感关键词输入:用户输入一个情感关键词或短语,AI诗歌生成器基于此生成诗句。
- 诗歌生成:通过基于 Transformer 的预训练语言模型生成诗句。
- 押韵检查与优化:生成诗句后,通过算法检查韵脚,确保押韵或根据韵律要求优化生成内容。
- 输出诗歌:返回符合情感表达的定制诗句。
步骤一:安装依赖库
首先,我们需要安装一些必要的 Python 库:
transformers:用于加载预训练模型并生成文本。pydub和nltk:用于音韵处理和检测。
安装依赖:
pip install transformers torch pydub nltk步骤二:加载预训练模型生成诗歌
我们可以使用 GPT-2 或 T5 等预训练模型来生成诗句。这里以 GPT-2 为例,通过输入关键词生成诗歌。
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
# 加载预训练的 GPT-2 模型
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
# 设置模型为评估模式
model.eval()
# 输入情感关键词
def generate_poetry(keyword, max_length=50):
input_text = f"{keyword} 诗歌:"
inputs = tokenizer.encode(input_text, return_tensors="pt")
# 使用模型生成诗歌
with torch.no_grad():
outputs = model.generate(
inputs,
max_length=max_length,
num_return_sequences=1,
no_repeat_ngram_size=2, # 防止重复的n-gram
temperature=0.7, # 控制生成的多样性
top_k=50, # top-k sampling
top_p=0.95, # nucleus sampling
do_sample=True,
early_stopping=True
)
# 解码生成的文本
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return generated_text
# 示例:输入情感关键词并生成诗歌
emotion = "孤独"
poetry = generate_poetry(emotion)
print(poetry)步骤三:添加押韵检测与优化
为了让生成的诗歌符合古典诗歌的韵律要求,我们可以采用押韵检测算法,检查每行的结尾音节,并优化生成的诗歌。为了简单起见,这里我们可以使用 NLTK 库中的音标库和 pydub 库来检测韵脚。
示例:使用 nltk 检查是否押韵
import nltk
from nltk.corpus import cmudict
# 下载 NLTK 数据包(如需)
nltk.download('cmudict')
nltk.download('punkt')
# CMU 发音词典
d = cmudict.dict()
def get_rhyme(word):
""" 获取单词的韵脚 """
word = word.lower()
if word in d:
# 获取单词的所有发音,并返回最后一个音节
return [pron[-1] for pron in d[word]]
else:
return []
def check_rhyme(phrase):
""" 检查句子的尾韵是否一致 """
words = nltk.word_tokenize(phrase)
rhyme_ends = [get_rhyme(word) for word in words]
return rhyme_ends
# 示例:检查生成的诗句的最后一个字是否押韵
last_line = poetry.split("\n")[-1]
rhyme_check = check_rhyme(last_line)
print(f"最后一句的韵脚:{rhyme_check}")示例:生成和优化押韵的诗歌
为了确保诗歌符合韵律要求,可以在生成诗句后检查每行的韵脚,若不符合要求,则尝试调整最后一个词。
步骤四:输出定制化的诗句
将生成的诗句和优化后的结果整合输出:
def generate_custom_poetry(keyword, max_length=50):
generated_poetry = generate_poetry(keyword, max_length)
lines = generated_poetry.split("\n")
# 检查最后一行是否押韵
last_line = lines[-1]
rhyme_check = check_rhyme(last_line)
if rhyme_check:
print(f"生成的诗歌符合韵律:\n{generated_poetry}")
else:
print(f"生成的诗歌未完全押韵,进行调整:\n{generated_poetry}")
# 进行一些简单调整,保证最后一句押韵(这部分可以进一步优化)
lines[-1] = lines[-1] + "(调整后的押韵)"
print("\n调整后的诗歌:\n" + "\n".join(lines))
# 示例:输入情感关键词并生成定制诗歌
generate_custom_poetry("孤独")步骤五:生成定制化诗歌
用户可以通过输入不同的情感关键词生成符合要求的定制化诗歌。例如:
- 输入情感关键词 "爱",生成爱情主题的诗句。
- 输入情感关键词 "孤独",生成关于孤独的诗句。
总结
我们已经创建了一个结合了 Transformers 模型和 押韵算法 的 AI诗歌生成器。这个生成器能够根据输入的情感关键词生成诗句,并且尝试根据韵律要求优化诗句的押韵,最终输出定制化的诗歌。
如果你希望进一步改进这个生成器,可以在以下几个方面进行优化:
- 情感分析:根据情感关键词进一步定制生成的诗歌内容,例如通过情感分析模型自动识别输入情感。
- 生成的诗句质量:通过增加更多的预训练模型,如 GPT-3 或 T5,来提高生成诗句的质量和多样性。
- 韵律优化:进一步改进韵律算法,自动优化诗句的音节与结构,确保更自然的音韵表现。
















