深度学习与自然语言处理Lecture-1笔记

最近开始学习斯坦福的课程“CS224d: Deep Learning for Nature Language Processing”,课程老师是PhD Richard Socher。这里是边看边做一些简单的记录,以供后续的查阅。

相关材料最开始是从网站“我爱自然语言处理”上得到的,课程材料的下载地址:http://cs224d.stanford.edu/syllabus.html。

NLP 简介

NLP:Nature Language Processing,自然语言处理,其目的是让机器理解自然语言。根据难易程度,可以分为以下几个方面:

  • Easy:拼写检查、关键词搜索、同义词查找
  • Medium:从网站、文档中解析各类信息
  • Hard:机器翻译、语义分析、共指分析(Coreference)、问答系统等

数据量和计算能力的快速增长,促使了深度学习(Deep Learning)的发展,并与NLP结合形成了deep NLP的研究课题。当前已经有很多相关的论文,而构成这种结合的基础是词语的向量化,即Word Vectors

词向量

为便于计算,需要将词语进行向量化表示。先来看最简单的one-hot vector,每个词是一个向量 wR|V|×1 ,向量中只有0和1存在, |V| 是词表的长度,这里的词表是排过序的,而1所在的位置即该词在词表中的位置。比如:

wa=100,wat=010,,wzebra=001,

但是这种表示不提供相似性的信息,如:
(whotel)Twmotel=(whotel)Twcat=0

所以,需要对这种表示进行降维,找到一中子空间可以建立词语之间的关系。

基于SVD的方法

遍历所有数据,统计其中出现词的词频,以此建立矩阵 X ,然后进行SVD分解,X=USVT,选择 U 作为每个词的向量。下面介绍两种矩阵X的构建方法。

词-文档矩阵

词-文档矩阵(Word-Document Matrix)构建的前提是:假设相关的词经常出现在同样的文档中。矩阵 XR|V|×M ,其中 M 是文档的个数,Xij表示第 i 个词在第j篇文档中出现的次数。这种表示比较直观,但是通常情况下矩阵的维度是非常大的。

词-词矩阵

词-词矩阵是我理解起名的,实际是基于窗口的共现矩阵(Window based Co-occurrence Matrix)。统计文档中所有出现的词,以两两词一同出现的次数建立关联矩阵(Affinity Matrix)。窗口的大小即两个词之间的距离,以下列数据为例,窗口设为1。

  • I enjoy flying
  • I like NLP
  • I like DL
    则关联矩阵为
    X=IIikeenjoyDLNLPflyingI021000like200110enjoy100001DL010000NLP010000flying001000

    这种方法同样有很多问题,如:
  • 矩阵的维度会经常变化,只要有新的词加入,矩阵就会变
  • 矩阵会非常稀疏,因为大部分词其实并不相关
  • 矩阵的维度通常也比较大
  • 训练的代价较大,即SVD运算量大
    ……
    下面是迭代的方法,可以解决部分这些问题。

基于迭代的方法

简单来说,就是每次用一部分数据训练,迭代的进行更新,实际上就是BP。

语言模型

语言模型包括一元模型(Unigrams)、二元模型(Bigrams)等,以下面的句子为例,语言模型需要为词语序列分配概率。
“The cat jumped over the puddle.”
一个好的语言模型应该为上面的句子分配一个很高的概率,因为这个句子是完整的,有意义的。而类似“stock boil fish is toy”这样没有实际意义的句子,则只能获得非常低的概率。用数学的方式可以表示为

P(w1,w2,,wn)

对于一元模型,假设每次词语出现的概率是相互独立的,则
P(w1,w2,,wn)=i=1nP(wi)

但实际上,我们都知道,某个词语的出现是与前面出现的词语有非常强的关联的。二元模型就建立在这种关联上,
P(w1,w2,,wn)=i=1nP(wi|wi1)

这个模型也是比较简单的,但是都可以帮助我们理解如何计算概率。下面分析一些例子来进一步理解概率的计算。

连续词袋模型(CBOW)

待续,待补充,欢迎讨论指正

你可能感兴趣的:(算法,深度学习,NLP,DL)