一、word2vec概述
word2vec是一个浅层神经网络模型,用于将单词转换为向量,该模型主要有两种类型:
1. CBOW 连续词袋模型
2. skip-gram 跳字模型
CBOW和skip-gram的目标都是迭代出词向量字典(嵌入矩阵)。
二、CBOW 连续词袋模型
1、概述
CBOW神经网络会接收上下文词语,将上下文词语转换为最有可能的目标词。
2、模型结构
3、猜想
假设我们有一个句子:
We are about to study the idea of deep learning.
我们能否用上面画线句子来表示出study呢?
这时,我们需要一个大小为n的窗口。
具体一些:
4、过程
对于上下文中输入的其中一个词进行分析:
- 输入词首先进行one-hot编码成为一个1行n列的向量,再经过embeddings层,embeddings层是一个N * V的矩阵,N代表词表中的词语个数,V代表词向量的维度,经过该层之后是一个1行V列的词向量。
- 之后每一个词语都进行这样的操作,将输出结果传送到线性层,通过线性层我们可以得到1*N的向量,再通过softmax得到了目标词向量,为1的地方就是模型的预测结果。
- 线性层:上下文中包括了多个词语,每个词语经过embeddings层都会得到一个词向量,多个上下文统一表示为
V
=
1
4
(
V
1
+
V
2
+
V
3
+
V
4
)
V=\frac{1}{4}(V_1 + V_2 + V_3 + V4)
V=41(V1+V2+V3+V4),输出结果为将语义平均的向量化V。
三、skip-gram跳字模型
1、概述
skip-gram是用目标词来预测上下文。
2、猜想
假设我们有一个句子:
We are about to study the idea of deep learning.
我们能否用study来预测上下问呢?
我们有一个大小为n的窗口。
使用一个词来预测另外一个词,尽量使这两个词的词向量接近,在skip-gram迭代的过程中,不断调整词向量:
1. 让目标词与上下文的词向量尽可能地接近。
2. 让目标此与非上下文的词向量尽可能地远离。
判断两个词向量是否接近使用向量的点积
A
=
(
a
1
,
a
2
,
.
.
.
,
a
n
)
A = (a_1, a_2, ..., a_n)
A=(a1,a2,...,an)
B
=
(
b
1
,
b
2
,
.
.
.
.
,
b
n
)
B = (b_1, b_2, ...., b_n)
B=(b1,b2,....,bn)
A
⋅
B
=
a
1
⋅
b
1
+
.
.
.
.
.
.
+
a
n
⋅
b
n
A \cdot B= a_1 \cdot b_1 + ......+ a_n \cdot b_n
A⋅B=a1⋅b1+......+an⋅bn
向量的点积衡量了向量在同一方向上的强度,点积越大,两个向量越相似,它们对应的语义也就越相似。
3、结构
in_embedding作为skip-gram模型的输出,得到的结果是,每一个词语到达目标词语的概率。