第十六课:词向量(word2vec)

时间:北京时间 1月20号星期六早11点到中午12点
地点:将门斗鱼直播:https://www.douyu.com/jiangmen
主讲人:Aston Zhang

词向量(word embedding)已逐渐成为自然语言处理的基础知识。

本课将以word2vec为例,着重介绍两套模型:跳字模型(Skip-gram)和连续词袋模型(CBOW),以及两套近似训练法:负采样(Negative sampling)和层序softmax(Hierarchical softmax)。

本节课的大致安排:

[10 mins]:词向量和word2vec概述
[15 mins]:跳字模型
[15 mins]:连续词袋模型
[10 mins]:负采样
[10 mins]:层序softmax

3赞

赞!死嗑gluon到底!!

坐等6666

看完word2vec,有一个疑问,课中说到每一个词会有两个向量表示(作为中心词,作为背景词),那具体使用时是采用哪一个呢?两个在向量空间上有没有什么物理关系?
希望下一课讲一下glove等其他模型,对不同词向量模型有一个比较,还希望讲一讲新词的词向量该如何计算?
谢谢!!!

用V向量就好

以skipgram为例,考虑window_size=1,给定序列abcd。
我们需要最大化

P(b|a)P(a|b)P(c|b)P(b|c)P(d|c)P(c|d)

你会发现上面有三对相互生成。

例如下面这对

P(b|a) P(a|b) = \frac{ \exp(\mathbf{u}_b^\top \mathbf{v}_a)}{ \sum_i \exp(\mathbf{u}_i^\top \mathbf{v}_a)} \frac{ \exp(\mathbf{u}_a^\top \mathbf{v}_b)}{ \sum_i \exp(\mathbf{u}_i^\top \mathbf{v}_b)}

u和v在分子等价(uv互换不影响全概率的分子大小),但分母上稍有差别。

好,下节课讲glove
新词词向量嘛,fasttext值得一试

1赞

想问一下大佬,自然语言处理必须是要飙数学么~~~之前学卷积什么的时候还觉得蛮轻松的,穿越过来听得一脸懵。如果数学不好,有实现方法吗?

以及最后那几行代码报错:module ‘mxnet.contrib’ has no attribute ‘text’

嗯,是什么地方听的比较懵?是近似训练法那块吗?

需要pip install mxnet --pre --upgrade

谢谢大佬翻牌!主要是层序softmax那部分,感觉只看到了局部的数学原理,而不知道这棵树出现在网络的哪个部分,怎么建构出来的,所以没有办法形成宏观的视角。(可能是我太心急了)

构建这棵树的简单方法就是一个普通的二叉树,更好一点的方法是binary Huffman tree。每节课上讲的内容还是以基础为主,如果能清楚数学原理,再理解其他相关内容应该就不难了。

如果有兴趣可以参考word2vec论文(使用binary Huffman tree)

论文链接:

好的,收到,谢谢大佬!

http://zh.gluon.ai/chapter_natural-language-processing/word2vec.html#模型 中,写连续词袋模型中,这一段:

我们可以用vv和uu分别代表背景词和中心词的向量(注意符号和跳字模型中的不同)。换言之,对于词典中一个索引为ii的词,它在作为背景词和中心词时的向量表示分别是vivi和uiui。而词典中所有词的这两种向量正是跳字模型所要学习的模型参数。为了将模型参数植入损失函数,我们需要使用模型参数表达损失函数中的中心词生成背景词的概率。给定中心词wcwc在词典中索引为cc,背景词wo1,…,wo2mwo1,…,wo2m在词典中索引为o1,…,o2mo1,…,o2m,损失函数中的背景词生成中心词的概率可以使用

跳字模型是否是写错了?

谢谢,fixed

对了,第十七课会飙代码。

更新回复

https://discuss.gluon.ai/t/topic/4180/6

谢谢aston老师,举例很有趣~
刚看完了新课,讲的很棒。fasttext其实是训练了更细粒度的字向量,从而新词能够有字向量求和而得。
日常来讲,如果我们希望比较两句话的相似性,这该如何操作呢?1. 是构造一些句向量,例如直接词向量的平均,或者有没有其他更好的做法?2. 或者是直接进行两个句子对应的词向量集合的比较呢?
谢谢~

我觉得这个目前还是个开放性问题。以前实习时见过有的组基于词向量平均做,也有一些其他方法。效果还是要在一些具体任务上比较才知道。

这个帖子里也讨论了相关问题:
https://discuss.gluon.ai/t/topic/4372

为啥我使用命令sudo pip3 install mxnet --pre --upgrade 成功执行后,还是无法引入mxnet.contrib.text

pip3 list看一下mxnet的版本号是什么?
或者卸载后重装?