CNN VS LSTM 选择及优化

1. CNN 还是 LSTM ?

CNN 和 LSTM是深度学习中使用最多,最为经典的两个模型,在NLP中,他们都可以用于提取文本的上下文特征,实际任务中该如何选择呢? 实际中我们主要考虑三个因素:

  • 上下文的依赖长度:
    CNN 提取的是类似于ngram的局部的上下文特征,LSTM由于三个门限单元的加入使得它能够处理提取更长的上下文特征

  • 位置特征:
    CNN由于max_pooling, 移除了文本序列中的相对位置信息,LSTM的序列结构,使得lSTM天然保留了位置信息

  • 效率:
    CNN 没有序列上的前后依赖问题,可以高效的并行运算,而lstm由于存在序列上的传递依赖问题,效率上相比CNN要低

综合上面三个因素的比较,CNN比较适合上下文依赖较短且对相对位置信息不敏感的场景,如情感分析,情感分析里的一些难点如双重否定,在上下文中的距离都离得不远,LSTM适合需要长距离特征,且依赖相对位置信息的场景

2. 实际使用中如何优化LSTM的运行速度?

对于lstm来讲,它的运行速度的瓶颈在于序列上的处理,如果输入序列太长,会非常影响lstm的运行效率,但实际上,虽然lstm相比于RNN能处理更长的上下文特征,但也是相对的,超过一定的距离,lstm的效果也很有限,而且实际的nlp任务中,所需要的上下文的长度一般都不长。所以对于lstm来说,可行的效率优化方法是,确定一个适合的序列处理的长度,去把长文本按此长度切开,把这些切开的片段批量输入lstm模型,避免将整篇长文本当成一个序列输入lstm模型。