自然语言处理与深度学习研讨会

上周末(2016/04/23)在所里(CASIA)听了一场研讨会报告,现在整理一下。原本以为这场研讨会报告只是几个青年学者(自动化所的张家俊老师,北大的万小军老师以及出门问问的技术经理李理)分享最近的工作。到了会场发现有很多圈内大佬都莅临指导,包括:自动化所的徐波所长,王飞跃老师,宗成庆老师,赵军老师,刘康老师;微软亚研的首席研究员周明,清华大学刘洋老师,北理工计算机学院院长黄河燕老师,中科院软件所孙乐老师,苏州大学张民老师,哈工大赵铁军老师,东北大学朱靖波老师等等。 首先是三位嘉宾做近期相关工作汇报。 一:张家俊老师汇报的题目为 神经网络机器翻译:寻找替身之旅 针对的问题是神经机器翻译(NMT)模型中集外词的问题。手段为寻找其集内词替身。 集外词问题在一些NLP词性标准等任务中,搜索空间是可猜测的,而在机器翻译(MT)任务中,搜索空间不可猜测。 MT需要双语翻译语料,传统统计翻译方法是 1. 先翻译词,2. 再结构化重组。而集外词问题会导致如下问题 1. 词无法获得准确的译文,2. 不精确语义编码影响了句子重组结构。 NMT进一步加重了集外词问题,1. 低频词的语义编码不准确,2. 解码空间V很大时,计算效率很低。因而需要限制源语言和目标语言的词规模。 如“悍然对南联盟实施轰炸”,其中“悍然”与“南联盟”为低频词,分别将其替换为高频词“突然”和“伊拉克”。 那么替换之旅的流程变为:1. 替换;2. 翻译;3. 恢复;(4. 保留UNK) 而针对具体情况,分别考虑了1. UNK -> UNK. 2. 集内 -> UNK. 3. UNK -> 集内. 4. NULL -> UNK. 5. UNK … 继续阅读

漫谈四种神经网络序列解码模型【附示例代码】

以下为漫谈,即瞎聊,利用通俗的语言来谈谈神经网络模型中4种序列解码模型,主要是从整体概念和思路上进行通俗解释帮助理解。预警,以下可能为了偷懒就不贴公式了,一些细节也被略过了,感兴趣的可以直接去阅读原文[1][2][3]。 [1] Sequence to Sequence Learning with Neural Networks [2] Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation [3] Neural Machine Translation by Jointly Learning to Align and Translate 利用神经网络进行序列编码的模型主要为RNN,目前比较火的一些变种模型有LSTM和GRU,只是cell单元不同而已。以下统统用RNN来代表。 编码模型比较简单,如下图所示,输入文本{X1-X6}经过循环迭代编码,在每个时刻得到当前时刻的一个隐层状态,最后序列结束后进行特征融合得到句子的表示。注意,一种比较常用的方式是将编码模型最后一个时刻的隐层状态做为整个序列的编码表示,但是实际应用中这种效果并不太好,因而我们的图例中直接采用了整个序列隐层编码进行求和平均的方式得到序列的编码向量。 早期的一些任务主要是做一些主题分类、情感检测等等分类任务,那么在编码向量上面添加一个softmax就可以解决问题。但是对于机器翻译和语音识别等问题则需要进行序列化解码。 注意到,编码时RNN每个时刻除了自己上一时刻的隐层状态编码外,还有当前时刻的输入字符,而解码时则没有这种输入。那么,一种比较直接的方式是把编码端得到的编码向量做为解码模型的每时刻输入特征。如下图所示: 简单直观而且解码模型和编码模型并没有任何区别,然而学者感觉该模型并不优雅,那么接下来我们就来介绍一些精巧点的吧。 =============此处开始转入瞎聊模式============== 我们用考试作弊来做为一个通俗的例子来解释一下模型。 首先我们假设输入文本是所学课本,编码端则是对课本的理解所整理的课堂笔记。解码端的隐层神经网络则是我们的大脑,而每一时刻的输出则是考试时要写在卷子上的答案。在上面最简单的解码模型中,可以考虑成是考试时一边写答案一边翻看课堂笔记。如果这是一般作弊学生的做法,学霸则不需要翻书,他们有一个强大的大脑神经网络,可以记住自己的课堂笔记。解码时只需要回顾一下自己前面写过什么,然后依次认真的把答案写在答卷上,就是下面这种模型了[1]: 还有很多学弱,他们不只需要作弊,而且翻看笔记的时候还需要回顾自己上一时刻写在答卷上的答案(学弱嘛,简直弱到连自己上一时刻写在答卷上的文字都记不住了),就是下面的答题模式了[2]: … 继续阅读

DeepLearning常用库简要介绍与对比

网上近日流传一张DL相关库在Github上的受关注度对比(数据应该是2016/03/15左右统计的): 其中tensorflow,caffe,keras和Theano排名比较靠前。 今日组会报告上tj师弟从个人使用经验上做了简单介绍与对比,分享给大家。 ===================华丽的分隔线==================== 师弟的原文出处:http://tianjun.me/essays/102/ 本文将从deep learning 相关工具库的使用者角度来介绍下github上stars数排在前面的几个库(tensorflow, keras, torch, theano, skflow, lasagne, blocks)。由于我的主要研究内容为文本相关的工作,所以各个库的分析带有一定主观因素,以RNN模型为主,CNN相关的内容了解得不是特别深入(本文没有比较caffe和mxnet,其实主要原因还是自己C++太久没用了……)。 阅读本文你会了解: 1. 各个库是如何对神经网络中的结构和计算单元进行抽象的; 2. 如何用每个库跑RNN相关的模型; 3. 各个库学习和使用的难以程度对比; 4. 在各个库基础之上进一步改进和开发的难易程度. 本文不会涉及: 1. 各个库运行时间效率的对比(我没有自己做过相关的对比实验,但是网上有很多数据可以查); 2. CNN相关模型的构建(前面提到了自己最近对这块了解得不多); 3. RNN相关模型的原理和解释(网上很多资料,可以先学习后再进一步阅读). 先说说这几个库之间的大致关系 对于一个优秀的深度学习系统,或者更广来说优秀的科学计算系统,最重要的是编程接口的设计。他们都采用将一个领域特定语言(domain specific language)嵌入到一个主语言中。例如numpy将矩阵运算嵌入到python中。这类嵌入一般分为两种,其中一种嵌入的较浅,其中每个语句都按原来的意思执行,且通常采用命令式编程(imperative programming),其中numpy和Torch就是属于这种。而另一种则用一种深的嵌入方式,提供一整套针对具体应用的迷你语言。这一种通常使用声明式语言(declarative programing),既用户只需要声明要做什么,而具体执行则由系统完成。这类系统包括Caffe,theano和刚公布的TensorFlow。 以上是摘自MXNet设计和实现中的一段话。理解了这段话后,对后面各个库的进一步理解很有帮助。MXNet的设计者表示融合了这两种编程模式,我们先抛开mxnet,如上所述torch是采用命令式编程,然后theano和tensorflow是采用声明式编程,skflow对常用的tensorflow的封装,lasagne是对theano的封装,blocks除了对theano进行封装之外还提供了额外的处理机制,keras则是用一套接口同时封装了theano和tensorflow,如下图所示。 从theano说起 前面说theano是声明式语言,其基本过程可以描述为以下几步: 1. … 继续阅读

基于Theano的DNN框架Blocks使用简要总结

Blocks官方代码地址:https://github.com/mila-udem/blocks Blocks是加拿大Montreal大学Bengio实验室牵头开发的基于Python的神经网络模型框架,可方便地在大规模数据上进行复杂神经网络模型的训练。它包含有很多外置工具包如,logging, monitoring, visualization, and serialization,而Fuel则提供了数据格式的标准化。 Fuel官方代码地址:https://github.com/mila-udem/fuel 由于Blocks仍在进一步开发中,以下说明中遇到的错误可能已被修复,因而只可作为参考[注:当前时间2016/03/01]。 1. 安装Blocks和Fuel: 安装git,git的安装和使用可参考[Bitbucket-团队开发私有库使用指南, http://jacoxu.com/?p=1611] 接下来安装blocks,由于需要通过github下载,进入git bash,输入: pip install git+git://github.com/mila-udem/blocks.git \ -r https://raw.githubusercontent.com/mila-udem/blocks/master/requirements.txt 注:a). 实际运行中,可修改一下requirements.txt文件中所定义的库,如numpy等在安装ANACOND的时候都已经安装,那么可以删除掉requirements.txt文件中对应依赖行。 b). 若执行过程中有错误可能会导致blocks没有正常安装,则需要重新执行一下 pip install git+git://github.com/mila-udem/blocks.git 若安装成功则在c:\anaconda2\lib\site-packages 目录下可以看到和blocks及fuel相关的4个文件夹,并且在在python模式下执行如下两行命令,不报错即可: from blocks.bricks import Tanh from fuel.datasets import MNIST 说明Blocks和Fuel已经可以正常调用。 2. 利用Fuel下载数据集 … 继续阅读

神经记忆网络、神经机器翻译和神经图灵机的初步探讨

近期看过神经记忆网络、神经机器翻译和神经图灵机三篇工作之后在基于对话历史的信息抽取工作上进行了初步对比尝试,根据自己的理解进行了模型对比。欢迎大家一起讨论。 首先三篇工作的文献分别出自: [1] 神经记忆网络:2015 NIPS, End-To-End Memory Networks (Facebook AI) [2] 神经机器翻译:2015 ICLR, Neural Machine Translation by Jointly Learning to Align and Translate [3] 神经图灵机:2014 ArXiv, Neural Turing Machines (Google DeepMind) 其中神经记忆网络和神经机器翻译的模型框图如下: 实验数据:1000轮垂直领域完整对话历史的信息抽取问题 – 神经记忆网络数据格式: 1 小姐 您 怎么 称呼 … 继续阅读

思考一下Memory的形式

【声明】:如下观点均是个人鄙见,尽可能地引出论文出处,有待同大家一起讨论商榷。 【一】. 2015-ICLR-《Neural Machine Translation by Jointly Learning to Align and Translate》 【二】. 2015-ACL-《Neural Responding Machine for Short-Text Conversation》 【三】. 2015-ICLR-《Memory Networks》 序,统一概念: 句子中的词向量化表示 和 段落中的句子向量化表示 意思逻辑一致。【1,2】两篇文章均是在句子层面的,因而采用句子/词 的表示方法,而在【3】QA系统应用中 对应为 段落/句子。 论文【一】观点: 应用领域:机器翻译系统。 1.1    输入端所有输入文本信息都压缩到固定长度的向量的方法是错误的; 原因:句子较长时,即输入信息较多时,解码能力变差,即模型解析能力变弱。(摘自【原文P1第三段】A potential issue with this encoder–decoder … 继续阅读

RAM与QA相关文章资源列表

RAM并非Random-Access Memory,而是DL领域时下热门的Reasoning, Attention, Memory。NIPS2015将于12月5日组织一个RAM (Reasoning, Attention, Memory) workshop,组织方则是Facebook AI Research的Jason Weston (Memory Networks作者) ,Reference列表中的文章都挺不错,近日查阅了几篇QA相关的文章及资源整理如下。整理粗糙,望谅解。文章列表从近日最新的工作往前开始追溯: (如下文章中引用率出自Google scholar-2015/11/02) [1]. 《Empirical Study on Deep Learning Models for QA》 时间:2015/10/26,单位:US IBM Watson,作者:Yang Yu 数据集:Facebook’s bAbI (问答系统) 动机:深入探究Memory组件和Attention机制在解决QA问题中的应用。虽然之前的文章中有提及很相关的工作神经图灵机(NTM,Neural Turing Machine)和神经机器翻译(NMT,Neural Machine Translation)模型,且很多工作已经采用机器翻译模型解决QA任务,但并没有论文采用NMT和NTM解决QA问题。因而本文在Facebook的人工构造QA数据集上融合并对比了当下热门三种DL方法:Neural Machine Translation,Neural Turing … 继续阅读

查找多个词典中的公共词典

【场景】:现在有4个词典: 1. wordmap.txt:训练语料的词典(由LDA-工具生成,这倒是一个很偷懒的方法); 2. CWembeddings-scaled.EMBEDDING_SIZE=50.txt,由Turian-ACL2010提供的50维词向量; 3. HLBL-embeddings-scaled.EMBEDDING_SIZE=50.,由Turian-ACL2010提供的50维词向量; 4. Senna-embeddings-words.lst,由Senna系统提供的50维词向量; 【需求】: 1. comWord.dic 要找出其中的公共词,生成词典; 2. 按照词典顺序输出对应的3个词向量保存到各自的文件中;Senna_embeddings.vec CW_embeddings.vec HLBL_embeddings.vec 3. 希望把有词向量的放到前面,没有词向量的放到后面。训练数据中的所有词都做保留。 【代码如下】: import java.io.BufferedReader;    import java.io.BufferedWriter;    import java.io.File;    import java.io.FileInputStream;    import java.io.FileOutputStream;    import java.io.IOException;    import java.io.InputStreamReader;    import java.io.OutputStreamWriter;    import java.util.ArrayList;    import java.util.HashMap;    … 继续阅读

[zz]个人阅读的Deep Learning方向的paper整理

一 RNN 1 Recurrent neural network based language model RNN用在语言模型上的开山之作 2 Statistical Language Models Based on Neural Networks Mikolov的博士论文,主要将他在RNN用在语言模型上的工作进行串联 3 Extensions of Recurrent Neural Network Language Model 开山之作的延续,RNN网络的一些改进,如通过类别信息去降低模型的参数 4 A guide to recurrent neural networks and backpropagation RNN网络的介绍以及优化算法,是了解RNN网络的好文章 5 Training … 继续阅读