深度学习实战篇-基于RNN的中文分词探索

近年来,深度学习在人工智能的多个领域取得了显著成绩。微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平。百度在中文语音识别上取得了97%的准确率,已经超过了人类的识别能力。

随着深度学习在越来越多的领域中取得了突破性进展,自然语言处理这一人工智能的重要领域吸引了大批的研究者的注意力。最近谷歌发布了基于深度学习的机器翻译(GNMT),和基于短语的机器翻译相比,错误率降低了55%-85%以上,从而又引发了深度学习在自然语言处理上的热潮。

自然语言处理是人工智能和语言学的交叉学科,在搜索引擎,问答系统,机器翻译等人工智能领域发挥着重要作用。分词,词性标注,命名实体识别作为自然语言处理的基础领域,同样吸引着大批研究者的注意力,本篇就结合我们近期的一些探索从中文分词角度探索深度学习在自然语言处理中的应用。

中文分词是将自然语言文本划分成词语序列,目前主流方法为序列标注,即用BMES这个四个标签去标注句子中的每一个字(B是词首,M是词中,E是词尾,S是单字词)。

对于 { 京东 搜索 与 大数据 平台 数据挖掘 算法部 }

其标注为{ BE BE S BME BE BMME BME }

使用Keras实现了基于RNN的中文分词,接下来就分别介绍一下Keras和中文分词实战。

1. Keras介绍

Keras 是一个高度模块化的深度学习框架,使用python编写,封装了大量的函数接口,可支持CPU和GPU训练。Keras提供了一系列模块,这样我们在实验模型的时候只需要调用这些模块就可以完成模型搭建,不用自己在去实现各层网络。

主要模块有Optimizers(优化函数模块),常用的有SGD(随机梯度下降)、 Adam;Objectives(目标函数模块),常用的有均方误差,交差熵;Activations(激活函数模块),sigmoid用来做二分类、relu可解决梯度消失问题、softmax常用来做多分类;Layers(网络层模块),提供了CNN(卷积层)、RNN(LSTM、GRU)、embeddings;Initializations(初始化模块),主要用于模型参数的初始化,常用的有均匀分布初始化,高斯分布初始化。

使用Keras进行模型试验,可分为四个步骤(数据准备,模型构建, 模型训练, 模型测试),本文也将基于这四个步骤探索基于RNN的中文分词。

2. 中文分词实战

数据准备

训练数据使用的是bakeoff2005中的北京大学的标注语料,train作为训练样本,test作为测试样本。

统计训练样本中出现的字符并生成字典,同时将训练样本中字符全部映射成对应的字典索引(为了处理未登录词,将出现次数低于2次的字符映射为未登录词)。在序列标注分词中,一个字的标签受到上下文的影响,因而取该字的前后3个字作为特征。

模型构建

本文模型由一层Embedding层,2层LSTM,一个Dense输出层构成,目标函数为交叉熵,优化函数选择adam。为了验证方法的有效性,本文未采用外部语料预训练词向量,而是在训练数据上训练词向量。

Embedding层完成从词典索引到词向量的映射过程,即输入一个词典索引,输出该索引对应的词向量,第一层LSTM层输入为词向量序列,输出为隐层输出序列,第二层LSTM层输入为前一层输出序列,输出为隐层个数,Dense输出层输入为第二层LSTM输出,输出为类别数。

在这里embeddingDim设为128,RNN序列长度设为7,LSTM隐层个数设为100,outputDims设为4,batch_size设为128。

模型训练

分别在CPU和GPU(使用单卡)上进行模型训练,使用单卡GPU的速度为CPU的4.7倍,未来还会测试单机多卡和多机多卡的性能。

CPU

GPU

模型测试

使用北京大学test进行测试,并使用bakeoff2005的测试脚本进行测试,结果如下所示:

3.总结和展望

深度学习的优点是可以自动发现特征,大大减少了特征工程的工作量。目前深度学习已经在语音和图像等领域取得重大进展,自然语言与语音、图像不同,是抽象符号,因而如何将深度学习应用于自然语言处理需要进行更多的研究和探索:针对不同任务的不同字词表示、将先验知识和深度学习相结合、Attention机制的运用。同时相对于标注数据,未标注数据量更多,如何运用未标注数据也是目前自然语言处理探索的热点和难点。

深度学习实战篇-基于RNN的中文分词探索的更多相关文章

  1. 『深度应用』NLP机器翻译深度学习实战课程·壹(RNN base)

    深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内容:(更新 ...

  2. 学习Keras:《Keras快速上手基于Python的深度学习实战》PDF代码+mobi

    有一定Python和TensorFlow基础的人看应该很容易,各领域的应用,但比较广泛,不深刻,讲硬件的部分可以作为入门人的参考. <Keras快速上手基于Python的深度学习实战>系统 ...

  3. 学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

    TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用.<TensorFlow:实战Google深度学习框架(第2版)>为TensorFlow入门参考书,帮助快速. ...

  4. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)

    0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...

  5. TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

    前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...

  6. 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别

    深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...

  7. 对比学习:《深度学习之Pytorch》《PyTorch深度学习实战》+代码

    PyTorch是一个基于Python的深度学习平台,该平台简单易用上手快,从计算机视觉.自然语言处理再到强化学习,PyTorch的功能强大,支持PyTorch的工具包有用于自然语言处理的Allen N ...

  8. 学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码

    入门神经网络深度学习,推荐学习<深度学习入门:基于Python的理论与实现>,这本书不来虚的,一上来就是手把手教你一步步搭建出一个神经网络,还能把每一步的出处讲明白.理解神经网络,很容易就 ...

  9. zz深度学习在美团配送 ETA 预估中的探索与实践

    深度学习在美团配送 ETA 预估中的探索与实践 比前一版本有改进:   基泽 周越 显杰 阅读数:32952019 年 4 月 20 日   1. 背景 ETA(Estimated Time of A ...

随机推荐

  1. SqlServer 导出指定表数据 生成Insert脚本

    版权声明:本文为博主原创文章,未经博主允许不得转载.

  2. AI.框架理论.语义网.语言间距.孤单

    刷个博客,转载自于科学网:AI.框架理论.语义网.语言间距.孤单 一:引言: AI几乎是计算机科学家的梦想,自动化比计算机发展的要早的多.早期的自动化节省了大量人力,激发了人类懒惰的滋长和对自身进化缓 ...

  3. ROS:Nvidia Jetson TK1平台安装使用ROS

    原文连接: http://wiki.ros.org/indigo/Installation/UbuntuARM Ubuntu ARM install of ROS Indigo There are c ...

  4. C++ Rand()各种实现

    参考链接:http://www.cplusplus.com/reference/cstdlib/rand/ 使用实例: v1 = rand() % 100; // v1 in the range 0 ...

  5. 【sqli-labs】 less4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

    提交id参数 加' http://localhost/sqli/Less-4/?id=1' 页面正常,添加" http://localhost/sqli/Less-4/?id=1" ...

  6. 从输入url到页面展示出来经历了哪些过程

    本文只是一个整理向的随笔,以个人思路来简化的同时进行适当的拓展,如有错误,欢迎指正. 1.输入网址.  此时得到一个url 2.域名解析 整个过程都是dns系统在发挥作用,它的目的是将域名和ip对应起 ...

  7. 【Android】进程间通信IPC——AIDL

    AIDL官网定义AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似. 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口. 在 Androi ...

  8. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  9. vue-cli index.js dev 配置中 assetsPublicPath 的值不能填 "./" 的问题

    问题 使用nginx又代理了一层 在浏览器中 / 代表域名的根目录,./代表当前路径 线上发布的时候一般都会使用nginx反向代理,所以使用./是最靠谱的,但是vue-cli dev 中的 asset ...

  10. eas左树右表基础资料界面引用为左树右表F7的简单方法

    age:   /** * 加载配件F7(左树右表) * @param F7Filed           要加载的F7控件 * @param ctx               界面上下文 * @单据 ...