极简TextCNN,五分钟看懂文本分类基线算法
TextCNN引入
TextCNN是基于卷积神经网络实现的用于文本分类的首选基线模型,它没有复杂的循环结构,也不用花费大量时间训练预训练模型,仅通过简单的卷积、池化操作,就能快速捕捉文本中的关键特征,实现文本分类。
TextCNN适用于中短文本分类的场景,文本长度通常在几十到几百个词(如新闻标题、商品评论、短信、问答等);过长文本会导致特征图过长、池化损失过多信息。适用的情况包括,文本里局部短语信号强,支持并行计算,轻量化部署,在线推理极低延迟。本文主要介绍TextCNN的网络结构,并给出了计算示例便于理解。
本文内容参考极简TextCNN,五分钟看懂文本分类基线算法
TextCNN结构介绍
TextCNN主要利用多个不同尺寸的卷积核提取文本中n-gram级别的局部特征,再通过最大池化 保留最显著的特征,最后送入全连接层 进行分类。TextCNN 的典型结构包含四层:
(1.)词嵌入层(Embedding Layer)
将输入文本中的每个词映射为一个低维稠密向量(如 Word2Vec或随机初始化)。假设文本长度为L,词向量维度为d,则得到L×d的二维矩阵,也就是“文本序列词向量矩阵”。
(2.)卷积层(Convolutional Layer)
通常,会使用不同窗口大小h的卷积核(例如 h=2、3、4 个词),每个窗口大小也会使用多个不同的卷积核,在“文本序列词向量矩阵”上滑动。每个卷积核窗口 在“文本序列词向量矩阵”上滑动时,窗口中“文本序列词向量矩阵”h×d的局部区域 与该卷积核 做点积;当一个卷积核 在整个“文本序列向量矩阵”上 完成滑动时,会产生一个特征图(feature map)。
(3.)池化层(Pooling Layer)
对每个特征图 执行最大池化,取出该特征图中最大的一个值,作用是提取每个卷积核 在整个文本中最强的信号,同时使输出长度固定(与文本长度无关)。
(4.)全连接层 + softmax
将所有池化后的值concat拼接成一个固定长度的向量,传入一个或多个全连接层,最后用softmax输出类别概率。
TextCNN计算示例
针对文本“I love this movie very much!”做情感分类,给定的文本长度L=7,向量嵌入维度取5,则有如下形状(7, 5)的嵌入矩阵:
如果选2*5大小的卷积核,也就是卷积核窗口大小为2,按步长1滑动,则会产生7-2+1=6个窗口位置。此时,卷积核划过的窗口一次覆盖的token组合是:Ilove,lovethis,thismovie,movievery,verymuch,much!
基于下面的两个2*5卷积核,示例计算过程:
更多详细内容参考极简TextCNN,五分钟看懂文本分类基线算法
