(1)使用one-hot方法表示词汇有两个主要的缺点,以10000个词为例,每一个单词须要用10000维来表示,并且只有一个数是零,其余维度都是1,形成表示很是冗余,存储量大;第二每一个单词表示的向量相乘都为零(正交),致使没可以表示是词汇之间的联系,好比oriange和apple,queen和king应该是联系比价紧密的,可是用上面的词典表示没法体现出这一点。算法
(2)使用新的特征表示法,以下图所示,特征好比有性别、高贵、年龄、颜色、尺寸、食物等等做为特征,那么一个词汇符合一个特征将会取较大的值,彻底没什么关系取接近于0,加入设置了300个特征,那么每一个单词就能够用300维的向量表示(解决了表示太冗余),并且类似的词(好比apple和oriange)在不一样特征可能都很是相似的值(即类似性高),从而使得词汇之间有了联系。网络
(3)在上面提到那些特征,在实际中是经过网络来学习获得的,具体表示什么特征是没人知道的。app
(1)如何用词嵌入作迁移学习的步骤:函数
1.先从大量的文本机中学习词嵌入(词嵌入其实就是用一些特征来表示一个词汇,而不是经过one-hot表示),固然也能够直接使用别人训练好的词嵌入。学习
2.而后根据你新任务的数据量来决定是否还要调整这些词嵌入,若是数据量不多的话,直接使用以前的词嵌入。数据多的话能够进行微调。大数据
(3)词嵌入和以前讲过的人脸编码很是的相似,有一点区别就是:词嵌入,是有固定的词汇表的,而在人脸编码中可能会有一个彻底没有见过的人脸,而后须要对他进行编码。ui
(1)提出问题:man若是对应woman,那么King应该对应什么?方法是man的向量减去woman向量的值应该(约等于)等于King向量减去某个词汇的向量,式子以下所示:编码
移项以后即找到等式两边的类似度:3d
(2)使用余弦类似度(其实就是夹角的余弦值),值接近1是代表越类似:blog
(1)若是词汇量是10000,每一个词汇由300个特征表示,那么嵌入矩阵就是一个300*10000的矩阵,嵌入矩阵与某个词汇的one-hot表示的向量相乘会会的该词汇的嵌入表示(即300维来表示),以下图所示:
(2)上面的相乘因为one-hot只有特定的值是1,因此其实相乘的本质是取出该词汇在嵌入矩阵的位置的那一列,因此实际中不会进行这么复杂的矩阵乘法运算,而是用一些方法直接取出那一列便可,如Keras中有一个嵌入层,咱们用这个嵌入层能够有效的从嵌入矩阵中提出出你须要的列,而不是对矩阵进行很慢很复杂的乘法运算。
(1)案例是:预测“I want a glass of oriange___”划线处的单词是什么?能够用one-hot的I而后输入到一个嵌入层,嵌入层会作的操做将嵌入矩阵与one-hot向量相乘获得该词汇的嵌入向量,而后再输入到后面的网络进行输出,因此经过训练这整个网络,也就能够学习了嵌入矩阵。
(2)后面有全链接层,因此输入的维度须要固定,这时有一个上下文的概念(context),好比用目标预测位置的前4个单词(这时嵌入层输出总共4*300=1200个输入输入到下一层网络中),或者目标位置先后各4个词汇,实践证实,在以训练嵌入矩阵时,只使用目标位置的前一个词汇做为上下文也是效果很是不错的。
(1)使用Skip-Gram模型,其作法首先是上下文c进行采样,而后目标词就会在上下文c的正负10个词距内进行采样。换言之,在句子“I want a glass of orange juice to go alone with my cereal”,这时选择上下文c假设是orange,而后再距离orange10之内的词出现某个词的几率,好比选中glass,这时glass就是至关于(输出的标签)y,而orange是x。
(2)Skip-Gram能够理解为取一个词,而后在这个词周围出现什么词的几率比较大,用这样来构造一个监督学习,其目的就是为了学习嵌入矩阵。
(3)网络示意图和代价函数以下所示(其中y,y帽都是用one-hot表示的,y是上下文orange在必定词距范围内随机取到的一个词):
(4)采用上述的算法有一个问题就是计算量很是大,由于根据损失函数来看,其求和操做很慢由于词汇量很是大可能达到百万。解决的办法有分级(hierarchical)的softmax分类器和负采样(Negative Sampling)。
(5)分级的思路是(以10000个词汇为例),第一个分类器先告诉你目标词在前5000仍是后5000,而后第二个分类器告诉你是前2500仍是后2500,这样计算复杂度是词汇输取对数,而不是线性的。另外所造成的树通常常见的词在比较浅的地方,少见的词在更深的地方,以下图所示。
(1)负采样能够将上面的sotfmax变成一个二分类问题,这样能够大大减少计算量。
(2)负采样的作法是在选定上下文词,而后在上下文词限定的范围内(如10个词内)选取一个目标词,而后网络的输出为1,再在字典随机选取K个词当成负样本(即便选的词在上下文的限定范围内的词也不要紧),而后网络的输出为0。以下图所示:
(3)一个样本对对应了一个二分类器(即输出只有一个神经元(实质上是只看softmax10000维中对应target词汇的那个维度),计算很是之简单),与以前的sotfmax(输出有10000个神经元)对好比下:
(4)如何选取样本按照如下的方式,其中f(wi)是观测到的在语料库中的某个英语词的词频率。
(1)Xij表示单词i在单词j上下文中出现的次数,因此这里的i和j就和target和context的功能同样,因此能够认为Xij等于Xji。
(2)目标函数是最小化下面的式子(约定Xij为0时,f(Xij)也为0,约定0log0=0,f(Xij)是一个权重):
(1)案例1:输入x是一段文字,而输出y是你要预测的相应情感,好比说是对一个餐馆的评价的星级,分数为1-5。
(2)直接下载使用别人用很是大数据集训练好的嵌入矩阵便可。
(3)方法一使用如下的网络,每一个单词one-hot以后通过嵌入矩阵,造成词嵌入,而后将全部单词的特征进行平均,再将平均值送入到softmax中获得最终的评分。
(4)上一方法存在的问题是,没有考虑到单词的位置关系,全部在句子“Completely lacking in good taste, good service, and good ambiance.”中因为good很是多,因此最终预测获得一个较高的分数,但实际这句话是差评。因此第二种方法是使用循环神经网络RNN,这将是一个多对一问题,这样能够很好的获得一个情感分析的系统。
(1)当一个系统Father对应Doctor,Mother对应Nurse时这就是一个偏见的系统。
(2)以消除性别误差为例,叙述消除误差的主要步骤。首先第一步是将因此带写别的组(如he,she)作ehe-eshe,egirl-eboy而后将这些结果求和取平均,获得以下的轴:
(2)第二步是中和步骤,意思就是将应该无偏的词移动到轴上,以下图所示:
(3)第三步是均衡步,即移动一对词将其关于轴对称(如上图中grandmother与grandfather并无关于轴对称,因此grandmother与中和步骤以后的babysister距离更近一点),以下图所示
(5)有一点是,对于性别而言,有明确性别一一的词特别少,用一个二分类器来判断一个词是不是有明确的性别的,而后将全部其余词对这些有明确性别的词作上面的步骤便可解决偏见问题。关于其余偏见一样如此。