1、使用One-hot 方法编码的向量会很高维也很稀疏。假设我们在做自然语言处理(NLP)中遇到了一个包含2000个词的字典,当使用One-hot编码时,每一个词会被一个包含2000个整数的向量来表示,其中1999个数字是0,如果字典再大一点,这种方法的计算效率会大打折扣。
2、训练神经网络的过程中,每个嵌入的向量都会得到更新。通过上面的图片我们就会发现在多维空间中词与词之间有多少相似性,这使我们能可视化的了解词语之间的关系,不仅仅是词语,任何能通过嵌入层 Embedding 转换成向量的内容都可以这样做。
上面说的概念可能还有些不清楚,那我们就举个例子看看嵌入层 Embedding 对下面的句子怎么处理的。Embedding的概念来自于word embeddings,如果您有兴趣阅读更多内容,可以查询 word2vec 。
deep learning is very deep
使用嵌入层embedding 的第一步是通过索引对该句子进行编码,这里我们给每一个不同的单词分配一个索引,上面的句子就会变成这样:
1、2、3、4、1
接下来会创建嵌入矩阵,我们要决定每一个索引需要分配多少个“潜在因子”,这大体上意味着我们想要多长的向量,通常使用的情况是长度分配为32和50。在这篇文章中,为了保持文章可读性这里为每个索引指定6个潜在因子。嵌入矩阵就会变成这样:
嵌入矩阵
这样,我们就可以使用嵌入矩阵而不是庞大的one-hot编码向量来保持每个向量更小。简而言之,嵌入层embedding在这里做的就是把单词“deep”用向量[.32, .02, .48, .21, .56, .15]来表达。然而并不是每一个单词都会被一个向量来代替,而是被替换为用于查找嵌入矩阵中向量的索引。其次这种方法面对大数据时也能有效计算。由于在深度神经网络的训练过程中嵌入向量也会被更新,我们就可以探索在高维空间中哪些词语之间具有相似性,再通过使用t-SNE 这样的降维技术就可以将这些相似性可视化。
不仅是词嵌入
前面的例子表明,单词嵌入在自然语言处理领域非常重要。通过单词嵌入,我们可以使用语言捕捉关系。并且,嵌入层可以用来嵌入比单词更多的东西。在目前的研究项目中,可使用嵌入层来嵌入用户在线行为。将索引分配给用户行为,如“门户网站Y上的页面类型X的页面视图”或“滚动X像素”。然后,这些索引用于构建一系列用户行为。
在“传统”机器学习模型(支持向量机、随机森林、梯度提升树)与深度学习模型(深度神经网络、递归神经网络)的比较中,我发现这种嵌入方法对于深度神经网络非常有效。
“传统”机器学习模型依赖于特征工程的表格输入。这意味着,作为研究人员,我们决定特征是什么。在这种情况下,特征可能是:访问的主页数量、完成的搜索数量、鼠标滚动的像素总量。然而,在进行特征工程时,很难捕捉空间(时间)维度。通过使用深度学习嵌入层,我们可以通过提供一系列用户行为(作为索引)作为模型的输入来有效地捕捉这个空间维度。
在我的研究中,递归神经网络表现最好。从“传统”特征工程模型来看,梯度提升树表现最佳。其他研究探索了在MOOCs中使用嵌入层来编码学生行为( Piech等人.2016 )和电子商务中用户行为建模( Tamhane等人.2017年)。
推荐系统
嵌入层还可以用来处理推荐系统中的稀疏矩阵问题。
推荐系统的使用非常广泛,我们也都不陌生。最常见的例子是亚马逊的产品推荐和 Netflix’s 的项目推荐系统。Netflix还曾举办过一场价值100万美元的竞赛,为他们的推荐系统寻找最佳的协同过滤算法。
推荐系统有两种主要类型,区分这两种类型很重要。
基于内容的过滤:这种类型的过滤是基于有关项目或者产品的数据。例如,让用户填写一份关于他们喜欢什么电影的调查。如果他们说他们喜欢科幻电影,系统便推荐他们去看科幻电影。在这种情况下,所有项目都必须有大量元信息可用。
协同过滤:让系统找到像你一样的人,看看他们喜欢什么,假设你也喜欢同样的东西。和你一样的人=以相似的方式评价你看的电影的人。在大型的数据集中,这比元数据方法工作得好得多。本质上,询问人们的行为不如观察他们的实际行为好。
要解决这个问题,我们可以创建一个巨大的矩阵,将所有用户对所有电影的评价进行比较。然而,在许多情况下,这将产生一个极其稀疏的矩阵。想想你的Netflix账户。你看过的电影占他们总供应量的百分比是多少?这可能是一个相当小的百分比。然后,通过梯度下降,可以训练一个神经网络来预测每个用户对每部电影的评价有多高。如果你想更多地了解深度学习在推荐系统中的应用,可以关注我们,并加入我们的社群,提出你想了解的内容。
深研资料
原文链接:
https://towardsdatascience.com/deep-learning-4-embedding-layers-f9a02d55ac12
word2vec:
https://arxiv.org/pdf/1301.3781.pdf
t-SNE:
https://lvdmaaten.github.io/tsne/
嵌入层编码学生行为:
https://stanford.edu/~cpiech/bio/papers/deepKnowledgeTracing.pdf
电子商务用户行为建模:
https://link.springer.com/chapter/10.1007/978-3-319-57529-2_42
关于embedding的理解:
https://towardsdatascience.com/neural-network-embeddings-explained-4d028e6f0526
https://www.tensorflow.org/guide/embedding
https://github.com/WillKoehrsen/wikipedia-data-science/blob/master/notebooks/Book%20Recommendation%20System.ipynb