word2vec简要教程
来源:互联网 发布:ammo.js 编辑:程序博客网 时间:2024/06/08 02:37
一、 Word2Vec Tutorial
1.discrete representation(one-hot)的缺点
one-hot vector 不能够表示词之间的相似性,例子如下,motel和hotel是意思相近的两个词,可是两个词的one-hot vector却是正交的。
所以我们考虑使用一种维度较低并且有递推关系的向量来表示词,相似的词具有相似的向量。比如语料库有1W个词,如果用one-hot来表示,那么我们就用1w维的向量来表示它们,但是如果用了word2vec下面这种方法,我们只需要几百维就可以表示所有的词。
2.word2vec的简介
两种算法
1.Skip-grams (SG)
给定某个位置的单词,预测左右两边的词
2.Continuous Bag of Words (CBOW)
从该单词左右两边的词预测中间的词
两种训练的算法(为了加快训练速度)
1.Hierarchical softmax
2.Negative sampling
3. Skip-grams与Continuous Bag of Words (CBOW)
下面是Skip-grams 的演示图,CBOW应该也很容易想出来
$
Figure 1. Skip-grams 的演示图
4.以CBOW为例介绍Hierarchical softmax算法
接下来介绍一下Hierarchical softmax算法
Hierarchical softmax就是以词表中的所有单词,例如维基百科中所有出现的词,以词频为权重来构建哈夫曼树,不懂哈夫曼树的可以百度或者看这篇文章。叶子节点就代表每一个词,而非叶子节点代表了一类词(有点抽象,后面会看到每个词在经过非叶子节点时都做了类似逻辑归回的分类,把词归类于左右子节点可以看做是归于不同类, 如下图中的9结点可以代表关于足球的一类词,14结点代表一种人的状态)。
从根节点出发,到达指定叶子节点的路径是唯一的。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。
Figure 2. 哈弗曼树图 图片来源[1]
图中的叶子节点假如有V个,那么非叶子节点肯定是|V|-1个。以足球为例,从根节点到该叶子节点要经过的路径长度为
每经过一次非叶子结点,就相当于对词进行一次分类,所以从根节点出发,要到达巴西叶子节点,需要经过
整个模型分三层,首先输入层是所有其他附近的词向量,记为
其中d(w,j)=0代表负类, d(w, j)=1代表正类
所以在给定context的情况下输出词为w的概率就相当于从根节点一直被分类到叶子节点的过程。假设window_size为m,用式子表示如下
=
模型对语料中的全部词串计算概率值做连乘得到似然函数,再取对数得到对数似然 L, 假设语料库是有S个句子组成的一个句子序列(顺序不重要),整个语料库有V个词,对数似然函数就会构建成下面的样子
然后我们便可以对上式用最大似然法来求取参数。一般是使用随机梯度下降法来进行参数的更新。具体解法可参考文献[2]. 还有不明白为什么用哈夫曼树算出的结果跟条件概率相同的话,也可以参考文献[2]
5.以CBOW为例介绍Negative sampling
Negative sampling我个人的理解就是对于一篇文章中的词,我们先计算出每个词的词频(词出现的次数/文章的字数),然后将这些词根据词频的大小用一条0-1的线段来表示,词频大的占据的长度就较长,词频小的占据的长度就小。接下来将M个点均匀分布到这条线段上。这时候我们开始生成一个1-M的随机数,假设抽到3,我们就看3对应的位置属于哪一个词,如果是‘足球’,我们就忽略,如果不是那我们就记录下来,定义为负类,一般选5个即可。
接下来就是如何训练了,首先我们把足球上下文的词向量和求出来记为
关于这个式子的随机梯度推导,可以看这篇文章:word2vec 中的数学原理详解(五)基于 Negative Sampling 的模型。
参考文献
[1] 深度学习word2vec笔记之算法篇 falao_beiliu
[2] [Word2Vec学习笔记(四)——Negative Sampling 模型] Kevin_Duan
[3] DL4NLP——词表示模型(三)word2vec(CBOW/Skip-gram)的加速
[4] word2vec 中的数学原理详解 皮果提
- word2vec简要教程
- Word2Vec教程
- Word2Vec教程
- Gensim Word2vec 使用教程
- word2vec安装使用教程
- Gensim Word2vec 使用教程
- Gensim Word2vec 使用教程
- JFreeChart简要教程
- ADS简要教程
- JSTL简要教程
- 正则表达式简要教程
- HTML5 CSS3简要教程
- HTML5 CSS3简要教程
- weka简要教程
- MPI搭建简要教程
- git 简要教程
- CGContextRef使用简要教程
- Docker简要教程
- Java多线程____wait(), notify(), notifyAll()等方法介绍
- row_number() over(partition by a order by b desc) 用法
- 电话号码正则表达式
- iptables & physdev-is-in & physdev-is-out -- net.bridge.bridge-nf-call-iptables对Netfilter中数据包的影响
- 华为软件开发云发布管理测评报告
- word2vec简要教程
- POJ 3179 Corral the Cows 笔记
- 51nod 1962 区间计数
- 解决按Home键后再点击icon图标程序重新启动问题
- 面向对象程序设计六大原则-里氏替换原则
- Ubuntu 在更改错误路径之后,导致终端命令行失效
- DevOps工程师成长秘籍
- init.rc的语法分析
- 使用composer安装Laravel