You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于LSTM的单词输入单行诗歌生成:输入处理与模型构建求助

问题分析与解决方案

1. 维度不兼容错误的直接修复

报错里的形状不匹配是因为模型输出多了一个维度((None,1,16)),而标签Y是(None,16)。可以从两个方向处理:

  • 调整标签Y的形状,增加一个维度:用numpy.expand_dims(Y, axis=1)把Y转换成(样本数, 1, 序列长度)格式
  • 调整模型输出,去掉多余维度:在模型最后加Reshape((max_sequence_length-1,))层,或者检查LSTM/Transformer的return_sequences参数,确保输出维度和标签对齐

2. 输入处理逻辑的优化

当前输入处理有几个需要调整的点,才能适配10-12词诗歌生成的需求:

  • 对齐序列长度:把max_sequence_length设为12(输入1词+输出11词,总长度符合10-12词要求),替换当前可能设置的17(对应报错里的16)
  • 过滤有效数据:只保留2到12词的行,避免过短或过长的无效样本
  • 补零与维度处理:补零逻辑保留,但最后要将数据转为numpy数组并调整Y的维度,匹配模型输出

优化后的输入处理代码:

import numpy as np

max_sequence_length = 12  # 输入1词+输出11词,总长度符合需求
X = []
Y = []

for line in document:
    words = line.split()
    line_length = len(words)
    if 2 <= line_length <= max_sequence_length:  # 只保留有效长度的诗句
        input_idx = word_to_index.get(words[0], 0)
        output_idxs = [word_to_index.get(word, 0) for word in words[1:]]
        # 补零到11个元素(对应max_sequence_length-1)
        while len(output_idxs) < max_sequence_length - 1:
            output_idxs.append(0)
        X.append([input_idx])
        Y.append(output_idxs)

# 转换为数组并调整Y的维度
X = np.array(X)  # 形状:(样本数, 1)
Y = np.array(Y)  # 形状:(样本数, 11)
Y = np.expand_dims(Y, axis=1)  # 调整为(样本数, 1, 11),解决维度不兼容

3. 适配诗歌生成的模型构建建议

推荐用序列到序列结构或带注意力的LSTM/Transformer模型,以下是基础LSTM模型示例:

from keras.models import Model
from keras.layers import Input, Embedding, LSTM, Dense

vocab_size = len(word_to_index) + 1  # 包含补零的0值
embedding_dim = 128
hidden_units = 256

# 输入层:接收单个单词
input_layer = Input(shape=(1,))
# Embedding层:mask_zero=True忽略补零位置,避免无效损失
embedding = Embedding(input_dim=vocab_size, output_dim=embedding_dim, mask_zero=True)(input_layer)
# LSTM层:return_sequences=True返回完整序列,对应多词输出
lstm = LSTM(hidden_units, return_sequences=True)(embedding)
# 输出层:每个位置输出词汇表概率
output_layer = Dense(vocab_size, activation='softmax')(lstm)

model = Model(inputs=input_layer, outputs=output_layer)
# 用sparse_categorical_crossentropy无需将Y转为one-hot,更高效
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

4. 额外优化建议

  • 音节约束处理:如果要生成5-7-5格式的俳句,预处理时需加入音节统计过滤数据,训练时可加入音节预测辅助损失,生成时用带音节约束的beam search解码
  • 数据质量:过滤数据集中的杂乱文本,只保留符合格式的诗歌,确保模型学习到正确的创作模式
  • 生成策略:训练完成后,用beam search或top-k采样替代贪心解码,生成的诗歌会更流畅多样

内容的提问来源于stack exchange,提问作者Root

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:32:29