选择“星标”公众号 重磅干货,第一时间送达! 如今,深度学习炙手可热,deep learning在图像处理领域已经取得了长足的进展。随着Google发布word2vec,深度学习在自然语言处理领域也掀起了一阵狂潮。由于最近正在做一个相关的NLP项目,所以抽时间总结一下word2vec的相关知识点。 文章结构: 1、词的独热表示 2、词的分布式表示 3、词嵌入 4、两种训练模式 5、两种加速方法 6、word2vec和word embedding的区别 7、小结 词的独热表示 到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个向量就代表了当前的词。 “可爱”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...] 每个词都是茫茫 0 海中的一个 1。这种 One-hot Representation 如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字 ID。比如刚才的例子中,可爱记为 3,面包记为 8(假设从 0 开始记)。 缺点分析: 词的分布式表示 传统的独热表示仅仅将词符号化,不包含任何语义信息。如何将语义融入到词表示中?Harris 在 1954 年提出的“分布假说”为这一设想提供了理论基础:上下文相似的词,其语义也相似。Firth 在 1957年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定。 以(CBOW)为例,如果有一个句子“the cat sits one the mat”,在训练的时候,将“the cat sits one the”作为输入,预测出最后一个词是“mat”。 图1 分布式表示的最大优点在于它具有非常强大的表征能力,比如n维向量每维k个值,可以表征k的n次方个概念。下图的神经网络语言模型(NNLM)采用的就是文本分布式表示。而词向量(word embedding)是训练该语言模型的一个附加产物,即图中的Matrix C。 图2 所以我们可以将我们的任务拆解成两部分: 词嵌入 基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation)。核心依然是上下文的表示以及上下文与目标词之间的关系的建模。 上面了解到独热编码的维度过大的缺点。对此进行如下改进: 1、将vector每一个元素由整形改为浮点型,变为整个实数范围的表示; “词嵌入”也由此得名。 本质:词向量是训练神经网络时候的隐藏层参数或者说矩阵。 图4 两种训练模式
CBOW:上下文来预测当前词 图5 Skip-gram:当前词预测上下文 图6 两种加速方法
大家都知道哈夫曼树是带权路径最短的树,一般神经网络语言模型在预测的时候,输出的是预测目标词的概率(每一次预测都要基于全部的数据集进行计算,很大的时间开销)。 Hierarchical Softmax是一种对输出层进行优化的策略,输出层从原始模型的利用softmax计算概率值改为了利用Huffman树计算概率值。一开始我们可以用以词表中的全部词作为叶子节点,词频作为节点的权,构建Huffman树,作为输出。从根节点出发,到达指定叶子节点的路径是唯一的。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。 Negative Sampling(简写NEG,负采样),这是Noise-Contrastive Estimation(简写NCE,噪声对比估计)的简化版本:把语料中的一个词串的中心词替换为别的词,构造语料 D 中不存在的词串作为负样本。在这种策略下,优化目标变为了:最大化正样本的概率,同时最小化负样本的概率。这样说大家可能已经糊涂了,我们省去繁琐的数学推倒,这里举一个例子: 假设有一个句子为:“The quick brown fox jumps over the lazy dog.“ 图7 注意:比如像“the”这种常见的词,我们会遇到两个问题: 如果我们采用window size = 10,同时我们删除‘the’: word2vec和word embedding的区别 简言之,word embedding 是一个将词向量化的概念,中文译名为"词嵌入"。 Word embedding的训练方法大致可以分为两类: (1)无监督或弱监督的预训练 (2)端对端(end to end)的有监督训练。 word2vec不关心后续的应用场景,其学习到的是就是根据共现信息得到的单词的表达,用n-gram信息来监督,在不同的子task间都会有一定效果。而end2end训练的embedding其和具体子task的学习目标紧密相关,直接迁移到另一个子task的能力非常弱。 常用的word embedding分为dense和sparse两种形式: 通过阅读这篇文章,大家应该对word2ec有了一个基本的了解,如果想更加深入透彻的了解此工具,可以从数学原理入手并且阅读word2vec的源码,这里附上我参考的带有完整注释的源码地址,感兴趣的可以参考一下。 https://github.com/peklixuedong/RepresentationLearning 作者:李雪冬 |
|
来自: 新用户8173JS52 > 《待分类》