Comment Classification in NLP

1. 介绍

最近假期没事就想来玩玩机器学习,找到了曾经学长做过的评论分类的小项目,因为一直没有过制作机器学习项目的经验,就打算从阅读代码开始。

2. 问题分析

  1. 训练数据可以最终被处理为一个列表的字符串 (list(string)) 。它们被打上了标量标记 0 或 1,来表示好评和差评的区别。

  2. 将整段的中文句子用jieba拆分成词语段(因为英文词语之间都有空格隔开),在其中插入空格,剔除stopwords和标点等奇怪符号……

  3. 对每个词语进行预先训练,形成最初的word embedding。使用低维dense的词向量代替one-hot来表示corpus当中的每一个词汇。我想着应该用网上训练好的词向量模型,因为训练数据不够完备,在使用的过程中可能遇到没有在词向量训练中遇到的词,这样的话我们的词向量模型未免就一筹莫展了……gensim.Word2Vec训练出的model说到底是一个dict。

  4. 下面就可以用各种各样的训练方法。似乎在这里,他将每个句子中的独立的单词的词向量naive地加起来作为一个整体放入神经网络进行训练,我非常质疑这种做法的有效性。

3. 操作细节问题

  • 数据的读取和预处理:
    • 使用json或者pickle一类的轻量级数据处理包来进行load和dump。
    • 需要strip掉句子开头和结尾的制表符、空格、换行符等等。
    • 需要注意编码的一致性。
    • 剔除stopwords。

论文:CNN for Sentence Classification

  1. 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.
  2. 架构:预先使用开源的word vector embedding。把句子拆分成单词列表,将词向量首尾排列。在输入层后面是一个卷积层,拥有若干个卷积核,每个卷积核作为一个feature extractor,作用在h个相邻的单词上。卷积层后面跟着一个max pooling层,用于提取出卷积层当中的最明显的特征,也解决了卷积核大小不同,句子长短不同的问题。最终把池化结果与全连接层相连,通过softmax输出概率分布。
    Comment Classification in NLP

  3. 词向量使用了google的开源词向量,有着300的维度。不存在的词被随机初始化。