日志

CNN-卷积神经网络

CNN 的核心思想:局部感受野(local field) + 权值共享 + 亚采样 。

1
CNN 主要由四类层(layer)组成,即卷积层(Conv)、激活层(Activation)、池化层(Pooling) 以及全连接层(FC/Dense)。

卷积层(Convolution)

传统神经网络采用全连接的方式,往往容易导致需要训练的参数非常庞大,甚至难以训练,卷积神经网络通过卷积层的“局部连接”和“参数共享”的特性大大减少训练参数。

举例:输入 100 x 100, 隐藏层有10个神经元

传统全连接方式(Full Connected)
输入 100 x 100 与每一个神经元连接,需要训练 100 x 100 x 10 = 100000 个参数(不考虑bias)

局部连接(Sparse Connectivity)
假设每个神经元只与局部 10 x 10 个输入连接,那么只需要训练 10 x 10 x 10 = 1000 个参数!!

权值共享(Shared Weights)
如果每个神经元的连接使用相同的权值,那么实际训练参数进一步压缩到 10 x 10 x 1 = 100 个参数!!

卷积层如何生成

卷积核 (或称滤波器,filter/kernel)

2
上图是一个尺寸为 3×3 的卷积核, 即每个神经元由输入的 3×3 局部连接所得,卷积核的值通过训练来学习。

卷积核的 stride 值

3
stride 指卷积核的移动步长(这其实就是权值共享的表现),上图 stride=2,卷积核每次移动两个单元。

卷积核的 padding 值

4
padding 即在输入矩阵的四周添加填充,一方面可以减少原输入的边缘影响,另一方面可以用于维持输入和输出的维度一致(需要 stride 配合)。

padding 的常见术语包括:
(1) valid: 即 no padding
(2) same:通过填充使得输入和输出的维度保持一致

输出维度计算(取下界)
8

卷积输出-Feature Map(特征图)

实际上卷积核的作用就是对输入层进行特征学习,卷积核可以看成是对输入的一种特征映射,通过这种特征映射,一个卷积核对应生成一个特征图(Feature Map),即上图的 Result。

多通道卷积

5
当输入有多个通道(channel)时(例如图片可以有 RGB 三个通道),卷积核需要拥有相同的channel数,每个卷积核 channel 与输入层的对应 channel 进行卷积,将每个 channel 的卷积结果按位相加得到最终的 Feature Map。

多卷积核

6
当有多个卷积核时,可以学习到多种不同的特征,对应产生包含多个 channel 的 Feature Map, 例如上图有两个 filter,所以 output 有两个 channel。

为什么不需要全连接而只需要局部连接就会有效果?

对于图像而言,局部区域的像素关联性往往很强,而相距较远的区域关联性往往很弱。同样,对于文本而言,相近的词汇在语义表达上往往有紧密联系而相隔较远的词汇语义关联则相对较低。因此,只需要对局部信息进行特征提取,最后综合起来就能达到全局感知。

激活层(Activation)

阅读全文

日志

RNN/LSTM-递归神经网络

关于递归神经网络的理论介绍推荐阅读这篇非常经典的文章 → Understanding LSTM Networks
本文为总结笔记

一、RNN vs LSTM

RNN 逻辑结构图

1

LSTM 逻辑结构图

2

LSTM 是 RNN 的变体,它们的原理几乎一样,唯一的不同是 output 即 hidden state 的计算逻辑不同

RNN 如何计算某个时刻 t 的 output ?

h_t = tanh(W*[h_{t-1}, x_t]+b)

LSTM 如何计算某个时刻 t 的 output ?

遗忘门(Forget Gate): 控制遗忘哪些记忆(Cell state)

f_t = sigmoid(W_f*[h_{t-1}, x_t] + b_f)

新信息:候选记忆信息

{C}^{*} = tanh(W_c*[h_{t-1}, x_t]+b_c)

输入门(Input Gate):控制加入哪些新信息到记忆中

i_t = sigmoid(W_i*[h_{t-1}, x_t] + b_i)

新记忆:遗忘部分旧记忆,加入部分新记忆信息,得到最新的cell state

C_t = f_t*C_{t-1} + i_t*{C}^{*}

输出门(Output Gate):控制当前最新记忆的对应输出值

o_t = sigmoid(W_o*[h_{t-1}, x_t] + b_o)

输出值:最终的 hidden state

h_t = o_t*tanh(C_t)

当 Forget Gate=0, Input Gate=1, Output Gate=1 时 LSTM 与 RNN 等价

LSTM 为什么优于 RNN ?

RNN 通过叠乘的方式进行状态更新,当 sequence 比较长时容易出现梯度消失/爆炸的情况,主要原因是反向传播的连乘效应,而 LSTM 是通过门控制的叠加方式来更新状态(C_t的计算公式),所以可以有效防止梯度问题,当然对于超长的 sequence,LSTM 依然会有梯度消失或者爆炸的可能。

二、RNN/LSTM 中的 num_units 是啥意思 ?

3
num_units 相当于神经网络的隐层神经元的个数,例如上图表示一个 LSTM Cell,包含四个神经网络层,即黄色方框部分,num_units 就是每个神经网络结构的隐层神经元个数(全连接单元数),它实际上也是 LSTM 输出向量的维度数,所以 h_t 为 num_units 维向量。

三、如何计算 Keras 的 LSTM layer 的参数个数?

假设 LSTM(num_units = 150),输入维度 input_dims = 100,那么共需要训练的参数个数为:

(num\_units + input\_dims + 1) * num\_units * 4 = 150600

说明:
1. num_units + input_dims 是因为上层输出需要首先与输入进行一次concat,即 [h_t-1, x_t],
2. + 1 是因为 bias
3. * 4 是因为共有4个神经网络层(黄色方框)
4. 为什么不需要乘以 time_steps 即 number of cell ?
因为递归神经网络的每个 cell 实际上只是在不同时态下的状态,所以不同 cell 共用同一套权重,文章开头的结构图只是为了理解方便而将递归过程展开,实际上任何时候都只存在一个 cell !!

四、为什么 LSTM 要用 sigmoid 作为门控激活函数 ?

因为sigmoid的输出在0~1之间,可以很好地控制信息的删除和保留。

五、为什么 LSTM 的输入和输出值不用 sigmoid 而用 tanh 作为激活函数 ?

LSTM 内部维护了一个状态向量,其值应该可以增加或者减少,而 sigmoid 的输出为非负数,所以状态信息只能增加,显然不合适,相反,tanh 的输出范围包含了正负数,因此可以满足状态的增减。

六、什么是 sequence?

阅读全文

日志

基于词向量的文本分类推断

之前的文章中介绍过提取文本标签特征(关键词)的几种算法TF-IDFTextRankTWE, 提取到标签特征后,我们可以进一步推断文本的内容分类。本文主要介绍通过词向量模型进行内容分类的一般思路。

提取文本标签特征

假设有以下一段文本:

2016/17赛季欧冠决赛在威尔士卡迪夫千年球场打响,最终尤文图斯以1-4不敌皇家马德里,遗憾错失冠军。赛后,尤文门将布冯表示对结果非常失望,因为尤文已经做了所有能做的事情。

通过关键词提取算法我们提取到以下标签:
#欧冠#决赛#尤文图斯#皇家马德里#布冯#门将#球场#冠军

假设我们有一个关于体育的分类体系:
分类体系

图:分类体系
  • 一级分类:体育
  • 二级分类:篮球(关联标签:NBA,CBA,篮球,篮板球,助攻,盖帽,FIBA,姚明,乔丹,三双…)
  • 二级分类:足球(关联标签:世界杯,亚冠,欧冠,中超,足球,英超,西甲,梅西,里皮,马拉多纳,门将,广州恒大,曼联…)

分类推断

通过词向量模型(Word2Vec)我们可以计算两个词之间的相似度(余弦距离):

Similarity(tagA, tagB) = cos(tagA_Vec, tagB_Vec)

因此,计算文本与分类的相似度实际上就是计算文本的标签与各个分类的关联标签的相似度。
我们发现上面这段文本与足球的相似度大于与篮球的相似度:

Dist(doc_tags, soccer_tags) > Dist(doc_tags, basketball_tags)

所以推断它是关于足球的内容,再进一步把它归类到体育这个一级分类。

转载请注明出处:

© http://hejunhao.me

日志

基于 TWE 模型的关键词提取

在之前的两篇文章中分别介绍了两种常见的关键词提取算法:TF-IDFTextRank。实际上不管是 TF-IDF 还是 TextRank,它们都没有考虑文本的语义,也就是文本的内容意义。为了进一步提升效果,我们引入主题模型(LDA)和词向量模型(word2vec)也就是TWE算法。

TWE (Topical Word Embedding)

主题模型

LDA

图:主题向量模型
  • 在主题模型中每个主题实际上是一系列代表该主题的词的分布 ,例如:上图主题 Topic#1 包含的主题词分布主要有 “红包”、“微信”、“支付宝”、“玩法”等,文字大小代表该词的概率分布差异,可以推断 Topic#1 是一个关于新年红包活动的主题。

词向量模型

word2vec

图:词向量模型
  • 在词向量模型中每个词都有自己的坐标,关联度越高的词相互的距离越近。例如:“梅西” 和 “足球” 的距离比 “奥巴马” 与 “足球” 的距离要近得多,所以 “梅西” 与 “足球” 的关联度相比 “奥巴马” 更高。

基于 TWE 提取关键词

  1. 通过主题模型我们可以知道一段文本的主题分布:P(topic | doc)
  2. 结合词向量和主题向量,我们可以通过余弦函数计算两者的距离:cos(word_vec, topic_vec)
  3. 通过计算词向量与该文本所有关联主题的主题向量的余弦相似度,最终得到词与文本的语义关联度:
Sim\displaystyle\text{(word, doc)}=\sum_{k=1}^K \cos(\text{word\_vec, topic\_vec}_{_k}) \times P(\text{topic}_{_k} \mid \text{doc})

算法比较

假设有以下一段文本:
文本
分别对该文本采用 TF-IDFTextRank 以及 TWE 算法提取关键词,结果如下:
算法对比

效果评价

  1. TF-IDF 更倾向于高频词。
  2. TextRank 综合考虑文本结构和词频,但它致命的问题在于,头尾的信息由于只有单边的入度,容易被抛弃掉,例如本例中的核心词 “pagerank”。
  3. TWE 更强调语义相关性,实际的提取效果也优于前面两种方式。

论文参考

转载请注明出处:

© http://hejunhao.me

日志

NLP 关键词提取算法之 TextRank

对文本提取关键词,除了经典的 TF-IDF 算法,还有另一种常用的算法 — TextRank

TextRank 介绍

TextRank 是一种基于图的排序算法,它的基本思想来自于著名的 Google PageRank.

PageRank via @Wikipedia

图:PageRank via @Wikipedia

PageRank 的基本思想

  • 一个网页的入链越多,它就越重要。
  • 如果一个网页被越重要的网页所指向,它也越重要。

TextRank 算法简释

下图是通过 TextRank 进行关键词提取的一个简单例子
例子

图:通过 TextRank 提取文本关键词

通过 TextRank 进行关键词提取的主要步骤

  1. 对文本进行分词,并去掉停用词以及非目标词性词汇。
  2. 通过一个固定长度的滑动窗口在分词文本上滑动,每个窗口内的词根据共现关系构建一条边,最终形成一个图。
  3. 对图进行 PageRank,实际上就是投票和迭代的过程。
  4. 选出权重最高的 TopK 个词。

算法总结

  • TextRank 算法一定程度上考虑了文本中词与词之间的关系,也就是文本结构,在实际应用中它的效果一般会比 TF-IDF 好,当然它的计算复杂度也比 TF-IDF 高得多。
  • TextRank 算法更擅长处理长文本,对短文本的效果并不理想,主要因为短文本的词汇信息较弱,构建的图并不理想。
  • TextRank 算法仍然倾向于选择出现较为频繁的词作为关键词。
转载请注明出处:

© http://hejunhao.me

日志

NLP 关键词提取算法之 TF-IDF

TF-IDF 是处理 NLP 问题时经常使用的经典算法,常用于对文本进行关键词的提取。

TF-IDF 介绍

计算公式

TF-IDF 的计算非常简单


TF-IDF = TF(\text{文章词频}) * IDF(\text{逆文档频率})

概念解释

TF: 指某个词在一段文本中出现的词频


TF = \dfrac{\text{某个词在文章中出现的次数}}{\text{文章总词数}}

IDF: 指某个词在所有文本(对应语境所在的训练语料,例如:科学领域、体育领域)中的区分度,它认为越少出现的词区分度越高,相应的 IDF 值也越高。


IDF = \log\dfrac{(\text{训练语料的总文档数+1})}{(\text{出现该词的文档数+1})}

分母 “+1” 是为了防止分母为零,同时相应地分子 “+1” 以防止 IDF 为负数。

算法总结

经验

从计算公式可知,TF-IDF 的准确性非常依赖 IDF 模型的质量。同一个词在不同领域对应的区分度(IDF)也不同甚至差别巨大,例如 “冠军” 在体育领域的语料中出现的次数远远大于在政治领域的语料中所出现的次数,这意味着在后者的语境下,“冠军” 这个词的区分度更高,IDF 值更大。要提升 TF-IDF 的算法效果一般需要根据业务场合单独训练特定领域的 IDF 模型。

评价

  • TF-IDF 计算复杂度低,适合对效率优先的场景。
  • 由于它只依赖关键词的统计特征进行排序,有时候效果并不理想,比如有时候文本的关键要素不一定是频繁出现的元素。
  • 另外它也缺乏对文本结构的考虑。
转载请注明出处:

© http://hejunhao.me