“苹果手机质量不错 , 就是价格有点贵 。”在上面的句子中,我们通过上下文可以推断出第一个“苹果”指的是苹果手机,第二个“苹果”指的是水果苹果,而第三个“菠萝”指的应该也是一个手机 。事实上,在自然语言处理领域 , 使用上下文描述一个词语或者元素的语义是一个常见且有效的做法 。我们可以使用同样的方式训练词向量,让这些词向量具备表示语义信息的能力 。
“这个苹果很好吃,非常脆 。”
“菠萝质量也还行,但是不如苹果支持的APP多 。”
2013年,Mikolov提出的经典word2vec算法就是通过上下文来学习语义信息 。word2vec包含两个经典模型:CBOW(Continuous Bag-of-Words)和Skip-gram,如 图4 所示 。
- CBOW:通过上下文的词向量推理中心词 。
- Skip-gram:根据中心词推理上下文 。
文章插图
假设有一个句子“Pineapples are spiked and yellow”,两个模型的推理方式如下:
- 在CBOW中,先在句子中选定一个中心词,并把其它词作为这个中心词的上下文 。如 图4 CBOW所示,把“spiked”作为中心词 , 把“Pineapples、are、and、yellow”作为中心词的上下文 。在学习过程中,使用上下文的词向量推理中心词 , 这样中心词的语义就被传递到上下文的词向量中,如“spiked → pineapple”,从而达到学习语义信息的目的 。
- 在Skip-gram中,同样先选定一个中心词,并把其他词作为这个中心词的上下文 。如 图4 Skip-gram所示,把“spiked”作为中心词,把“Pineapples、are、and、yellow”作为中心词的上下文 。不同的是,在学习过程中,使用中心词的词向量去推理上下文,这样上下文定义的语义被传入中心词的表示中,如“pineapple → spiked”,从而达到学习语义信息的目的 。
一般来说,CBOW比Skip-gram训练速度快,训练过程更加稳定,原因是CBOW使用上下文average的方式进行训练,每个训练step会见到更多样本 。而在生僻字(出现频率低的字)处理上,skip-gram比CBOW效果更好 , 原因是skip-gram不会刻意回避生僻字 。
2.1 CBOW和Skip-gram的算法实现我们以这句话:“Pineapples are spiked and yellow”为例分别介绍CBOW和Skip-gram的算法实现 。
如 图5 所示,CBOW是一个具有3层结构的神经网络 , 分别是:
文章插图
- 输入层: 一个形状为C×V的one-hot张量,其中C代表上线文中词的个数 , 通常是一个偶数 , 我们假设为4;V表示词表大?。颐羌偕栉?000 , 该张量的每一行都是一个上下文词的one-hot向量表示,比如“Pineapples, are, and, yellow” 。
- 隐藏层: 一个形状为V×N的参数张量W1 , 一般称为word-embedding,N表示每个词的词向量长度,我们假设为128 。输入张量和word embedding W1进行矩阵乘法,就会得到一个形状为C×N的张量 。综合考虑上下文中所有词的信息去推理中心词,因此将上下文中C个词相加得一个1×N的向量,是整个上下文的一个隐含表示 。
- 输出层: 创建另一个形状为N×V的参数张量,将隐藏层得到的1×N的向量乘以该N×V的参数张量,得到了一个形状为1×V的向量 。最终,1×V的向量代表了使用上下文去推理中心词 , 每个候选词的打分,再经过softmax函数的归一化,即得到了对中心词的推理概率:
如 图6 所示,Skip-gram是一个具有3层结构的神经网络,分别是:
文章插图
- Input Layer(输入层):接收一个one-hot张量 $V \in R^{1 \times \text{vocab_size}}$ 作为网络的输入,里面存储着当前句子中心词的one-hot表示 。
- Hidden Layer(隐藏层):将张量$V$乘以一个word embedding张量$W_1 \in R^{\text{vocab_size} \times \text{embed_size}}$,并把结果作为隐藏层的输出 , 得到一个形状为$R^{1 \times \text{embed_size}}$的张量 , 里面存储着当前句子中心词的词向量 。
- Output Layer(输出层):将隐藏层的结果乘以另一个word embedding张量$W_2 \in R^{\text{embed_size} \times \text{vocab_size}}$ , 得到一个形状为$R^{1 \times \text{vocab_size}}$的张量 。这个张量经过softmax变换后,就得到了使用当前中心词对上下文的预测结果 。根据这个softmax的结果,我们就可以去训练词向量模型 。
推荐阅读
- 超人怎么死的(超人怎么复活)
- 米游社上传图片水印怎么关
- 苹果se3参数与图片_苹果se3参数详细配置
- 双叶h-单叶双曲面与双叶双曲面的图像区别
- dc超人咋死的
- 许褚怎么牺牲的(三国名将许褚之死)
- CSS处理器-Less/Scss
- JUC学习笔记——进程与线程
- 红警尤里怎么玩(红警2共和国之辉尤里怎么玩)
- 斗地主怎么玩(斗地主怎么记牌最轻松)