NLP—fastText、CNN

衡量word embedding质量好坏要通过实际应用来判断;

1、fastText

FastText是Facebook开发的一款快速文本分类器.

       fastText 方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征。

       可以用来训练词向量和进行文本分类,是有监督的分类;

1. 模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是 分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用; 在fasttext训练文本向量进行分类的过程是用这个文档所有单词的词向量的平均预测标签;
2. 模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

       fastText 训练词向量的模型架构和 Word2Vec 中的 CBOW 模型很类似。

       fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。 
       fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。 

       总:输入层为词和词组(n-gram)构成的特征向量,特征向量经过线性变换映射到隐藏层,隐藏层通过求解最大似然函数,然后根据每个类别的权重和模型的参数构建Huffman树作为输出,在每个非叶子结点处都要做一次二分类,Huffman树的每个叶子结点为一个label,预测出来的样本为属于对应label的概率;

       在用n个训练样本进行训练时,根据每个类别出现的次数作为权重来建Huffman树,出现次数多的类别的样本,路径就短,越浅;出现次数少的类别的样本,路径就长。

极大似然估计:当模型是条件概率分布,损失函数可用对数函数表示,经验风险最小化等价于极大似然估计。

 

【与Word2Vec的比较】:

灵活体现在两个方面:

1. 模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

2. 模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用;

两者本质的不同,体现在 h-softmax的使用:
Wordvec的目的是得到词向量,该词向量最终是在输入层得到,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。
fasttext则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

 

fastTest训练词向量,生成的是model.bin(模型参数)和model.vec(词向量),训练样本需按特定的格式 "_label_1  balaba*";

import fasttext

# Skipgram model
model = fasttext.skipgram('new_trian.txt', 'model')    # new_trian.txt 每一行为一个句子的分词结果

# CBOW model    生成model.bin  和 model.vec
model = fasttext.cbow('new_trian.txt', 'model')

# 文本分类
classifier = fasttext.supervised('train.txt', 'model')
result = classifier.test('test.txt')
 
labels = classifier.predict(sentence)
print(labels)

 

参考链接:

NLP︱高级词向量表达(二)——FastText(简述、学习笔记)

使用fasttext实现文本处理及文本预测

 

2、CNN做句子分类

 

具体结构介绍:

CNN很简单,共分四层,

第一层是词向量层,doc中的每个词都将其映射到词向量空间,假设词向量为k维,n个词映射后,相当于生成一张n*k维的图像;

第二层是卷积层,多个滤波器作用于词向量层,不同滤波器生成不同的feature map;

第三层是pooling层,取每个feature map的最大值,这样操作可以处理变长文档,因为第三层输出只依赖于滤波器的个数;

第四层是一个全连接的softmax层,输出是每个类目的概率。

除此之外,输入层可以有两个channel,其中一个channel采用预先利用word2vec训练好的词向量,另一个channel的词向量可以通过backpropagation在训练过程中调整。

1.输入层

       可以把输入层理解成把一句话转化成了一个二维的图像:每一排是一个词的word2vec向量,纵向是这句话的每个词按序排列。输入数据的size,也就是图像的size,n×k,n代表训练数据中最长的句子的词个数,这里是64(不够64个词的句子采用zero padding),k是embbeding的维度,这里是300。所谓的static和non-static的chanel解释如下:

  • CNN-rand: 所有的word vector都是随机初始化的,同时当做训练过程中优化的参数;
  • CNN-static: 所有的word vector直接使用无监督学习即Google的Word2Vector工具(COW模型)得到的结果,并且是固定不变的;
  • CNN-non-static: 所有的word vector直接使用无监督学习即Google的Word2Vector工具(COW模型)得到的结果,但是会在训练过程中被Fine tuned;
  • CNN-multichannel: CNN-static和CNN-non-static的混合版本,即两种类型的输入;

       从输入层还可以看出kernel的size。很明显kernel的高(h)会有不同的值,图上有的是2,有的是3。这很容易理解,不同的kernel想获取不同范围内词的关系;和图像不同的是,nlp中的cnn的kernel的宽(w)一般都是图像的宽,也就是word2vec的维度,这也可以理解,因为我们需要获得的是纵向的差异信息,也就是不同范围的词出现会带来什么信息。

2.卷积层

输入层通过卷积操作得到若干个Feature Map,卷积窗口的大小为 h ×k ,其中 h  表示纵向词语的个数,而  k  表示word vector的维数。通过这样一个大型的卷积窗口,将得到若干个列数为1的Feature Map;

3.池化层

接下来的池化层,文中用了一种称为Max-over-timePooling的方法。这种方法就是简单地从之前一维的Feature Map中提出最大的值,文中解释最大值代表着最重要的信号。可以看出,这种Pooling方式可以解决可变长度的句子输入问题(因为不管Feature Map中有多少个值,只需要提取其中的最大值)。最终池化层的输出为各个Feature Map的最大值们,即一个一维的向量。这被认为是按照这个kernel卷积后的最重要的特征。

4.全连接层

池化层的一维向量的输出通过全连接的方式,连接一个Softmax层,Softmax层可根据任务的需要设置(通常反映着最终类别上的概率分布)。这里的全连接层是带dropout的全连接层和softmax。

训练方案:

       在倒数第二层的全连接部分上使用Dropout技术,Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了,它是防止模型过拟合的一种常用的trikc。同时对全连接层上的权值参数给予L2正则化的限制。这样做的好处是防止隐藏层单元自适应(或者对称),从而减轻过拟合的程度。

       在样本处理上使用minibatch方式来降低一次模型拟合计算量,使用shuffle_batch的方式来降低各批次输入样本之间的相关性(在机器学习中,如果训练数据之间相关性很大,可能会让结果很差、泛化能力得不到训练、这时通常需要将训练数据打散,称之为shuffle_batch)。

参考链接:

用CNN做句子分类:CNN Sentence Classification (with Theano code)

Text-CNN 文本分类

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值