【Github 6481 颗星】牛津大学 & DeepMind 2017 深度
新智元报道
来源:Github、Oxford University
译者:张易、李静怡、刘小芹
新智元日前宣布,获6家顶级机构总额达数千万元的PreA轮融资,蓝驰创投领投,红杉资本中国基金、高瓴智成、蓝湖资本 、蓝象资本跟投。本轮融资将用于新智元团队规模扩充并增加新产品服务线,目标打造 To B 的人工智能全产业链服务平台。
新智元启动新一轮大招聘:COO、执行总编、主编、高级编译、主笔、运营总监、客户经理、咨询总监、行政助理等 9 大岗位全面开放。
简历投递: HR 微信:13552313024
新智元为COO和执行总编提供最高超百万的年薪激励;为骨干员工提供最完整的培训体系、高于业界平均水平的工资和奖金。加盟新智元,与人工智能业界领袖携手改变世界。
【新智元导读】牛津大学和 DeepMind 联合推出了《NLP深度学习课程》,专攻基于深度学习的自然语言处理,涉及递归神经网络、B-P、LSTM、注意力网络、记忆网络、神经图灵机等技术要点。新智元整理了这门课程及其亮点。无论你是否专攻自然语言处理,对深度学习感兴趣的人都能从中受益。
在2017年1月开始的这个学期,牛津大学联合 DeepMind 自然语言研究团队,推出了“NLP深度学习”这门课程(Deep Learning for Natural Language Processing)。课程共 8 周。内容涵盖语言理解、语音识别、语音合成、机器翻译、图像理解、语义结构等。
课程组织者、牛津大学计算机系副教授、DeepMind 研究员 Phil Blunsom 表示,这门课程呈现的是深度学习技术在 NLP 领域的应用情况,虽然在深度学习之外还有许多和语言学、计算语言学相关的内容以及许多有趣的范例,但这门课专注于深度学习自然语言处理。
Phil Blunsom 说:“人工智能是今天最有趣的研究领域之一,而语言则是智能最引人关注的表现形式。”
不消说,这门课从还没有开课起便吸引了大量的关注,不仅仅是由于“牛津”以及“DeepMind”的名号和质量保证,也是因为这门课将讲义、习题等很多内容都放在了 Github 上,不断更新,供大家讨论。
因此,今天新智元特意为大家介绍这门课程及其亮点内容。无论你是否专攻自然语言处理,对深度学习感兴趣的人都能从中受益。
根据牛津课程官网介绍,“深度NLP”是一门关于自然语言处理的高级课程。自动处理自然语言输入和产生语言输出是人工智能的关键组成部分。人类沟通中固有的模糊和噪声使传统的符号化 AI 技术无法有效地表征和分析语言数据。最近基于神经网络的统计技术已经在自然语言处理中取得了许多了不起的成就,在该领域吸引了大量商业和学术兴趣。
此外,这还是一门应用课程,重点是使用递归神经网络分析和生成语音和文本的最新进展。这门课会介绍相关机器学习模型的数学定义,并引出相关的优化算法。课程涵盖了NLP 中神经网络的一系列应用,包括分析文本的潜在维度,将语音转成文本,在语言之间进行翻译以及问答系统。这些题目将被纳入三个更高级别的主题,依次是理解神经网络在序列语言建模中的应用,理解它们作为条件语言模型在转换任务中的应用,以及把神经网络技术和高级应用中的其他机制相结合的方法,层层递进。对于这些模型在CPU和GPU硬件上如何实现的讨论也会贯穿整个课程。
通过这一课程的学习,学生将会:
理解一系列神经网络模型的定义
能够推导和实施这些模型的优化算法
理解注意力机制和序列嵌入模型的神经实现,以及如何组合这些模块化组件来构建最先进的NLP系统。
对语言数据的可扩展神经网络模型的实现中固有的硬件问题有所认识
能够执行和评价一般的神经网络
牛津深度 NLP 知识点提纲
本课程将会涵盖下列主题:
介绍/结论:为什么选择使用神经网络技术处理自然语言;本课程和NLP、计算语言学以及机器学习的关系;
简单的递归神经网络:模型定义;优化算法中的反向传播(B-P);小规模语言建模和文本嵌入
高级递归神经网络:LSTM和门循环单元(Gated Recurrent Units);大规模语言建模,开放词汇语言建模和词法学
批梯度下降(minibatching)和GPU实施问题;
语音识别:语音建模和端到端语音模型中的神经网络
Sequence to Sequence模型:从嵌入中生成;注意力机制;机器翻译;图像标题生成;
问答系统:问答任务及范例;用于问答系统的神经注意力机制和记忆网络;
高级记忆:神经图灵机,Stack以及其他架构;
语言模型:利用递归网络进行句法和语义分析
涉及技术
递归神经网络,B-P,LSTM,注意力网络,记忆网络,神经图灵机,机器翻译,问答系统,语音识别,句法和语义分析,神经网络的GPU优化
三大练习:实践深度学习的好机会
牛津深度 NLP 课程当中,最值得一看的就是课程附带的练习题(practice)。Hacker News 有评论称,只要你沉下心来,认真把这些题目做完,你定能受益匪浅。
练习1:word2vec
word2vec 这个练习当会提供你 IPython notebook(有地方需要你自己填写),还有一个在线的 Python 计算环境,你可以在这里混合文本、代码并进行脚本交互。
练习的内容是使用 TED 演讲和英文维基百科数据训练 word2vec 模型,这会涉及 word2vec 部署中的 Python 包 gensim。训练完模型以后,对模型学到的嵌入(embedding)进行分析和可视化。
下面简单介绍一下整个练习的过程。
前期准备:完成设置与安装(详见 Github),然后对数据进行预处理。在这个练习当中,下载和预处理数据集的代码都是提前写好了的。不过,在以后的练习中,遇到原始数据,还是需要你自己写代码。完成这项工作一般是用 nltk 库,但这个练习是用的 Python re 模型使用常规表达。最后是做一个列表,将最常见的词语以及它们的使用频率列出来。
接下来就是训练 word2vec 模型了。首先阅读 word2vec 的 gensim 文档,了解如何使用 Word2Vec 类。使用 CBOW(默认值)了解 $mathbbR^{100}$ 中的嵌入。其他选项应为默认值,但是 min_count=10,这样便于忽略不常出现的单词。整个训练过程应该不会超过半分钟。
最后,将训练好的模型与使用 WikiText-2 数据训练的向量做比较。课程提供了 WikiText-2 数据集的下载/预处理代码(类似于上面的代码)。该代码使用数据的随机子采样,因此大小与 TED Talk 数据相当。
使用这个新的数据集,重复上面的分析。
练习2:文本分类
TED代表“技术、娱乐和设计”。TED Talk 语料库中的每个谈话都带有开放的标签,包括“技术”、“娱乐”和“设计”。虽然有些演讲涉及的内容不止一个标签,但由大约一半的演讲都没有被标记!
这个练习的目的就是构建一个文本分类模型,预测一个 TED 演讲是有关技术、娱乐或设计中的哪一个,或者哪个都不是。
这就是所谓的“多标签分类”(MLC)的实例,其中每个实例可以有许多不同的标签。 不过,这门课将其转换为一个多类分类的实例,其中每个文档从一个有限的离散的可能标签集合中,接收单个的标签。
还是设置和安装,这个练习推荐的深度学习框架是 PyTorch 和 TensorFlow。其次是 CNTK、Torch 和 Caffe。
接下来就是多类型分类了。在数据处理环节,你需要保留 TED Talk 数据集前 1585 个文档用于训练,接下来 250 个用于验证,最后 250 个用于测试。每个文档将被表示为一对(文本,标签)。
使用训练数据,确定你想要用什么词汇描述模型。对文本进行标记(tokenise)和小写(lowercase)是不错的做法。
测试时,你会遇到训练集中没有的单词(这些单词也不会有嵌入)。要处理这一点,将这些词映射到一个特殊的 token。最好还确保你的训练数据集也含有 token。
接下来一些具体的内容,比如标签、模型以及嵌入函数,这里就暂不介绍了。下面讲一些比较有趣的问题。
要完成这个练习,你需要在你最喜欢的框架中构建一个单层的前馈神经网络。这个网络应将标签视为 8 个独立类。
比较从随机嵌入开始的模型的学习曲线,从 GloVe 嵌入开始或固定为 GloVe 值。批量培训更稳定(例如 50),这种模式在培训和测试上效果最好?哪种型号在保持精度方面效果最好?
如果你尝试替代非线性(逻辑 sigmoid 或ReLU 而不是 tanh)会发生什么?
如果添加 dropout 到网络里会发生什么?
如果改变隐藏层的大小会发生什么?
如果要添加第二个隐藏层,代码如何改变?
训练算法如何影响模型的质量?
将标签的嵌入项投影到 2 个维度上并可视化(投影矩阵 V 的每一行对应于标签嵌入)会看到什么有趣的结果?
练习3:用 RNN 实现文本分类
在这个实践,你可以选择探索 RNN 的两个应用之一:文本分类或语言建模(欢迎两个都尝试)。 我们将使用我们在实践2中创建的 training/dev/test 进行分解。
文本分类(任务1)
上周的实践中,我们介绍了文本分类是一个可以通过深度学习解决的问题。我们使用的文档表示函数非常简单:是文档中词嵌入的平均值。本周,你将使用 RNN 来计算文档表示
下图左边表示上周实际使用的文档表示函数。这个任务的目标是令你的代码使用右边的架构。
需要注意的是,在实践3中,x 被定义为 RNN 隐藏状态(h_t)的平均值。
问题:
1、基于 RNN 的表示相比上周使用的词袋(bag of words)表示的好处和缺点是什么? 数据的可用性如何影响结果?
2、一种可能的架构变体是仅使用RNN的最终隐藏状态作为文档表示(即,x),而不是随时间变化的隐藏状态的平均值。它怎么工作?这种表示的潜在好处和缺点是什么?
3、尝试不同的 RNN 架构,例如简单的 Elman RNN 或 GRU 或 LSTM。哪些最适合?
4、如果使用双向 LSTM(即图中的虚线箭头)会得到什么结果?
用 RNN 做语言建模(任务2)
如上周讲座所述,RNN 语言模型使用链规则将序列的概率分解成词的概率的乘积,条件是先前生成的词:
为了避免浮点下溢的问题,我们通常在日志空间中对其进行建模。
给定一个语言模型的训练序列训练图如下:
你的任务是用 TED 数据的训练集训练 RNN 语言模型,然后使用验证集确定何时停止优化模型参数。
语言模型可以通过计算模型在测试语料库上 (per-word) 的困惑度(perplexity )来定量评估:
为了定性评估模型,通过从p(w_t | w_ { 问题: 1、如果改变语料库的预处理(例如,把更多的单词变成 UNK,或把所有字母变小写),困惑度仍然可以比较吗? 2、为了使训练易于处理,你可以将句子作为 i.i.d.,或者可以使用截平的 BPTT。i.i.d. 的假设有效吗?它们的好处和缺点分别是什么?你认为在测试集上的困惑度会是怎样? 3、不将文档建模为词序列,而是将文档建模为字符序列。每个词的困惑度在这两个模型之间是否可比?在字符级别建模文本有什么好处?有什么缺点? 4、尝试使用 RNN 的不同定义的变体模型(如LSTM,GRU,简单 Elman RNN),困惑度如何? 5、在文本分类中,建议使用双向 RNN。使用双向RNN进行语言建模任务可行吗?为什么? 课程安排 Week 1 1. 课程介绍 1a,Phil Blunsom(课程组织者、牛津大学计算机系副教授、DeepMind研究员) 课程概要,特别介绍了使用深度学习技术进行语言处理的有趣之处 1b,Wang Ling (DeepMind研究员) 本节课介绍了机器学习的基本概念。 2. 词法语义学 Ed Grefenstette( DeepMind研究员) 词语是语言的核心单位。表征和学习词的意义是NLP的一个基本任务。本课讨论了词嵌入的概念,并将其作为一个实用和可扩展的解决方案。 Week 2 No lectures Week 3 3,RNN和语言建模 Phil Blunsom 语言建模是在许多NLP应用的重要任务。本讲介绍了语言建模,包括传统的基于n-gram的方法和更现代的神经方法。特别介绍了流行的递归神经网络(RNN)语言模型和其基本的训练及评估算法。 4,RNN和语言建模 Phil Blunsom 本讲继续上一节的内容,讨论了实施RNN语言模型中的一些问题。 描述了消失(vanishing)和爆炸梯度(exploding gradient)问题,并讨论了诸如LSTM这样的架构解决方案。 Week 4 5. 文本分类 Karl Moritz Hermann (DeepMind研究员) 本讲讨论文本分类,从诸如朴素贝叶斯这样的基本分类器开始,讲到RNN和卷积网络。 6. RNNs and GPUs Jeremy Appleyard (英伟达研究员) 本讲介绍了执行深度学习算法中CPU的替代方案——图形处理单元(GPU) ,讨论了GPU的优缺点以及内存带宽和计算是如何影响RNN的。 Week 5 7&8. Sequence Transduction Chris Dyer (CMU副教授、DeepMind研究员) 7. 序列转换 Chris Dyer (CMU副教授、DeepMind研究员) 本讲中,我们扩展了语言建模的概念。通过在表征输入上调节RNN语言模型,我们可以生成上下文相关语言。这个非常通用的想法可以应用于序列转换任务,例如翻译和总结,或将图像转换为描述其内容的说明性文字。 8. 序列转换 Chris Dyer (CMU副教授、DeepMind研究员) 本讲介绍了深度神经网络中最重要和最有影响力的机制之一:注意力机制。 注意力使得递归网络增加了对输入的特定部分进行调节的能力,这是在诸如机器翻译和图像说明任务中实现高性能的关键。 Week 6 9. Speech Andrew Senior (DeepMind研究员) 自动语音识别(ASR)是将语言的原始音频信号转换成文本的任务。 本讲涵盖了ASR模型的历史,从高斯混合,到经过注意力强化的RNN,到基本的语音学,以及经常使用的各种输入和输出的表示。 10. Speech Andrew Senior (DeepMind研究员) 本讲介绍将书面语言转换为口语的算法(文本到语音)。TTS是与ASR相反的过程,但是在应用的模型中存在一些重要区别。我们回顾了传统的TTS模型,然后引出更多的近期使用的神经方法,如DeepMind的WaveNet模型。 Week 7 11. 问答系统Karl Moritz Hermann 12. 记忆 Ed Grefenstette Week 8 13. 语言结构 Chris Dyer 14. 结论 Phil Blunsom 学术背景要求 最后说明一下参与的学术背景。当然,这些也不是绝对的。因为,你在什么情况下,都能一边实践一边学习。 数学线性代数 微积分 概率 机器学习机器学习模型评测(训练/验证/测试分裂,交叉验证等) 过度拟合、泛化、正则化 优化(目标函数随机梯度下降) 线性回归及分类、神经网络(常规非线性、反向传播等) 编程掌握或有能力迅速掌握神经网络学习框架相关知识(如Torch、TensorFlow、Theano、DyNet) 还等什么,访问 Github: