Deeplearning for NLP (简介)

开篇

过目就忘说的可能就是在下了,所以现在所有的学习内容我都会写成博客,不成博客的就是过目就忘啦。这是系列不算挖坑,前面写了几篇Tensorflow的文章,词向量这篇一直处于难产中,拖延症比较严重。争取这两天能够写出来。下面开始我们的正题,这篇博客的内容主要来源于17年牛津大学的NLP课程,这边放出课程oxford-cs-deepnlp的github地址和网易云课堂课程的视频链接,夸一下网易,很有担当的课程,算是给了我们这些听力一般的学生一条求学之路,虽然它拒了我加入申请。
下面开始我们的正题,简单说一下这门课程的主要内容,课程是以各种NLP任务为主要单元来呈现的,而我这篇博客主要来源于第二周的课程,希望能够大家一个轮廓,知道DeepLearning可以做哪些NLP任务,这些任务我后续都会TensorFlow去实现,这里不给自己挖坑了,不定期更新。本课程基本涵盖了大部分的热门NLP任务,对初入NLP领域的人有一个很好的引导作用,但是理论可能就不会太过深究,毕竟一节课也就两个小时,要把一个子领域的任务讲清楚已近相当难得了。我可能不太会去使用课程中的数据集去完成相应的任务,但是任务内容肯定是一致的。

Deeplearning for NLP

这部分主要过一下课程里面的基本任务,细节不多提。首先是词的表示,这是NLP所有任务的基础,这边贴出课程ppt上的内容,看看我们在实践中会遇到哪些问题,这些以后都会一一给出解决方案。

这边稍微提一下什么是oov,全称叫做out of vocabulary,就是字面上的意思,超出词典的单词,为什么会出现这样的情况呢,看过我之前博客的同学,会发现,我们在生成词典的时候是会考虑词频高的单词的,这样的话有些词频低的词我们就不会放入词典里面,这样做的原因是我们的计算资源确实有限,不可能覆盖到全部的单词,但是这样确实会给很多NLP任务带来很多的问题,举一个简单的例子,比如我们要做文本生成的任务,语料中有很多的人名,但是他们出现的频率很一般,我们没有考虑把他们放到词典里面,这样我们生成文本的时候去词典里面去搜索单词的时候就不会有,那样我们生成的文本就不会这些人名(文本的生成是依赖相应的词典构建的,后面我们会多次提到相应的问题)。
回到词的表示,现在最流行的就是使用下上文的一些语义来表示我们的词向量,也就是我们熟知的Word2vec。不多提,会有博客专门讲它的实现。

这边列出了常见的任务,包括文本分类,文本生成,相信你看完上图的分类会很清楚他们各自都是干什么的。

更加高级的就是文本理解,不幸我做的基本任务就是文本理解里面的,为自己默哀三分钟。

数据集

课程中的数据集,这里不多讲,大家看ppt里面的简介就知道了,很清楚

一个数据集就足以诠释课程中全部的任务

深度学习框架

这边就讲一下静态计算图和动态计算图的区别。

依据采用动态计算或是静态计算的不同,可以将这些众多的深度学习框架划分成两大阵营,当然也有些框架同时具有动态计算和静态计算两种机制(比如 MxNet 和最新的 TensorFlow)。动态计算意味着程序将按照我们编写命令的顺序进行执行。这种机制将使得调试更加容易,并且也使得我们将大脑中的想法转化为实际代码变得更加容易。而静态计算则意味着程序在编译执行时将先生成神经网络的结构,然后再执行相应操作。从理论上讲,静态计算这样的机制允许编译器进行更大程度的优化,但是这也意味着你所期望的程序与编译器实际执行之间存在着更多的代沟。这也意味着,代码中的错误将更加难以发现(比如,如果计算图的结构出现问题,你可能只有在代码执行到相应操作的时候才能发现它)。尽管理论上而言,静态计算图比动态计算图具有更好的性能,但是在实践中我们经常发现并不是这样的。

老实说动态计算图bug会更加容易调,比较适合nlp,同时代码也更加容易理解,但是无奈的是,我已经入坑tf,大家有机会还是去学习一下pytorch。

ps:学习是带有仪式感的活动,大家加油。

猜你喜欢

转载自blog.csdn.net/ding_xiaofei/article/details/80252262