欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识!

上一篇文章中一直围绕着CNN处理图像数据进行讲解,而CNN除了处理图像数据之外,还适用于文本分类。CNN模型首次使用在文本分类,是Yoon Kim发表的“Convolutional Neural Networks for Sentence Classification”论文中。在讲解text-CNN之前,先介绍自然语言处理和Keras对自然语言的预处理。

自然语言处理就是通过对文本进行分析,从文本中提取关键词来让计算机处理或理解自然语言,完成一些有用的应用,如:情感分析,问答系统等。比如在情感分析中,其本质就是根据已知的文字和情感符号(如评论等)推测这段文字是正面还是负面的。想象一下,如果我们能够更加精确地进行情感分析,可以大大提升人们对于事物的理解效率。比如不少基金公司利用人们对于某家公司的看法态度来预测未来股票的涨跌。

接下来将使用imdb影评数据集简单介绍Keras如何预处理文本数据。该数据集在这里下载。由于下载得的是tar.gz压缩文件,可以使用python的tarfile模块解压。解压后的目录为:

1.读取imdb数据集

我们通过以下函数分别读取train和test中的所有影评

得到的影评如下图,每条影评用双引号包住。

2.使用Tokenizer将影评文字转换成数字特征

在上文中已经得到了每条影评文字了,但是text-CNN的输入应该是数字矩阵。可以使用Keras的Tokenizer模块实现转换。

简单讲解Tokenizer如何实现转换。当我们创建了一个Tokenizer对象后,使用该对象的fit_on_texts()函数,可以将输入的文本中的每个词编号,编号是根据词频的,词频越大,编号越小。可能这时会有疑问:Tokenizer是如何判断文本的一个词呢?其实它是以空格去识别每个词。因为英文的词与词之间是以空格分隔,所以我们可以直接将文本作为函数的参数,但是当我们处理中文文本时,我们需要使用分词工具将词与词分开,并且词间使用空格分开。具体实现如下:

使用word_index属性可以看到每次词对应的编码,可以发现类似”the”、”a”等词的词频很高,但是这些词并不能表达文本的主题,我们称之为停用词。对文本预处理的过程中,我们希望能够尽可能提取到更多关键词去表达这句话或文本的中心思想,因此我们可以将这些停用词去掉后再编码。网上有许多归纳好的停用词,大家可以下载了之后,去除该文本中的停用词。

对每个词编码之后,每句影评中的每个词就可以用对应的编码表示,即每条影评已经转变成一个向量了:

3.让每句数字影评长度相同

对每个词编码之后,每句影评中的每个词就可以用对应的编码表示,即每条影评已经转变成一个向量。但是,由于影评的长度不唯一,需要将每条影评的长度设置一个固定值。

每个句子的长度都固定为150,如果长度大于150,则将超过的部分截掉;如果小于150,则在最前面用0填充。每个句子如下:

4.使用Embedding层将每个词编码转换为词向量

通过以上操作,已经将每个句子变成一个向量,但上文已经提及text-CNN的输入是一个数字矩阵,即每个影评样本应该是以一个矩阵,每一行代表一个词,因此,需要将词编码转换成词向量。使用Keras的Embedding层可以实现转换。Embedding层基于上文所得的词编码,对每个词进行one-hot编码,每个词都会以一个vocabulary_size(如上文的2000)维的向量;然后通过神经网络的训练迭代更新得到一个合适的权重矩阵(具体实现过程可以参考skip-gram模型),行大小为vocabulary_size,列大小为词向量的维度,将本来以one-hot编码的词向量映射到低维空间,得到低维词向量。比如the的编号为1,则对应的词向量为权重矩阵的第一行向量。如下图,蓝色线对应权重值组成了该词的词向量。需要声明一点的是Embedding层是作为模型的第一层,在训练模型的同时,得到该语料库的词向量。当然,也可以使用已经预训练好的词向量表示现有语料库中的词。

至此已经将文本数据预处理完毕,将每个影评样本转换为一个数字矩阵,矩阵的每一行表示一个词向量。下图梳理了处理文本数据的一般步骤。在此基础上,可以针对相应数据集的特点对数据集进行特定的处理。比如:在该数据集中影评可能含有一些html标签,我们可以使用正则表达式将这些标签去除。

下一篇文章,我们将介绍text-CNN模型,利用该模型对imdb数据集进行情感分析,并在文末给出整个项目的完整代码链接。欢迎持续关注!

本篇文章出自http://www.tensorflownews.com,对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站!

使用Keras进行深度学习:(三)使用text-CNN处理自然语言(上)相关推荐

  1. 【深度学习】基础知识--CNN:图像分类(上)

    作者信息: 华校专,曾任阿里巴巴资深算法工程师.智易科技首席算法研究员,现任腾讯高级研究员,<Python 大战机器学习>的作者. 编者按: 算法工程师必备系列更新啦!继上次推出了算法工程 ...

  2. TensorFlow 2 和 Keras 高级深度学习:6~10

    原文:Advanced Deep Learning with TensorFlow 2 and Keras 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文 ...

  3. 使用keras进行深度学习_如何在Keras中通过深度学习对蝴蝶进行分类

    使用keras进行深度学习 A while ago I read an interesting blog post on the website of the Dutch organization V ...

  4. 基于keras的深度学习基本概念讲解

    基于keras的深度学习基本概念讲解 Tensorflow1.0正式发布,谷歌首届Tensorflow开发者大会在山景召开,深度学习迎来新的高潮和狂欢.随着深度学习框架的普及和推广,会有越来越多人加入 ...

  5. DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略

    DL框架之Keras:深度学习框架Keras框架的简介.安装(Python库).相关概念.Keras模型使用.使用方法之详细攻略 目录 Keras的简介 1.Keras的特点 2.Keras四大特性 ...

  6. 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践

    ###欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memor ...

  7. Keras教程:使用Keras开始深度学习和Python(上)

    概述:包括什么内容呢 用Keras训练第一个简单的神经网络不需要很多代码,但是我们将慢慢开始,逐步进行,确保您理解如何在自己的自定义数据集上训练网络. 我们今天要讨论的步骤包括: 在系统上安装Kera ...

  8. 使用NasNet模型与keras做深度学习训练时报错

    使用NasNet模型与keras做深度学习训练时采用以下代码 一.代码片: inputs = Input((224, 224, 3)) base_model = NASNetMobile(includ ...

  9. 使用TensorFlow、Keras和深度学习实现像素无序超分辨率

    使用TensorFlow.Keras和深度学习实现像素无序超分辨率> pixel shuffle Super Resolution 像素无序/洗牌超分辨率 Deep Learning Super ...

  10. 深度学习三巨头共同发文,聊聊深度学习的过去、现在与未来

    作者|Yoshua Bengio,Yann LeCun,Geoffrey Hinton 译者|香槟超新星 出品|AI科技大本营(ID:rgznai100) 人工神经网络领域的研究是基于对人类智能的观察 ...

最新文章

  1. oracle 统计信息字典表,Oracle数据字典表查询
  2. 必读 | 六月份不容错过的十大重磅好文,机器学习和数据科学的小伙伴拿走不谢 原创 2017-07-10 爱收藏的 AI科技大本营 作者 | Flavian Hautbois 翻译 | AI科技大
  3. 更新SQL Server实例所有数据库表统计信息
  4. mysql not in 转化_解析MySQL隐式转换问题
  5. coredump gdb 调试_Linux下如何使用gdb调试core文件
  6. 区块链 共识机制研究的重要定理有哪些
  7. Subsonic简单的语法整理
  8. html 复制文本 点击复制按钮
  9. 野指针?悬空指针? 一文带你搞懂!
  10. 如何将Figma转成蓝湖教程
  11. Jmockit使用详解之Mocking
  12. HTML常见问题整理1
  13. 计算机的正确配置文件,显示器颜色配置文件在win10电脑中设置正确配置的方法...
  14. Google Earth上划定矢量范围并导出为KMZ文件
  15. 信息隐藏——二值图像的信息隐藏
  16. 短信验证码测试——短信轰炸之横向轰炸和纵向轰炸
  17. c语言兔子序列第8年不繁殖,基于链表的兔子序列生成研究.pdf
  18. Mac OSX中设置路由
  19. USB Camera摄像头 (UVC 与 gspca)
  20. 花老湿学习OpenCV:分水岭原理和实现watershed()

热门文章

  1. 项目Alpha冲刺Day4
  2. 一个小栗子聊聊JAVA泛型基础
  3. Xamarin组件包 Xamarin.ToolKit
  4. tiny4412 linux+qtopia nfs网络文件系统的挂载
  5. 子类能不能继承父类的构造方法?
  6. 940mx黑苹果驱动_超详细黑苹果安装图文教程送EFI配置合集及系统
  7. Linux启动shell的快捷方式,Linux下为可执行shell脚本文件(.sh),制作桌面启动快捷方式...
  8. 计算机画面的音乐素材,音效素材:高科技用户界面UI点触计算机数据分析全息音效合集...
  9. linux交叉编译无法识别gcc编译器
  10. 20 个最常用的 Git 命令用法说明及示例