Comment Classification in NLP
1. 介绍
最近假期没事就想来玩玩机器学习,找到了曾经学长做过的评论分类的小项目,因为一直没有过制作机器学习项目的经验,就打算从阅读代码开始。
2. 问题分析
训练数据可以最终被处理为一个列表的字符串 。它们被打上了标量标记 0 或 1,来表示好评和差评的区别。
将整段的中文句子用jieba拆分成词语段(因为英文词语之间都有空格隔开),在其中插入空格,剔除stopwords和标点等奇怪符号……
对每个词语进行预先训练,形成最初的word embedding。使用低维dense的词向量代替one-hot来表示corpus当中的每一个词汇。我想着应该用网上训练好的词向量模型,因为训练数据不够完备,在使用的过程中可能遇到没有在词向量训练中遇到的词,这样的话我们的词向量模型未免就一筹莫展了……gensim.Word2Vec训练出的model说到底是一个dict。
下面就可以用各种各样的训练方法。似乎在这里,他将每个句子中的独立的单词的词向量naive地加起来作为一个整体放入神经网络进行训练,我非常质疑这种做法的有效性。
3. 操作细节问题
- 数据的读取和预处理:
- 使用json或者pickle一类的轻量级数据处理包来进行load和dump。
- 需要strip掉句子开头和结尾的制表符、空格、换行符等等。
- 需要注意编码的一致性。
- 剔除stopwords。
论文:CNN for Sentence Classification
- CNN models have subsequently been shown to be effective for NLP and have achieved excellent results in semantic parsing, search query retrieval, sentence modeling, and other traditional NLP tasks.
架构:预先使用开源的word vector embedding。把句子拆分成单词列表,将词向量首尾排列。在输入层后面是一个卷积层,拥有若干个卷积核,每个卷积核作为一个feature extractor,作用在h个相邻的单词上。卷积层后面跟着一个max pooling层,用于提取出卷积层当中的最明显的特征,也解决了卷积核大小不同,句子长短不同的问题。最终把池化结果与全连接层相连,通过softmax输出概率分布。
词向量使用了google的开源词向量,有着300的维度。不存在的词被随机初始化。