0
点赞
收藏
分享

微信扫一扫

Word2Vec #yyds干货盘点#

这篇文章是我的笔记分享,内容主要来自吴恩达老师的深度学习课程。^[AI中国官网-全球领先的线上AI教育、实践平台 (deeplearningai.net)]

Word2Vec有两种训练模式。

  • CBOW(Continuous Bag-of-Words Model)
  • Skip-gram (Continuous Skip-gram Model)

本文讲的是skip-grams^[[1301.3781] Efficient Estimation of Word Representations in Vector Space (arxiv.org)]。
我们之前讲过如何得到word embedding的E矩阵的一种方法。使用的是神经网络进行了训练。我们当然要知道那个方法进行训练,计算复杂度非常大。所以有没有更简便的方法呢。

基本模型

在skip-gram模型中我们要建立一个监督学习模型。

在这里我们需要选定一个上下文词汇(Content)和一个目标词汇(Target)。

模型过程:

one-hotEword embedding e→softmax→$\hat y$

  • 首先我们要从词汇的one-hot向量$o$入手。
  • 我们可以得到一个word embedding矩阵$E$。
  • 将word embedding矩阵和one-hot向量相乘得到word embedding向量$e$。
  • 这样结果送入softmax中。
  • 得到最终结果$\hat y$

其中softmax 的计算公式为:
$$
p(t \mid c)=\frac{e^{\theta{t}^{\top} e{c}}}{\sum{j=1}^{10000}e^{\theta{j}^{\top} e_{c}}}
$$

  • $\theta_{t}$是与输出t有关的参数,即某个输出词汇t和标签相符的概率是多少。
  • 没有加偏置项。

损失函数使用的是负对数自然估计。
$$
\mathcal{L}(\hat{y}, y)=-\sum{n=1}^{10000} y{i} \log \hat y
$$

softmax之后输出的是一个10000维度的向量。结果是所有可能目标词汇的概率。

优化这个模型比我们之前讲的优化那个神经网络会简单很多很多。

解决softmax计算量大

$$
p(t \mid c)=\frac{e^{\theta{t}^{\top} e{c}}}{\sum{j=1}^{10000}e^{\theta{j}^{\top} e_{c}}}
$$

看着softmax的计算公式,我们就应该知道它的分母计算量是很大的。我们这个例子词汇表只有1万。计算量已经很恐怖了。如果那些词汇表的规模为100万呢。

有一个方法是对其进行平均拆分。可以考虑一下二分查找。他不会一下子告诉你最后这个结果是在1万个单词中的哪一个位置。而是分层的告诉你。

比如第一层告诉你,他在后5000个之中。第二层告诉你,他在前7500个之中。然后第三层再逐层告诉你。

image.png

另一个方法是按频率进行统计。

可以考虑一下哈曼树那种。水平比较高的更接近根节点。当然也有的是使用力学持平比较低的,更接近于根节点。

image.png

举报

相关推荐

0 条评论