Embedding层作用
在深度学习领域中,Embedding层扮演着至关重要的角色,尤其在处理文本数据或类别数据。Embedding层的功能有两个:
1. 将高维稀疏的输入数据(如单词、类别标签等)转换为低维稠密的向量表示,可以大幅降低数据存储和计算量。
2. 低维稠密向量捕获了输入之间的语义和上下文信息,语义相近、类别相近的单词或者类别,其表示向量相似度也高,使得模型能够更好地理解数据信息并进行预测推理。
上述两个原因,使得模型能够更好的学习和处理输入数据。
Embedding层是从NLP发展过来的,下面以NLP中Word Embedding层为例,学习理解embedding层功能及训练方法。
Word Embedding
在NLP中,word embedding的作用是将词语映射为固定长度的向量,如下所示。
这个过程是如何实现的呢?
实际上,每个词都可以用一个one-hot向量进行表示,假设有一个5000个词的语料库,那么每个词可以用一个5000维的高维one-hot向量进行表示,这种高维向量(矩阵)对于计算机计算和存储都是巨大的开销,需要引入“嵌入矩阵”转换为低维向量(矩阵)进行处理。
嵌入矩阵(Embeddings)
假设有一个5000个词的语料库,每个词可以用1个128维的稠密向量进行表示,那么嵌入矩阵的大小是5000X128。
下面以“我喜欢学习数学”为例说明,这个句子可以分成“我”、“喜欢”、“学习”、“数学” 4个词,
每个词对应一个5000维的one-hot向量,那么这句话可以用一个4X5000的one-hot矩阵进行表示。
将one-hot矩阵 与 嵌入矩阵(embeddings) 进行矩阵相乘,可以得到一个4X128维的矩阵,如下:
因为词语矩阵是one-hot矩阵,这个矩阵乘法本质是从嵌入矩阵中挑选出该矩阵中词语对应的词向量(每个词语有一个向量)。
不难看到,嵌入矩阵是关键,这个矩阵必须具有以下性质:
1. 维度不能太高,比语料库词语个数要低1-2个数量级
2. 语义相似的词语,在向量表示上应该相似。
比如下面的例子中,cat和kitten两个词语义相近,在向量表示上,这两个向量的相似度要高,距离要比cat和dog更近,cat和dog又比cat和house要近。
再如,从逻辑上看,man和woman的距离和king和queen的距离应该差不多。
由此可见,使用嵌入矩阵具有三个优势:
1. 表达效率的提升:将高维稀疏矩阵转换为低维绸密矩阵,需要的计算和储存资源大幅减少
2. 表达关系的提升:语义相近的词语向量也相近,因此可以在数学上可以进行学习和推理
3. 嵌入矩阵是通用的,不同语料得到的one-hot矩阵一般是不通用的,而嵌入矩阵是通用的,一份嵌入矩阵,可以应用在不同的NLP任务中。
那么,嵌入矩阵如何得到呢?
嵌入矩阵获取
嵌入矩阵的获取是通过模型训练得到的,例如可以通过word2vector算法得到嵌入矩阵,word2vector算法又可分为CBOW和skip-gram算法,CBOW主要是根据上下文预测中间的词汇,而skip-gram是根据目标词预测上下文。
以“We are about to study the idea of deep learning” 为例,假设要根据上下文预测出“study”这个词,如果上下文窗口长度为1,则选择study上下一个词,左边是to,右边是the作为输入,上下文窗口长度为2,则选择study上下两个词,即左边是about to,右边是the idea两个词作为输入。
在深度神经网络中,对嵌入矩阵embeddings进行初始化,因为有输入句子词语one-hot向量,有预测目标词语的label,按损失函数最小来得到嵌入矩阵embeddings。
CBOW模型中如何根据上下文预测目标词呢?很简单,用上下文的词向量的均值表示预测目标词的向量。
然后预测目标词向量经过一个线性层权重矩阵(V X N),再经过softmax函数,输出预测概率最大的词。由于在一个语料库中,目标词有真实的label,于是通过损失函数最小,就能得到嵌入矩阵(embeddings)。
词语的one-hot向量经过embeddings不仅可以降维,而且相近的词语词向量是相似的,提升了词语之间的语义关系表达,从而增强了模型的预测推理能力。
代码实现
下面代码是CBOW模型在pytorch中的实现,还是比较简单的。
参考:
1.什么是词嵌入,Word Embedding算法_哔哩哔哩_bilibili
2. word2vec连续词袋模型CBOW详解,使用Pytorch实现_哔哩哔哩_bilibili