联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
深度学习在OCR文本分类中的应用
深度学习在OCR文本分类中的应用
引言
文本分类这个在NLP范畴是一个很普通而应用很广的课题,而且曾经有了相当多的研讨成果,比方应用很普遍的基于规则特征的SVM分类器,以及加上朴素贝叶斯办法的SVM分类器,当然还有最大熵分类器、基于条件随机场来构建依赖树的分类办法、当然还有普通的BP神经网络分类办法。在传统的文本分类词袋模型中,在将文本转换成文本向量的过程中,常常会形成文本向量维渡过大的问题,当然也有其他的紧缩了维度的一些分类办法。但是,以上的这些办法,又由于在锻炼的过程中丧失了单词的次第信息,在文本的分类过程中,效果又不一定尽如人意。本文主要是在学习了几篇深度学习在文本分类上的研讨的论文【1,2,3,4,5】以及博文【6】之后,对其论文中提到的办法做一个简单的总结和回忆。
背景
本博文中设计的深度学习内容主要指的是RNN和CNN,而在论文【1,2,3,4,5】中其实主要触及的是运用CNN停止文本建模与分类,论文【3】提到了运用RNN锻炼文本向量的办法,所以为了描绘的简单起见,我直接运用了深度学习来表示本文中运用的分类办法。
CNN之所以可以被普遍运用到文本分类中去,主要的缘由其实很简单,由于CNN和N-gram模型类似,CNN中的filter window其实能够看做是N-gram的办法,不过CNN由于运用了卷积层和pooling层,使得CNN可以一方面减少了锻炼参数个数,同时也可以抽取到文本的更高层的信息。而RNN更多的是用在文本建模以及机器翻译上,直接用在文本分类上仿佛不是很多的样子。
CNN用于文本分类
这里打算运用论文【1,2】来阐明CNN在文本分类上的应用。两篇文章发表的日期十分接近,都是2014年的文章。
首先来看看论文【1】(Convolutional Neural Network for Sentence Classification)的详细办法
来看下作者的CNN构造:
CNN构造图
解释一下上图:
在最左边的输出层有两个channel,每个channel是一个二维的矩阵,矩阵的列的长度等于语句sentence的长度(也就是sentence中的单词个数,经过padding使得待分类的每个sentence都有相同的长度),矩阵的行向量表示每个单词的向量方式,文中作者运用了word2vec工具初始化了,也就是每个单词都做了embedding。两个channel在初始化的时分是一样的,而之所以运用了两个channel就是由于两个channel的目的不一样,其中一个为static,也就是在给定了embedding之后,其值就不会变了,另一个channel为 non-static,表示embedding向量是参数,也是需求在推导中求出来的。运用两个channel的目的是思索到:第一,假如只是运用static,由于运用word2vec的锻炼语料和实验中的实验语料可能存在不分歧,招致embedding存在偏向;第二,假如只是运用双方面的non-static向量,其初始化对其结果和收敛快慢都有影响。所以运用混合的channel可以使上面的两种问题得到“中和”。
在输入层之后就是卷积层,以上图为例,最上面的filter的shape是3*6,也就是关于这句话:“wait for the vedio and do n’t rent it”,这个filter每隔三个词就做一次卷积操作,关于长度为8的句子,在这个filter的卷积操作之后,会产生一个7*1的输出。当然卷积层的filter个数和filter的shape都是能够变的,原理是一样的。
后面的一层是pooling层,这篇论文运用的是max-pooling,也就是上文的7*1 的卷积层输出将会pooling成一个1*1的数值,有n个filter就会产生n个1*1的数值,这n个数值将会用于后面的全衔接层。
之后是一个全衔接输出层,输出层输出的个数对应的是文本的类别数量,将上面的n个pooling层输出全衔接到输出层,输出层运用的是softmax鼓励函数。
从上面的描绘能够看出,CNN关于分本分类的思绪很明晰,完成起来也不难,参数的锻炼我就不提了,其实验结果我会在后面的局部中给出代码和结果
然后来看看论文【2】(Effective Use of Word Order for Text Categorization with Convolutional Neural Networks)对CNN分类办法的讨论
有了上面的根底,了解论文2的观念也就变得容易了,其实论文【2】在对文本向量的预处置过程中还是显得稍微粗糙,直接运用的是one-hot模型,不过是停止了一些的改良。主要的区别还是在词向量的表达方式上,在该篇论文中,作者直接运用了one-hot词向量模型,这个作者称之为seq-CNN的模型,它显然这会带来维度的猛烈增加,然后作者提出了一种改良型:bow-CNN模型,其实就是将左近的连续几个单词构建成一个词向量,其区别如下:
seq-CNN模型
seq-CNN模型
bow-CNN模型
bow-CNN模型
其他的锻炼过程和1相似,所以就不提及了。
CNN和RNN的混合运用
CNN和RNN用于文本向量的锻炼
论文【4】的观念比拟共同,作者倒不是用CNN或者RNN去做分类模型,而是运用了CNN和RNN去锻炼了文本的向量,最后反而是运用普通的ANN作为分类器,这里就主要说一说作者的产生文本向量的过程
首先看看CNN模型是如何产生文本向量的。
关于长度为l的sentence,每个单词都是m维的词向量,关于一个filter,其操作如下:
cnn
上图是filter的shape是3*m,在卷积层,可以得到C1C2..Cl-2,然后对这个停止max-pooling操作,最终得到一个数值
运用n个filter反复上面的操作,我们可以得到一个n维的向量s,这个就是我们得到的文本向量。
然后看看RNN模型是如何产生文本向量的。
文中作者运用的是RNN的变体LSTM,其构造如下:
rnn
上面的x1-xl也是m维度的向量,而h1-hl是维度为n的一维向量,最后面的Pooling层代用的是max-pooling或者mean-pooling
得到文本向量之后就能够送入ANN神经网络分类器里面去停止分类锻炼了,锻炼过程就不提及了
CNN和RNN的混合模型运用
论文【3】(A C-LSTM Neural Network for Text Classification)提到了一种新的模型,也就是将CNN和RNN混合运用作为文本的分类器,论文是2015年的,我觉得观念还是比拟新颖的,所以特地拿出来讲一下。
模型如下:
C-LSTM
前面的卷积层和前面的文章提到的是一样的,也就是关于每个filter,从sentence的embedding矩阵停止卷积操作之后,得到feature map,然后重点来了,从feature map 层到window feature sequence层,把相同颜色的放在一个序列里面,然后依次排列下来,其实很美观到,在window feature sequence层的每个序列,其实和原始sentence的序列是对应的,坚持了原有的相对次第,只不过是中间停止了卷积的操作。
window feature sequence层的序列向量是下一层的LSTM的网络的输入input,该网络运用了最后一层中间层的隐含层输出h作为该网络的输出结果output。然后就是锻炼LSTM的参数问题了。
实验
本文的实验是依据博文IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW停止反复实验的。针对的是论文【1】所提出的实验。
实验数据: Movie Review data from Rotten Tomatoes
数听说明:电影评论:5331的正面评论和5331的负面评论
实验工具:Google的tensor flow框架
测试集:1000
锻炼集:剩下的数据
实验结果:
result
阐明:红色线表示的是锻炼集,蓝色线表示的是测试集,测试集的精确度最好大约能到76%,这和论文中的数据差不多
结论
深度学习在这几年特别火,在NLP范畴,深度学习也是风中翘楚,特别是在机器翻译、语音辨认等范畴颇有建树,这次也是总结了几篇关于文本分类的这方面论文,顺别学习一下Google的深度学习tensor flow框架,还是有一点小收获的。
文本分类这个在NLP范畴是一个很普通而应用很广的课题,而且曾经有了相当多的研讨成果,比方应用很普遍的基于规则特征的SVM分类器,以及加上朴素贝叶斯办法的SVM分类器,当然还有最大熵分类器、基于条件随机场来构建依赖树的分类办法、当然还有普通的BP神经网络分类办法。在传统的文本分类词袋模型中,在将文本转换成文本向量的过程中,常常会形成文本向量维渡过大的问题,当然也有其他的紧缩了维度的一些分类办法。但是,以上的这些办法,又由于在锻炼的过程中丧失了单词的次第信息,在文本的分类过程中,效果又不一定尽如人意。本文主要是在学习了几篇深度学习在文本分类上的研讨的论文【1,2,3,4,5】以及博文【6】之后,对其论文中提到的办法做一个简单的总结和回忆。
背景
本博文中设计的深度学习内容主要指的是RNN和CNN,而在论文【1,2,3,4,5】中其实主要触及的是运用CNN停止文本建模与分类,论文【3】提到了运用RNN锻炼文本向量的办法,所以为了描绘的简单起见,我直接运用了深度学习来表示本文中运用的分类办法。
CNN之所以可以被普遍运用到文本分类中去,主要的缘由其实很简单,由于CNN和N-gram模型类似,CNN中的filter window其实能够看做是N-gram的办法,不过CNN由于运用了卷积层和pooling层,使得CNN可以一方面减少了锻炼参数个数,同时也可以抽取到文本的更高层的信息。而RNN更多的是用在文本建模以及机器翻译上,直接用在文本分类上仿佛不是很多的样子。
CNN用于文本分类
这里打算运用论文【1,2】来阐明CNN在文本分类上的应用。两篇文章发表的日期十分接近,都是2014年的文章。
首先来看看论文【1】(Convolutional Neural Network for Sentence Classification)的详细办法
来看下作者的CNN构造:
CNN构造图
解释一下上图:
在最左边的输出层有两个channel,每个channel是一个二维的矩阵,矩阵的列的长度等于语句sentence的长度(也就是sentence中的单词个数,经过padding使得待分类的每个sentence都有相同的长度),矩阵的行向量表示每个单词的向量方式,文中作者运用了word2vec工具初始化了,也就是每个单词都做了embedding。两个channel在初始化的时分是一样的,而之所以运用了两个channel就是由于两个channel的目的不一样,其中一个为static,也就是在给定了embedding之后,其值就不会变了,另一个channel为 non-static,表示embedding向量是参数,也是需求在推导中求出来的。运用两个channel的目的是思索到:第一,假如只是运用static,由于运用word2vec的锻炼语料和实验中的实验语料可能存在不分歧,招致embedding存在偏向;第二,假如只是运用双方面的non-static向量,其初始化对其结果和收敛快慢都有影响。所以运用混合的channel可以使上面的两种问题得到“中和”。
在输入层之后就是卷积层,以上图为例,最上面的filter的shape是3*6,也就是关于这句话:“wait for the vedio and do n’t rent it”,这个filter每隔三个词就做一次卷积操作,关于长度为8的句子,在这个filter的卷积操作之后,会产生一个7*1的输出。当然卷积层的filter个数和filter的shape都是能够变的,原理是一样的。
后面的一层是pooling层,这篇论文运用的是max-pooling,也就是上文的7*1 的卷积层输出将会pooling成一个1*1的数值,有n个filter就会产生n个1*1的数值,这n个数值将会用于后面的全衔接层。
之后是一个全衔接输出层,输出层输出的个数对应的是文本的类别数量,将上面的n个pooling层输出全衔接到输出层,输出层运用的是softmax鼓励函数。
从上面的描绘能够看出,CNN关于分本分类的思绪很明晰,完成起来也不难,参数的锻炼我就不提了,其实验结果我会在后面的局部中给出代码和结果
然后来看看论文【2】(Effective Use of Word Order for Text Categorization with Convolutional Neural Networks)对CNN分类办法的讨论
有了上面的根底,了解论文2的观念也就变得容易了,其实论文【2】在对文本向量的预处置过程中还是显得稍微粗糙,直接运用的是one-hot模型,不过是停止了一些的改良。主要的区别还是在词向量的表达方式上,在该篇论文中,作者直接运用了one-hot词向量模型,这个作者称之为seq-CNN的模型,它显然这会带来维度的猛烈增加,然后作者提出了一种改良型:bow-CNN模型,其实就是将左近的连续几个单词构建成一个词向量,其区别如下:
seq-CNN模型
seq-CNN模型
bow-CNN模型
bow-CNN模型
其他的锻炼过程和1相似,所以就不提及了。
CNN和RNN的混合运用
CNN和RNN用于文本向量的锻炼
论文【4】的观念比拟共同,作者倒不是用CNN或者RNN去做分类模型,而是运用了CNN和RNN去锻炼了文本的向量,最后反而是运用普通的ANN作为分类器,这里就主要说一说作者的产生文本向量的过程
首先看看CNN模型是如何产生文本向量的。
关于长度为l的sentence,每个单词都是m维的词向量,关于一个filter,其操作如下:
cnn
上图是filter的shape是3*m,在卷积层,可以得到C1C2..Cl-2,然后对这个停止max-pooling操作,最终得到一个数值
运用n个filter反复上面的操作,我们可以得到一个n维的向量s,这个就是我们得到的文本向量。
然后看看RNN模型是如何产生文本向量的。
文中作者运用的是RNN的变体LSTM,其构造如下:
rnn
上面的x1-xl也是m维度的向量,而h1-hl是维度为n的一维向量,最后面的Pooling层代用的是max-pooling或者mean-pooling
得到文本向量之后就能够送入ANN神经网络分类器里面去停止分类锻炼了,锻炼过程就不提及了
CNN和RNN的混合模型运用
论文【3】(A C-LSTM Neural Network for Text Classification)提到了一种新的模型,也就是将CNN和RNN混合运用作为文本的分类器,论文是2015年的,我觉得观念还是比拟新颖的,所以特地拿出来讲一下。
模型如下:
C-LSTM
前面的卷积层和前面的文章提到的是一样的,也就是关于每个filter,从sentence的embedding矩阵停止卷积操作之后,得到feature map,然后重点来了,从feature map 层到window feature sequence层,把相同颜色的放在一个序列里面,然后依次排列下来,其实很美观到,在window feature sequence层的每个序列,其实和原始sentence的序列是对应的,坚持了原有的相对次第,只不过是中间停止了卷积的操作。
window feature sequence层的序列向量是下一层的LSTM的网络的输入input,该网络运用了最后一层中间层的隐含层输出h作为该网络的输出结果output。然后就是锻炼LSTM的参数问题了。
实验
本文的实验是依据博文IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW停止反复实验的。针对的是论文【1】所提出的实验。
实验数据: Movie Review data from Rotten Tomatoes
数听说明:电影评论:5331的正面评论和5331的负面评论
实验工具:Google的tensor flow框架
测试集:1000
锻炼集:剩下的数据
实验结果:
result
阐明:红色线表示的是锻炼集,蓝色线表示的是测试集,测试集的精确度最好大约能到76%,这和论文中的数据差不多
结论
深度学习在这几年特别火,在NLP范畴,深度学习也是风中翘楚,特别是在机器翻译、语音辨认等范畴颇有建树,这次也是总结了几篇关于文本分类的这方面论文,顺别学习一下Google的深度学习tensor flow框架,还是有一点小收获的。
上一条:深度学习在目标跟踪中的应用
下一条:人脸识别技术