跟清华大学马少平教授学AI:第一篇 神经网络是如何实现的(七)
点击上方“图灵人工智能”,选择“星标”公众号
您想知道的人工智能干货,第一时间送达
第一篇 神经网络是如何实现的(七)
清华大学计算机系 马少平
第七节:词向量
小明:艾博士,您讲解的这些内容基本是处理图像的,神经网络只能处理图像信息吗?能不能处理文本信息呢?
艾博士回答说:小明,神经网络不仅仅可以处理图像,同样也可以处理文本。由于处理图像讲起来比较形象,更容易理解,所以我们基本是以图像处理为例讲解的。
小明:那么如何处理文本呢?
艾博士:图像处理之所以讲起来比较形象,是因为图像的基本元素是像素,而像素是由数字表示的,可以直接处理。而文本的基本元素是词,要处理文本的话,首先要解决词的表示问题。
小明:是啊,可是词如何表示呢?
艾博士:最简单的表示方法称作“独热”(one-hot)编码。我们举例说明独热编码方法。假设有一句话:我在清华大学读书,生活在美丽的清华园中。我们以这句话中出现的词组成一个共有8个词的词表:
{我,在,清华大学,读书,生活,美丽的,清华园,中}
独热编码方法就是用一个与词表等长的向量表示一个词,该向量只有一个位置为1,其他位置均为0。具体哪个位置为1呢?就看单词在词表中处于第几位,如果处于第n位,那么在向量的第n个位置就为1。这也是“独热编码”一词的来源。
比如“清华大学”一词处于词表的第3个位置,则该词就可以表示为:
“清华大学”=[0,0,1,0,0,0,0,0]
同样的,“清华园”、“美丽的”分别可以表示为:
“清华园”=[0,0,0,0,0,0,1,0]
“美丽的”=[0,0,0,0,0,1,0,0]
这种表示的优点是比较简单,事先做好一个词表,词表确定后词的表示就确定了。但有很多不足。比如:如果处理真实文本,常用词至少需要10万个,每个词都需要表示为一个长度为10万的向量。也无法通过计算的办法获得两个词的相似性。比如在自然语言处理中,常常用欧氏距离衡量两个词的相似性或者是否近义词,欧氏距离越小,就说明两个词越相似。但是对于独热编码来说,任何词都只有一个位置为1,且只要是非同一个词,则1的位置一定是不一样的,所以任何两个词的欧氏距离都是 ,比如“清华大学”与“清华园”的欧氏距离为:
“美丽的”与“清华园”的欧氏距离为:
从语义的角度来说,理应“清华大学”与“清华园”的距离应该小于“美丽的”与“清华园”的距离才比较合理。
小明问:那么有没有更好的表示方法呢?
艾博士:为了解决独热编码存在的不足,研究者提出了“稠密”向量表示方法,还是用向量表示一个词,但是不再是一个向量只有一位为1,其余为0了,而是向量的每一位都有具体的数值,这些数值“联合起来”表示一个词。由于“动用”了向量的每一位表示一个词,所以向量长度也没有必要和词表一样长,一般长度只需要几百位就可以了。而且还可以利用向量间的距离求解两个词的语义相似性。
小明:听起来挺神奇的,那么如何获得一个词的表示呢?
艾博士:这种稠密表示方法一般是通过训练得到的,为此我们先从神经网络语言模型开始讲起。
小明:什么是神经网络语言模型呢?
艾博士:简单地说,当给定了一句话的前n-1个词后,预测第n个词是什么词的概率,这样的一个预测模型称为语言模型。比如给定了前4个词是“清华大学”、“计算机”、“科学”、“与”,那么第5个词可能是什么词呢?第5个词是“技术”的可能性比较大,因为这句话很可能是说“清华大学计算机科学与技术”。第5个词是“工程”的可能性也不小,因为“清华大学计算机科学与工程”也比较通顺。但是如果是“清华大学计算机科学与白菜”,虽然从语法层面这句话也没有啥问题,但是很少出现将“计算机科学”和“白菜”并列的情况,所以第5个词是“白菜”的概率就非常小了。语言模型就是用来评价一句话是否像“人话”,如果像“人话”则概率大,否则就概率小,甚至为0。如果语言模型是用神经网络实现的,则称为神经网络语言模型。
小明:这里说的前n-1个词一定是从一句话的开始计算吗?
艾博士:不一定,从一句话的任意一个位置开始都是可以的,总之当前词前面的n-1个词就可以,而不管当前词具体在哪个位置。如果前面不足n-1个词,则有几个算几个。比如当前词在第t个位置,则其前面n-1个词为 ,这n-1个词称作 的“上下文”,用 表示,其中 表示词,n被称作窗口的大小,表示只考虑窗口内的n个词。
图1.41给出了一个最常见的用全连接神经网络实现的神经网络语言模型示意图。在这个图中,我们简化了其中的各种连接,下面我们解释一下这个模型。
图1.41所示的语言模型就是一个全连接神经网络,与普通的全连接网络不同的是,输入层分成了(n-1)组,每组m个输入,共(n-1)m个输入。每组输入共m个数值组成一个向量,对应 的上下文的一个词,该向量用 表示。所有的 拼接在一起组成一个长度为(n-1)m的向量,用 表示。如果不考虑分组的话,与普通全连接神经网络的输入层是一样的,也就是x是输入。
小明不解地问到:为什么要对输入分组呢?
艾博士回答说:每一组输入组成的向量对应当前上下文的一个词,当上下文发生变化时,要通过查表的办法将组成上下文的词对应的向量取出来,放到神经网络输入层的相应位置。为此在构建神经网络语言模型时,首先要确定一个词表,这个词表通常很大,要包含所有可能出现的词,通常有几十万个词。每个词对应一个长度为m的向量,并在词和向量之间建立某种联系,以便需要时可以方便地取出来。
图1.41 神经网络语言模型示意图
小明问:这个长度为m的向量如何得到呢?
艾博士:小明,先不要着急,现在只需知道一个词对应一个向量就可以了,后面我们再说如何得到这个向量。
小明:好的,我就暂时先认为已经得到了这些向量。
艾博士:我们接下来看图1.41的隐含层,这一层没啥特殊性,就是普通的隐含层,共H个神经元,每个神经元都与输入层的神经元有连接,权重为 ,表示输入层第j个输入到隐含层第h个神经元的连接权重。隐含层的每个神经元连接一个双曲正切激活函数(tanh)作为该神经元的输出。隐含层所有神经元的输出组成向量 ,第h个神经元的输出用公式表示如下:
其中 为第h个神经元的偏置。
输出层神经元的个数与词表的大小一致,一个神经元对应一个词,神经元连接softmax激活函数得到输出结果,每个神经元的输出值表示在当前上下文下, 为该神经元对应的词时的概率。例如:假定输出层的第3个神经元对应“技术”一词,第5个神经元对应“工程”一词,当上下文为“清华大学 计算机 科学 与”时,则输出层第3个神经元的输出值就表示“清华大学 计算机 科学 与”之后连接“技术”一词的概率,而第5个神经元的输出值表示“清华大学 计算机 科学 与”之后连接“工程”一词的概率。
从隐含层到输出层也是全连接,每个输出层的神经元都与隐含层的神经元有连接,权重为 ,表示隐含层第h个神经元到输出层第k个神经元的连接权重。为了在输出层得到一个概率输出,最后加一个softmax激活函数。假设输出层所有神经元在连接激活函数前的输出组成向量 ,其中K为词表长度,则第k个神经元的输出用公式表示如下:
其中 为输出层第k个神经元的偏置。
加上softmax激活函数后,输出层第k个神经元的输出为:
表示的是输出层第k个神经元所对应的单词w出现在当前上下文后面的概率。
小明问:那么如何确定输出层哪个神经元对应哪个词呢?
艾博士:这个是人为事先规定好的,哪个神经元对应哪个词并不重要,只要事先规定好一个神经元对应唯一的词就可以了。
小明:那么这个神经网络语言模型如何训练呢?
艾博士:为了训练这个模型,需要有训练样本,对于语言模型来说,样本就是一个含有n个词的词串,前n-1个词就是上下文,第n个词相当于标记。我们可以收集大量的文本构成训练语料库,库中任意一个长度为n的连续词串就构成了训练样本。比如语料库中有语句“清华 大学 计算机 科学 与 技术 系”,假定窗口大小为5,则“清华 大学 计算机 科学 与”、“大学 计算机 科学 与 技术”、“计算机 科学 与 技术 系”都是训练样本。
有了训练样本后,还需要定义一个损失函数。我们先看一个例子。假定语料库就三句话:“计算机 科学”、“计算机 科学”,“计算机 工程”,窗口大小为2,我们希望通过该语料库估计出两个概率值:p(科学|计算机)和p(工程|计算机),分别表示当前一个词为“计算机”时,后一个词为“科学”的概率和后一个词为“工程”的概率。这两个概率分别取多少才是合理的呢?语料库中的三句话可以看成是3个样本,我们假定这3个样本的出现是独立的,所以他们的联合概率可以用各自出现概率的乘积表示,即:
由于这个例子中“计算机”后面出现的词只有“科学”和“工程”两种可能,所以在“计算机”后面出现“科学”或者“工程”的概率和应该等于1,即:
所以有:
对于不同的概率取值,p(“计算机 科学”,“计算机 科学”,“计算机 工程”)的值是不同的,比如当p(科学│计算机)=0.5时:
而当p(科学│计算机)=0.6时:
小明不解地问到:那么概率取多大才应该是合理的呢?
艾博士解释说:目前我们只有语料库提供的三句话,所以只能以这三句话为依据进行估计,既然这三个样本同时出现了,那么我们就应该接受这个事实,让他们的联合概率最大,所以估计概率的原则就是当p(科学│计算机)取值多少时,能使他们的联合概率最大。
艾博士对小明说:你会求解这个问题吗?
小明思考了一会儿说:我们学过求最大值的方法,对于这个比较简单的问题,令联合概率的导数等于0,就可以求解了。
艾博士:小明,你求解一下试试。
小明认真地求解起来:
令: ,有:
所以:
由于:
所以:
艾博士边看小明求解的结果边说:小明你看,这个结果是不是与我们直观想象的结果也是一致的?
小明:是啊,还真是这样的。语料库中有两句话是“计算机 科学”,一句话是“计算机 工程”,当前面一个词是“计算机时”,后面出现“科学”的概率不就是2/3、出现“工程”的概率不就是吗1/3吗?
艾博士:通过让联合概率最大化估计概率的方法称作最大似然估计。但是一般来说并不是直接估计概率值,因为一般来说联合概率分布是一个含有参数的函数,而是通过最大似然方法估计该联合概率分布的参数。对于神经网络语言模型来说,概率是用神经网络表示的,所以就是估计神经网络的参数。根据我们前面介绍过的神经网络语言模型(见图1.41),对于语料库中的任何一个词w,我们假定窗口大小为n,依据w在语料库中的位置,会有一个w的上下文context(w),也就是w的前n-1个词,以context(w)作为神经网络语言模型的输入,在输出层词w所对应的位置k会得到一个输出值,该值表示的是在给定的上下文下,下一个词是w的概率。依据最大似然估计方法,我们希望在该语料库上,所有词在给定上下文环境下的概率乘积最大。即:
其中 表示神经网络的所有参数,C表示语料库,符号“ ”表示连乘的意思。式子 称为似然函数。所以,我们的目标就是训练神经网络语言模型,确定参数 ,使得似然函数在给定的训练集上最大。
小明问:我们训练神经网络一般是用BP算法求损失函数最小,这里是要求最大,怎么求解呢?
艾博士:通过一个变换就可以将最大化问题转化为最小化问题。为了计算方便,我们首先通过对似然函数做对数运算,将连乘变换为连加,因为经过对数运算后,原来的连乘就变换为连加了。
取对数后为:
如果我们在上式前面增加一个“负号”,原来的最大化就可以变成最小化问题了:
这样我们就可以用下式作为损失函数,然后用BP算法求解。
其中
小明:这样一来,这个神经网络语言模型就跟普通的全连接神经网络没有任何区别了。
艾博士:基本上是这样的。其实从这里也可以看出来,神经网络只是提供了一个一般性方法,具体用它求解什么问题,根据问题的特点,定义好输入输出以及损失函数就可以了。
但是,在这个问题中,与普通神经网络还有个不太一样的地方。
小明不解地问道:哪里不一样呢?
艾博士:小明你还记得吗?我们前面在介绍神经网络语言模型结构的时候,还留下了一个伏笔。
小明想了想回答说:记得。在讲解图1.41所示的神经网络语言模型时,您说每个词w都对应一个长度为m的向量C(w),这些向量拼接在一起构成了神经网络语言模型的输入x。当时并没有说如何得到C(w)。
艾博士:对,如何获得C(w)也是神经网络语言模型与普通全连接神经网络不一样的地方。开始训练时C(w)的值是随机设置的,在训练过程中,同神经网络的权重一样,C(w)也一同被训练,把它当作参数看待就可以了。当训练结束时,每个词都得到了一个向量,这个向量就是该词的一种表示,所以这个向量又称作词向量。
小明:艾博士,以前我们说的训练都是指训练神经网络的权重,BP算法也是这么推导出来的,而C(w)是神经网络的输入,怎么训练呢?不是太明白,还请您给讲讲。
艾博士:C(w)虽然是神经网络的输入,但是也可以像权重那样进行训练,道理是一样的。我们还是举个例子来说吧。
下图左边是个简单的神经网络, 、 、 是输入, 、 、 是权重。我们像下图右边那样,在下边增加一个只含有一个输入的输入层,输入恒定为1,中间三个原来的输入看做是隐含层的神经元,而将 、 、 看做是输入层到隐含层的三个权重。这样右边的神经网络与左边的神经网络是完全等价的。所以, 、 、 这三个原来的输入,就可以当作权重,像权重一样训练了。小明你说是不是这样的?
小明对照着图想了想说:还真是一样的。
艾博士:通过这样的方法,我们就可以得到词的稠密表示——词向量了。
小明:原来词向量是这样得到的啊。本来想知道词的稠密表示方法,一直在听您讲语言模型,还想这和词的表示有什么关系呢?原来通过训练神经网络语言模型就同时得到了词的向量表示。这样得到的词向量有什么特点呢?
艾博士解释说:一般来说,语义相近的词,其上下文也往往会比较相一致,比方说“计算机”、“电脑”两个词,几乎可以任意互换,这样语义近似的词得到的词向量也会比较接近,就可以通过计算两个词向量的距离等方式“计算”两个词的语义相似性。这样得到的词向量还可以进行向量运算,满足一些向量的性质。
图1.42 词向量关系示意图
如图1.42所示,给出了“国王”、“王后”、“男人”、“女人”4个词的词向量示意图。“国王”相对于“男人”的关系,可以等同地看做“王后”与“女人”的关系,所以:
C(国王)-C(男人) = C(王后)-C(女人)
其中C(w)表示词w的词向量,符号“-”表示向量减法,下面用的到符号“+”也是指向量加法。这样,如果假设我们不知道“王后”的词向量,就可以利用向量运算计算得到:
C(王后) = C(女人)+C(国王)-C(男人)
小明看到这个结果很是惊喜:还能进行这样的计算,真是神奇。
艾博士:这些都体现了这种词向量表示的优越性,也体现了这样得到的词向量确实能够体现出词义信息。
艾博士接着讲道:但是这个神经网络语言模型有个不足,就是计算起来太慢了。
小明问到:为什么会慢呢?
艾博士回答说:常用词一般会有几十万个,每个词均对应一个神经网络的输出,又由于采用了softmax激活函数,每次计算softmax需要用到所有的输出值。
小明:还真是这样,计算softmax时分母部分要对所有输出计算e^(y_k ),再求和,运算量很大,确实会影响速度。如何解决这个问题呢?
艾博士:为此提出了一种称作word2vec的简化模型,如图1.43所示。word2vec模型有两种实现方式,这里给出的是其中的一种,称作连续词袋模型(CBOW)。
图1.43 CBOW模型示意图
图1.44 霍夫曼树示意图
在这个模型中,输入的上下文不是当前词的前n-1个词,而是当前词 的前c个词 和后c个词 ,窗口大小为2c。同样,上下文中的每个词对应一个长度为m的向量 ,共有2c个。 的含义与前面介绍的神经网络语言模型一样,是对应词的词向量。中间层的构成是将这2c个向量按位相加在一起,构成向量 ,该向量的长度同样为m,而不是像前面介绍的神经网络语言模型那样将词向量拼接在一起,减少了神经网络的参数量。该模型的输出同样是在给定上下文环境下某个词 的概率,但是为了避免计算softmax以提高计算速度,采用了一种称作层次softmax的方法近似softmax的效果。
小明:是怎么近似的呢?
艾博士:这里用到了霍夫曼树的概念,我们先介绍一下什么是霍夫曼树。
如图1.44所示,是一个词表的霍夫曼树示意图,最上边的实心圆为树的根节点root,下边的空心圆为叶节点,每个叶节点对应词表中的一个词,词表有多大,就有多少个叶节点。霍夫曼树是一个二叉树,也就是说,每个节点最多可以有两个子节点。从霍夫曼树可以得到词表中每个词的唯一编码。
小明问到:如何从霍夫曼树得到词的编码呢?
艾博士:小明你看图1.44,从根节点root到任何叶节点都存在一条路径,从root开始向下,每遇到一个节点需要选择向左还是向右,最终可以到达某个叶节点。从root开始,选择“左左右”就到达了 ,选择“左右”就到达了 。如果“左”用“1”表示,“右”用“0”表示,就可以得到一个词的编码,比如 的编码为“110”, 的编码为“10”等。这就是词的霍夫曼编码。这种编码的特点是不等长,霍夫曼树可以根据每个词的使用频度产生,可以使得常用词的编码短,非常用词的编码长,而且任何一个短的编码都不会是另一个长的编码的前一部分,比如“10”是 的编码,则除了 以外,不可能还有其他词的编码是以“10”开始的。所以,如果用霍夫曼编码表示一篇文章的话,词的编码之间不需要空格等分隔符,就可以区分出来。比如“10110”只能拆分为“10”、“110”,而不可能有其他的拆分结果。由于越是常用词其编码越短,所以霍夫曼编码也是一种平均编码长度最短的编码方法。
小明:那么如何得到霍夫曼树呢?
艾博士:这部分内容我们就不展开讲了,如果有兴趣可以阅读相关资料。
小明:好的,我课后再找相关资料学习一下。但是这个霍夫曼树怎么跟我们要讲的语言模型联系在一起呢?
艾博士:在图1.43中,词 的上下文对应的词向量经求和后得到 。霍夫曼树的每一个非叶节点,也就是图中的灰色节点,都单独看做是一个神经元,输入是 ,输出是一个概率值,表示到达这个节点后向右走的概率p(R),那么向左走的概率就是p(L)=1-p(R)。这样的话,任何一个词w依据其霍夫曼编码就可以得到一个从root到达该词的概率。比如对于词 其霍夫曼编码为“110”,从root开始,第一个节点应该向左走,其概率为 ,第二个节点还是向左走,其概率为 ,第三个节点是向右走,其概率为 。这样,从root到达 的概率就应该是三个概率的乘积,即:
在训练的时候,对于词表中的每一个词,也就是霍夫曼树的任何一个叶节点,都对应着这样的概率,训练目标就是使该概率值最大。同前面讲的神经网络语言模型一样,我们也同样通过求对数再加负号的办法,将该最大值问题转化为最小值问题,并以此作为损失函数,以便可以用BP算法求解。比如对于词 来说,其损失函数就是:
小明有些疑问地问到:概率p(R)、p(L)如何计算呢?
艾博士:前面提到过,霍夫曼树的每个非叶节点都看做是一个神经元,注意不是神经网络,就是一个单独的神经元,每个神经元的输入都是一样的,均为 ,但是每个神经元有各自的参数即权重w,最后再加一个sigmoid激活函数,神经元的输出就是向右走的概率,而用1减去向右走的概率就是向左走的概率。
小明:原来是这样的,我明白了。
艾博士进一步解释说:这样做的好处是,每次训练一个词时只需修改与本词相关的参数,不涉及其他参数,不像前面讲过的神经网络语言模型那样计算softmax时,要计算所有词的概率值,从而提高了训练速度。同时由于使用了霍夫曼编码,常用词的编码短,涉及到的神经元就少,从而进一步提高了计算速度。
艾博士又强调说:另外再重申一下,这也是一种神经网络语言模型,作为词向量的输入也同前面讲过的神经网络语言模型一样,通过训练得到。以上就是word2vec模型的实现方法之一:连续词袋模型(CBOW)。
小明:那么word2vec模型是否还有其他的实现方法呢?
艾博士:word2vec模型除了连续词袋模型外,还有一种模型称作Skip-Gram,目前该名称还没有合适的翻译,我们也就直接用其英文名称。
对于连续词袋模型来说,是通过词w两侧的上下文预测w出现的概率,而Skip-Gram模型刚好相反,是通过词w预测它两侧出现哪些词的概率。图1.45给出了Skip-Gram模型的示意图,我们就不做详细介绍了。
图1.45 Skip-Gram模型示意图
艾博士总结说:总之,我们通过训练神经网络语言模型的办法,可以获得词的向量表示,有了这种向量表示后,就可以用神经网络进行文本处理了。
小明说:艾博士,能否举个文本处理的例子呢?对于如何用神经网络处理文本还是比较模糊。
艾博士:好的,我们下面就举一个用神经网络对一句话的情感信息进行分类的例子。在这个例子中,同时用到了全连接神经网络和卷积神经网络。
小明:什么叫情感分类呢?
艾博士:我们举个例子说明吧。比如说刚看完一部电影,你说:“我很喜欢这部电影”,这就体现了正的情感,如果说的是:“这部电影不好看”,体现的就是负的情感。把一句具有感情色彩的话分成正的情感或者负的情感,就是情感分类问题。
图1.46给出了一个用于情感分类的神经网络示意图,该模型被称作TextCNN,Text就是文本的意思,而CNN则是卷积神经网络的英文缩写。下面我们仔细解释一下这个神经网络。首先说明一下,这只是个示意图,只是为了举例用,图中的一些超参数(人为设定的参数,如卷积核的个数、词向量长度等均属于超参数)并不是真实的数值,比如词向量长度图中设定为5,实际系统中词向量长度可能有300、400。
该神经网络的输入是一句话,图中示例的是“我 非常 喜欢 这部 城市 题材 电影”,共7个词组成。假定事先训练好了长度为5的词向量,依次取出句中每个词的词向量,一个词向量占一行从上到下排列,这样就得到了一个7行5列的句子矩阵。
图1.46 TextCNN示意图
小明:这个句子矩阵看起来跟一幅“图像”没啥区别,是不是就可以像处理图像那样对句子用神经网络处理了?
艾博士:基本是这样的,但是有个问题。在处理图像时,卷积核都是“方”的,大小是3×3、5×5等,但是对于文本来说,由于每行对应一个独立的词,一个词向量不好从中间断开处理,所以在做卷积的时候需要有些变化,以便适应这个情况。
小明:那么应该如何变呢?
艾博士:对于3×3、5×5这样的卷积核,我们称为二维卷积,对于文本来说,我们要用到一维卷积。也就是说,卷积核的宽度默认与词向量的长度一致,我们只规定卷积核的高度,而卷积核按照给定的步长,只在纵向移动,其他的与前面讲的卷积运算是一样的。
下面给一个文本一维卷积的例子如图1.47所示。
在该图中输入是一个4×5的句子矩阵,词向量长度为5,卷积核的大小为3,即卷积核的高为3,宽与词向量长度一致为5。卷积得到两个结果,一个是卷积核与句子矩阵上面3行的卷积结果为-8,见图1.47上图。然后按照卷积步长为1,向下移动一行后,得到卷积的第二个结果,即句子矩阵后3行与卷积核的卷积结果为-7,见图1.47下图。这里只是为了示意如何做一维卷积,卷积结果没有连接激活函数,实际系统中一般要连接激活函数。
小明:我听懂了,在处理图像时,卷积核要先行后列对图像进行扫描,用的是二维卷积。但是在处理文本时,由于一行与一个词向量对应,不能将词向量断开处理,所以采用一维卷积进行处理,只沿着纵向扫描。
图1.47 文本卷积示意图
艾博士:是这样的,这就是文本卷积与图像卷积的不同之处。其他的都是一样的,比如多个卷积核就可以得到多个通道,对于多通道卷积,卷积核也有“厚度”,其厚度值与输入的通道数一致,这些也都是默认的。
艾博士接着说:弄清楚了一维卷积运算之后,图1.46的其他部分就不难懂了。在这个神经网络中,输入层直接连了一个卷积层,共有6个不同大小的卷积核,大小分别为2、3、4,每种各两个,共获得6个通道。卷积时没有加填充,所以不同大小的卷积核得到的通道大小也不一样,分别为6、5、4。然后对每个通道做一次1-最大池化,也就是每个通道中选取一个最大值作为池化的结果,再把这6个结果拼接成一个长度为6的向量,向量的每个元素可以看做是一个神经元,再与输出层的两个神经元做全连接,最后通过softmax输出。输出层的两个神经元分别代表输入句子具有正情感或负情感的概率。这样就可以实现对句子情感的两级分类。
如果是在训练阶段,则需要标注好大量的情感句子,利用这些标注好的样本,采用BP算法训练神经网络。
小明:看来如果有了词向量表示之后,用神经网络处理句子跟处理图像也确实没有太大的差别,除了个别地方需要考虑句子特点外,其他的地方都差不多。
艾博士,我还有个问题问一下,在这个神经网络中用到了1-最大池化,是不是也可以用其他的最大池化方法呢?
艾博士:是的,比如在最大池化时可以从一个通道中选取两个或者更多的元素,也可以把通道分成若干部分,每部分取最大的,等等。
小明听着艾博士的讲解,思考了一会说:艾博士,这种处理方法是不是要求文本是等长的呢?如果文本长短不等如何处理呢?
艾博士说:小明,你提了一个很好的问题。当固定了卷积核的大小后,对于不同长度的文本,卷积后结果的大小是不一样的,在TextCNN中,由于采用了1-最大池化,无论句子长短,一个通道最后都得到了一个最大的结果,所以从某种角度来说,这种方法也是可以处理不同长短的文本的,但是文本长度也不能变化太大。
小明:那么有没有其他的更好的处理不等长文本的方法呢?
艾博士回答说:有这样的办法,今天时间不早了,我们下次再接着讲。
小明说:好的,艾博士,下次见。
小明读书笔记
要用计算机处理自然语言,首先遇到的一个问题如何表达一个词,以便让计算机能够处理。“独热”是一种简单的词的表示方法,该方法用一个与词表等长的向量表示一个词,在词表的对应位为1,其余位置为0。比如某词在词表中处于123的位置,则独热表示法就是一个向量,只在向量的第123位为1,其他位置都是0。这是一种非常稀疏的表示方法,优点是简单,缺点有很多,比如向量太长、不能根据词的表示计算词间相似性等。
与独热表示法相对应的是词的稠密表示法,一个词也是表示为一个向量,但是向量长度一般是几百维,不需要词表那么长。另外就是表示词的向量,几乎每一位都不为0,而是向量的每一位都参与到词的表示中,所以这种方法又称为词的分布式表示。
词用向量表示又称为词向量。词向量可以通过神经网络语言模型得到。所谓神经网络语言模型,就是在给定输入上下文下,下一个词是哪个词的概率。通过训练神经网络语言模型,可以获得词向量。神经网络语言模型同样通过BP算法进行训练,与普通的神经网络训练过程不同的是,在修改权重的同时,还要同时对输入进行修改。对输入的修改可以等价成对权重的修改,二者并没有本质的不同。最终在神经网络训练结束后,在输入层就得到了词向量。
为了解决神经网络语言模型训练速度慢的问题,提出了word2vec网络模型,与霍夫曼编码方法相结合,可以加快语言模型的训练过程。
未完待续
各位朋友如有任何意见和建议,请点击下面的“写留言”,留下您宝贵的意见和建议。
内容来自《艾博士:深入浅出人工智能》,扫描如下二维码购买:
马少平,清华大学计算机系长聘教授,博世知识表示与推理冠名教授,天工智能计算研究院常务副院长,中国人工智能学会副监事长,中国中文信息学会副理事长。主要研究方向为智能信息处理、信息检索、推荐系统等。
本书入围“一生一课,一生一书”计划项目,是最好的人工智能通俗讲义之一。
本书设计了博学的艾博士和好学的小明两个人物,以师徒二人对话的方式,一步步由浅入深地讲解人工智能的基本原理和方法,讲解详细,通俗易懂,给读者以在教室听课的真实感。
本书精心挑选了人工智能发展史上一些主要的方法进行详细讲解,通过本书的学习,使得读者对人工智能有一个比较全面的了解,为进一步深入学习和研究人工智能打下良好的基础。
结合例题,本书对相关概念和算法背后的原理做了详细的讲解,对学习过程中容易犯的错误做了重点说明,适合于对人工智能感兴趣的初学者、从事人工智能开发的工程人员以及讲授相关课程的教师阅读,通过本书的学习,可以对相关概念和算法有更加深入的理解。
本书提供全部的讲课PPT,在微信公众号“跟我学AI”和B站(在B站搜“马少平”)还配有详细的讲课视频,可以通过前言中提供的二维码获取这些资源。
扫描如下二维码加入马少平教授读者群:
版权声明
版权属于原作者,仅用于学术分享
文章精选: