开发一个 AI诗歌生成器,融合古典韵律与现代NLP模型,能够根据用户输入的情感关键词生成定制化的诗句,既可以表达情感,也符合传统的诗歌韵律。这个项目结合了深度学习的预训练模型(如 Transformers)与押韵算法,能够生成既富有情感又合乎音韵规则的诗歌。

关键技术

  1. Transformers:使用预训练的模型(如 GPT-2、GPT-3 或 T5)进行文本生成,这些模型在自然语言生成方面表现优秀。
  2. 押韵算法:将生成的诗句进行音韵检查和调整,确保符合诗歌的韵律要求。
  3. 情感分析:根据用户输入的情感关键词(如“爱”、“孤独”、“快乐”)来定制诗歌的主题和情感。

系统架构

  1. 情感关键词输入:用户输入一个情感关键词或短语,AI诗歌生成器基于此生成诗句。
  2. 诗歌生成:通过基于 Transformer 的预训练语言模型生成诗句。
  3. 押韵检查与优化:生成诗句后,通过算法检查韵脚,确保押韵或根据韵律要求优化生成内容。
  4. 输出诗歌:返回符合情感表达的定制诗句。

步骤一:安装依赖库

首先,我们需要安装一些必要的 Python 库:

  • transformers:用于加载预训练模型并生成文本。
  • pydubnltk:用于音韵处理和检测。

安装依赖:

pip install transformers torch pydub nltk

步骤二:加载预训练模型生成诗歌

我们可以使用 GPT-2T5 等预训练模型来生成诗句。这里以 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诗歌生成器。这个生成器能够根据输入的情感关键词生成诗句,并且尝试根据韵律要求优化诗句的押韵,最终输出定制化的诗歌。

如果你希望进一步改进这个生成器,可以在以下几个方面进行优化:

  1. 情感分析:根据情感关键词进一步定制生成的诗歌内容,例如通过情感分析模型自动识别输入情感。
  2. 生成的诗句质量:通过增加更多的预训练模型,如 GPT-3 或 T5,来提高生成诗句的质量和多样性。
  3. 韵律优化:进一步改进韵律算法,自动优化诗句的音节与结构,确保更自然的音韵表现。