2021SC@SDUSC
TensorFlow-similarity 学习笔记12
本篇博客将针对CNN经典论文CNN for Sentence Classification做一个简单的总结并对其内容进行简单的实现
Paper review
Link to paper: http://www.aclweb.org/anthology/D14-1181
在本文中,介绍了在用于句子分类任务的,在预训练(word vector)词向量(之上训练的卷积神经网络 (CNN) 的一系列实验。 它表明具有调整参数的简单 CNN 可以获得出色的结果。 作者还建议对架构进行简单的修改,以允许使用特定于任务的向量和静态向量。
作者的 CNN 变体具有 2 个词向量通道,如图 1 所示。在这个变体中,一个通道在训练期间保持静态,另一个通过反向传播进行微调。 在多通道变体中,将两个通道的过滤结果相加以形成特征图。
对于实验设置,使用了表 1 中给定规范的 7 个数据集,其中包括电影评论/客户评论/问题主题。 作为预训练的词向量,作者使用了公开的 word2vec 向量,这些向量是在谷歌新闻的 1000 亿个词上训练的。 向量的维数为 300,并使用连续词袋架构进行训练。
作者已经尝试了多种模型变体,它们是:
CNN-rand:所有单词随机初始化并在训练时更新,
CNN-static:来自 word2vec 的预训练向量保持静态并学习其他参数,
CNN-non-static:与 CNN-static 相同,但预训练向量也经过微调,
CNN-multichannel:如前所述,具有 2 个通道的模型。
表 2 的结果表明,预训练的向量更好,进一步微调比保持静态效果更好,多通道模型不能防止过度拟合,并且 dropout 被证明是一个很好的句子分类正则化方式。
用于句子分类的卷积神经网络的实现
CNN通常用于计算机视觉处理,就像图像可以表示为像素值(浮点值)数组一样,我们可以将文本表示为CNN可以处理的向量数组(每个单词映射到由整个词汇表组成的向量空间中的特定向量)。当处理序列数据如文本时,使用一维卷积来了解序列中的随着每个卷积层的增加而变得复杂的模式。
根据论文所述内容,我们训练一个卷积神经网络对包含来自“Yelp”的评论的数据集执行句子分类。
流程:
- 使用 Pandas 将数据导入并预处理为所需的格式。
- 使用 GloVe 为模型获得预训练的词嵌入。
- 使用 Keras 在 CNN 架构上训练数据并评估在验证集上获得的准确性。
数据集:
从 UCI Machine Learning Repository 的 Sentiment Labeled Sentences Data Set 下载数据集。 该数据集包括来自 IMDb、Amazon 和 Yelp 的标记评论。 每条评论都标有 0 分(表示负面情绪)或 1 分(表示正面情绪)。
把文件夹解压缩到文件夹数据集,使用 Pandas 加载数据:
import pandas as pd
path = “/Users/Sidxu/Desktop/dataset/sentiment_labelled_sentences”
filepath_dict = {
‘yelp’: ‘sentiment labelled sentences/
yelp_labelled.txt’ ,‘amazon’: ‘sentiment labelled
sentences /amazon_cells_labelled.txt’,‘imdb’:
‘sentiment labelled sentences/imdb_labelled.txt’}
df_list = []
for source, filepath in filepath_dict.items():
df = pd.read_csv(filepath, names=[‘sentence’, ‘label’],</