对于文本处理,首要的任务是要对非结构化数据进行结构化处理,由此诞生了词向量表示的方法,再众多词向量表示方法中,尤其以One_hot和word2vec两种方法最常用,下面也针对这俩方法进行阐述
One_hot方法
One_hot方法是最简单的一种方法,也是出现最早的一种方法,其原理就比如一个语料有M各词,其中每一个词的One_hot表示方式为当前词用1表示,其余用0表示,也就是说语料有多少词,那么词向量的维度就是多少,而且词向量形式如[0,0,…,1,0,0,…],其中第i个词为1,其余为0。
从One_hot的原理不难发现,当语料中添加新的词,那么每个词的词向量就会发生变化,而且向量中充斥着大量的0,使得过于稀疏,除此之外,语料有多大,词向量的维度就有多大,使得最终的矩阵变得过于庞大,不利于存储及计算。尤其是One_hot不能表示词语之间的关系,比如猫,老鼠,直观上很容易理解的到猫和老鼠 有比较强的关系,如果用One_hot来表示,结果就是
“猫”:[0,0,0,1,0,0,0]
“老鼠”:[0,0,1,0,0,0,0]
那么两个向量做内积,就很容易发现[0,0,0,1,0,0,0] x[0,0,1,0,0,0,0] = 0,最后的结果就是毫无关系,这显然不太符合实际,所以再现在One_hot方法较少的被用到实际项目中了。
针对One_hot存在的问题,Hinton提出了分布式表示方法,很好的解决了One_hot的缺陷。其中最具代表的就是word2vec
Word2Vec方法
Word2Vec通过Embedding层将One-Hot Encoder转化为低维度的连续值(稠密向量),并且其中意思相近的词将被映射到向量空间中相近的位置。 从而解决了One-Hot Encoder词汇鸿沟和维度灾难的问题。
1.Embedding层 1.Embedding层1.Embedding层
Embedding层(输入层到隐藏层)是以one hot为输入、中间层节点数为词向量维数的全连接层,这个全连接层的参数就是我们要获取的词向量表!
2.Word2vec模型概述 2.Word2vec模型概述2.Word2vec模型概述
word2vec其实就是简化版的NN,它事实上训练了一个语言模型,通过语言模型来获取词向量。所谓语言模型,就是通过前n个字预测下一个字的概率,就是一个多分类器而已,我们输入one hot,然后连接一个全连接层,然后再连接若干个层,最后接一个softmax分类器,就可以得到语言模型了,然后将大批量文本输入训练就行了,最后得到第一个全连接层的参数,就是词向量表。
记词典大小为V
输入层:one-hot vector,V个节点
隐藏层:无激活函数,D个节点(D<V)
模型训练后输入层和隐藏层之间权重即为我们要获取的词向量
输出层:softmax回归输出输入词的邻近词的概率分布,V个节点
对同样一个句子:Hangzhou is a nice city。我们要构造一个语境与目标词汇的映射关系,其实就是input与label的关系。 假设滑窗尺寸为1 ,那么
CBOW的样本形式为:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice
Skip-Gram的样本形式为:(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)
3.模型求解:负采样方法 3.模型求解:负采样方法3.模型求解:负采样方法
本文我们只对负采样方法negative sampling展开介绍
3.1 NCE Loss提出背景
Softmax是用来实现多类分问题常见的损失函数。但如果类别特别多,softmax的效率就是个问题了。比如在word2vec里,每个词都是一个类别,在这种情况下可能有100万类。那么每次都得预测一个样本在100万类上属于每个类的概率,这个效率是非常低的。
3.2 NCE的主要思想
对于每一个样本,除了他自己的label,同时采样出N个其他的label
从而我们只需要计算样本在这N+1个label上的概率,而不用计算样本在所有label上的概率
而样本在每个label上的概率最终用了Logistic的损失函数
NCE本质上是把多分类问题转化为2分类问题
作者:Mr.SunKai
来源:CSDN
原文:https://blog.csdn.net/sun_xiao_kai/article/details/94589463
版权声明:本文为博主原创文章,转载请附上博文链接!