You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

LSTM结合预训练词嵌入的文本分类原理与Keras实践疑问

关于LSTM结合预训练词嵌入做文本分类的问题解答

问题1:输入维度、LSTM训练流程与epoch内操作

  • 输入Xt的维度:以你说的固定500词的影评、100维fastText预训练嵌入为例,单个样本的每个时间步(每个词)的输入Xt100维向量(形状为(100,))。如果是批量输入(比如batch_size=64),整个输入张量的形状就是(64, 500, 100)——分别对应批量大小、序列长度、词嵌入维度。
  • LSTM训练流程&是否需要逐词输入:不用手动逐词喂数据!在Keras这类框架里,你只需要把处理好的序列张量(带词嵌入的)喂给模型,框架会自动沿着时间轴(也就是500个词的维度)逐时间步展开处理。流程大概是:先把每个词的索引转换成预训练的100维嵌入向量,得到完整的序列张量;然后LSTM层从第一个词开始,依次处理每个词的嵌入向量,每一步都会更新自身的细胞状态和隐藏状态,直到处理完最后一个词。
  • 每个epoch中的操作
    • 先把整个训练集分成若干个batch(比如代码里的batch_size=64);
    • 对每个batch,先通过嵌入层(如果用预训练的话就是加载好的嵌入矩阵,允许微调的话还会更新)生成词向量序列;
    • LSTM层逐时间步处理序列,最终输出整个序列的最终隐藏状态;
    • 全连接层接收这个隐藏状态,输出分类预测结果;
    • 计算预测结果和真实标签的损失(比如二分类用交叉熵);
    • 反向传播损失,更新所有可训练参数(嵌入层、LSTM的门权重、全连接层权重);
    • 把所有batch都处理完一遍,这就完成了一个epoch的训练。

问题2:LSTM神经元互连与单个单元的局限性

先看代码里的LSTM(100),这里的100指的是LSTM层的隐藏状态维度,也就是每个时间步输出的隐藏状态是100维的。

  • 神经元互连方式:你可以把这100个“神经元”理解为100个并行工作的LSTM子单元,它们共享同一个输入序列,但各自维护独立的细胞状态和隐藏状态。每个子单元都通过LSTM的三大门(输入门、遗忘门、输出门)来控制信息的流动:输入门决定哪些新信息要加入细胞状态,遗忘门决定哪些旧信息要丢弃,输出门决定细胞状态的哪些部分要输出为当前的隐藏状态。这些子单元之间通过共享的门结构参数来协同工作,最终的隐藏状态是这100个子单元输出的向量组合,能更全面地编码序列的上下文信息。
  • 为什么不能只用单个LSTM单元:单个单元的隐藏状态只有1维,表达能力太弱了!文本序列里有大量复杂的上下文依赖(比如否定词对情感的反转、长距离的语义关联),单个单元根本捕捉不到这么丰富的特征。100个单元相当于给模型提供了100个不同的“特征编码维度”,每个维度可以学习到不同的模式(比如有的专门捕捉情感词的上下文,有的专门处理否定结构),这样模型的拟合能力更强,能更好地完成分类任务。而且单个单元很容易出现欠拟合,连简单的文本模式都学不好,更别说复杂的影评分类了。

附上经典的LSTM细胞结构示意图,帮你直观理解:
LSTM细胞结构(来自Colah的博客)

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

火山引擎 最新活动