skip-gram 学习笔记
关于skip-gram
skip-gram 是给定中心词预测周围词
例如,给定一句话 I am working on NLP project, it is interesting.
设定滑动窗口为5的话
分别给定中心词 working, on, NLP, project, it, 来预测中心词前后的两个周围词。
那么目标函数就是
maxmum( P(i|working) * P(am|working) * P(on|working) * P(NLP|working))
令其为A, 那最终的目标函数就是 argmaxθA(θ)B(θ)C(θ)D(θ)为什么CBOW 不如skip-gram 模型好呢?
CBOW 相当于是给定周围词,来预测中心词。也例如给定滑动窗口为5,给定第1 2 4 5 个词,来预测中间第3 个词。
skip-gram 则是给定第2个词,来预测第1 2 4 5 个词。
首先,skip-gram model 中样本量是远大于CBOW 的。(每个样本就看做是一个条件概率P(W1|W3))
其次,skip-gram 的训练更难,其泛化性、会更好。skip-gram 的表达以及公式表示
参数θ = {u,v}
其中,u 和v 是shape 相同的矩阵,行 是词库大小,列 是词向量维度。也就是一行代表一个词。
那,为什么要设置两个向量呢,一个(v)用来表示中心词,一个(u)用来表示周围词。
所以现在的问题就是,怎样才能把P(W1|W3) 表示成 f(u, v) 呢?
为了最大化P(W1|W3) ,那就要求其相似度越高 (为啥)。
而文本相似度,就是向量的内积。那就好表示了,也就是 u w i ∗ v w j u_{w_i} * v_{w_j} uwi∗vwj
为了改成概率的形式,增加一个softmax,变成
P ( w i ∣ w j ; θ ) = e u w i ∗ v w j / ∑ C ∈ 词 库 e u C ∗ v w j P(w_i|w_j;θ)=e^{u_{w_i}*v_{w_j}}/\sum_{C∈词库}e^{u_{C} * v_{w_j}} P(wi∣wj;θ)=euwi∗vwj/∑C∈词库euC∗vwj
这样就把内积转换成了向量,相当于做了一个简单的normalization。对skip-gram 的整体的推导。
- 首先,举例,对句子w1w2w3w4w5w6w7w8w9w10 这个句子来说。滑动窗口长度为5,训练过程的损失函数应该是
L = P ( w 1 ∣ w 3 ) ∗ P ( w 2 ∣ w 3 ) ∗ P ( w 4 ∣ w 3 ) ∗ P ( w 5 ∣ w 3 ) ∗ P ( w 2 ∣ w 4 ) ∗ P ( w 3 ∣ w 4 ) ∗ P ( w 5 ∣ w 4 ) ∗ P ( w 6 ∣ w 4 ) ∗ P ( w 3 ∣ w 5 ) ∗ P ( w 4 ∣ w 5 ) ∗ P ( w 6 ∣ w 5 ) ∗ P ( w 7 ∣ w 5 ) ∗ P ( w 4 ∣ w 6 ) ∗ P ( w 5 ∣ w 6 ) ∗ P ( w 7 ∣ w 6 ) ∗ P ( w 8 ∣ w 6 ) ∗ P ( w 5 ∣ w 7 ) ∗ P ( w 6 ∣ w 7 ) ∗ P ( w 8 ∣ w 7 ) ∗ P ( w 9 ∣ w 7 ) ∗ P ( w 6 ∣ w 8 ) ∗ P ( w 7 ∣ w 8 ) ∗ P ( w 9 ∣ w 8 ) ∗ P ( w 1 0 ∣ w 8 ) L=P(w_1|w_3)*P(w_2|w_3)*P(w_4|w_3)*P(w_5|w_3)*P(w_2|w_4)*P(w_3|w_4)*P(w_5|w_4)*P(w_6|w_4)*P(w_3|w_5)*P(w_4|w_5)*P(w_6|w_5)*P(w_7|w_5)*P(w_4|w_6)*P(w_5|w_6)*P(w_7|w_6)*P(w_8|w_6)*P(w_5|w_7)*P(w_6|w_7)*P(w_8|w_7)*P(w_9|w_7)*P(w_6|w_8)*P(w_7|w_8)*P(w_9|w_8)*P(w_10|w_8) L=P(w1∣w3)∗P(w2∣w3)∗P(w4∣w3)∗P(w5∣w3)∗P(w2∣w4)∗P(w3∣w4)∗P(w5∣w4)∗P(w6∣w4)∗P(w3∣w5)∗P(w4∣w5)∗P(w6∣w5)∗P(w7∣w5)∗P(w4∣w6)∗P(w5∣w6)∗P(w7∣w6)∗P(w8∣w6)∗P(w5∣w7)∗P(w6∣w7)∗P(w8∣w7)∗P(w9∣w7)∗P(w6∣w8)∗P(w7∣w8)∗P(w9∣w8)∗P(w10∣w8)
最终应求L 的最大值。 - 现在来进行一般化。
对于n篇文档 d o c 1 , d o c 2 , . . . d o c n doc_1,doc_2,...doc_n doc1,doc2,...docn,其合并为一整个text,那么整个语料库则可以表示为 T e x t = w 1 , w 2 , w 3 , . . . w N Text={w_1,w_2,w_3,...w_N} Text=w1,w2,w3,...wN,其中,每个w 表示一个单词。
那么目标函数应该是,对于给定的滑动窗口,遍历text 中的每一个中心词,来最大化 P ( w 边 ∣ w 中 ) P(w_边|w_中) P(w边∣w中)。具体表示如下:
L = arg max θ ∏ w ∈ 整 个 文 档 ∏ c ∈ 滑 动 窗 口 e u c ∗ v w / ∑ c ′ ∈ 词 库 e u c ′ ∗ v w L=\displaystyle\argmax_θ\displaystyle\prod_{w∈整个文档}\displaystyle\prod_{c∈滑动窗口}{e^{u_c*v_w}/\sum_{c'∈词库}e^{u_{c'} * v_w}} L=θargmaxw∈整个文档∏c∈滑动窗口∏euc∗vw/c′∈词库∑euc′∗vw
解释:前边的连乘是将整个文档连乘,后边的连乘是滑动窗口的连乘,后边的计算时加了softmax 的概率
连乘加log后变成连加,log 后,变成:
L = arg max θ ∑ w ∈ 整 个 文 档 ∑ c ∈ 滑 动 窗 口 u c ∗ v w − l o g ∑ c ′ ∈ 词 库 e u c ′ ∗ v w L=\displaystyle\argmax_θ\displaystyle\sum_{w∈整个文档}\displaystyle\sum_{c∈滑动窗口}{u_c*v_w - log\sum_{c'∈词库}e^{u_{c'} * v_w}} L=θargmaxw∈整个文档∑c∈滑动窗口∑uc∗vw−logc′∈词库∑euc′∗vw
这个是最终版的目标函数。- 目标函数中,有一个 l o g ∑ log\sum log∑,这里不好解决。
- 目标函数中,有一个 ∑ c ′ ∈ 词 库 e u c ′ ∗ v w \sum_{c'∈词库}e^{u_{c'} * v_w} ∑c′∈词库euc′∗vw,这个太大了,特别费时。
怎么解决呢?
- 怎么解决第2点的问题呢?
nagetive sampling
其实吧好像没有啥好方法,就不能用这个方法了。采用另外的一种方式。 - 新的方式:
- 对于句子w1w2w3w4w5w6w7w8w9w10 来说。
对于w2 这个单词来说,w1 和w3 是它的上下文。w5等就不是它的上下文了。那么对于滑动窗口为一,
P ( D = 1 ∣ w 1 , w 3 ) P(D=1|w_1,w_3) P(D=1∣w1,w3) 是w1 和w3 作为上下文出现的概率
P ( D = 1 ∣ w 1 , w 4 ) P(D=1|w_1,w_4) P(D=1∣w1,w4) 是 w1 和w4 没有作为上下文出现的概率。 - 那么我们期望,对于任意两个单词 w i , w j {w_i},{w_j} wi,wj如果是上下文,那么 P ( D = 1 ∣ w i , w j ) P(D=1|{w_i},{w_j}) P(D=1∣wi,wj)越大越好,如果任意两个单词 w i , w j {w_i},{w_j} wi,wj如果不是是上下文,那么 P ( D = 0 ∣ w i , w j ) P(D=0|{w_i},{w_j}) P(D=0∣wi,wj)越大越好.
这样,这个问题就可以用逻辑回归的方式来考虑了。逻辑回归的sigmoid 函数 σ = 1 / 1 + e x p ( x w t ) σ=1/1+exp(x^{wt}) σ=1/1+exp(xwt)
P ( D = 1 ∣ w i , w j ) = 1 1 + e x p ( − U w i , V w j ) P(D=1|{w_i},{w_j})=\frac1{1+exp(-{U_{w_i}, V_{w_j}})} P(D=1∣wi,wj)=1+exp(−Uwi,Vwj)1
P ( D = 0 ∣ w i , w j ) = 1 − P ( D = 1 ∣ w i , w j ) P(D=0|{w_i},{w_j})=1-P(D=1|{w_i},{w_j}) P(D=0∣wi,wj)=1−P(D=1∣wi,wj) - 那么新的目标函数L 可以写成:对于任意每两个词,其中,w 是中心词,c 是上下文词,
L = arg max θ ∏ ( w , c ) ∈ D P ( D = 1 ∣ w , c ; θ ) ∏ ( w , c ) ∈ D N P ( D = 1 ∣ w , c ; θ ) L=\displaystyle\argmax_θ\displaystyle\prod_{(w,c)∈D}P(D=1|w,c;θ)\displaystyle\prod_{(w,c)∈D^N}P(D=1|w,c;θ) L=θargmax(w,c)∈D∏P(D=1∣w,c;θ)(w,c)∈DN∏P(D=1∣w,c;θ)
= arg max θ ∏ 1 1 + e x p ( − U c , V w ) ∏ ( 1 − 1 1 + e x p ( − U c , V w ) ) =\displaystyle\argmax_θ\displaystyle\prod\frac1{1+exp(-{U_c, V_w})}\displaystyle\prod(1-\frac1{1+exp(-{U_c, V_w})}) =θargmax∏1+exp(−Uc,Vw)1∏(1−1+exp(−Uc,Vw)1)
加log 后,
= arg max θ ∑ log σ ( U c , V w ) + ∑ log σ ( − U c , V w ) =\displaystyle\argmax_θ\sum\log\sigma(U_c,V_w)+\sum\log\sigma(-U_c,V_w) =θargmax∑logσ(Uc,Vw)+∑logσ(−Uc,Vw)
但是新的问题出现了,就是一个语料库里,正样本的数量是远远小于负样本的。
那现在的主要工作,就是怎样降低负样本的量。所以只需要考虑一小部分的负样本就可以了。叫negative sampling - 对于每一个正样本,采集n个负样本。
- 对于句子w1w2w3w4w5w6w7w8w9w10 来说。
- 首先,举例,对句子w1w2w3w4w5w6w7w8w9w10 这个句子来说。滑动窗口长度为5,训练过程的损失函数应该是
skip-gram 学习笔记相关推荐
- 《自然语言处理学习之路》02 词向量模型Word2Vec,CBOW,Skip Gram
本文主要是学习参考莫烦老师的教学,对老师课程的学习,记忆笔记. 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟. 零.吃水不忘挖井人 一.计算机如何实现对于词语的理解 1.1 万物数字化 1.2 ...
- gram矩阵的性质_第十七课:正交矩阵和GramSchmidt正交化——MIT线性代数课程学习笔记...
公众号关注 "DL_NLP" 设为 "星标",重磅干货,第一时间送达! ◎ 原创 | 深度学习算法与自然语言处理 ◎ 作者 | 丁坤博 一. 知识概要 这一节 ...
- 吴恩达深度学习之五《序列模型》学习笔记
一.循环序列模型 1.1 为什么选择序列模型 如图所示是一些序列数据的例子 1.2 数学符号 如图所示,我们用 表示一个序列的第 t 个元素,t 从 1 开始 NLP中一个单词就是一个元素(又称时间 ...
- 吴恩达深度学习笔记(四)
吴恩达深度学习笔记(四) 卷积神经网络CNN-第二版 卷积神经网络 深度卷积网络:实例探究 目标检测 特殊应用:人脸识别和神经风格转换 卷积神经网络编程作业 卷积神经网络CNN-第二版 卷积神经网络 ...
- Brian2学习笔记
Brian2学习笔记 前言 运行环境 写点有用的 没用的 简介 引用 安装 python编译安装 pip安装 C++ code generation的安装要求 测试 使用教程 Tutorial par ...
- SVO学习笔记(一)
SVO学习笔记(一) 这篇文章 Frame Featuredetection Featrue_matcher 三角测量求深度 特征匹配 非线性优化寻找匹配特征 极线搜索匹配特征 总结 这篇文章 一个 ...
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)
Crypto++入门学习笔记(DES.AES.RSA.SHA-256) 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypt ...
- pytorch 学习笔记目录
1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...
- glibc-2.23学习笔记(一)—— malloc部分源码分析
glibc-2.23学习笔记(一)-- malloc部分源码分析 搭建Glibc源码调试环境 1.下载并解压glibc源码 2.配置gdb 3.编译测试程序 第一次调用 源码分析 __libc_mal ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
最新文章
- Java8 Stream应用:Map合并、过滤、遍历、values int求和等
- Python pandas用法
- 在 libevent 中使用 MariaDB(MySQL)
- vmware 虚拟机控制台打开慢的解决方案
- IDEA中如何彻底删除项目
- golang 切片的三种简单使用方式及区别
- python pip安装模块失败的原因
- 论项目团队情商与项目团队绩效(转)
- 北斗导航 | NED(北东地)转ECEF(地心地固)或ECEF转NED(Matlab源代码)
- activiti 5.21工作流规则引擎扩展(businessRuleTask)
- 代码需要不断进化和改变
- matlab中的nlinfit,matlab中nlinfit问题!!!!!!!!!!!!
- 为什么重写equals时必须重写hashCode方法?
- oracle 查看锁表情况及数据库连接情况
- Python命令行版本的员工管理系统
- 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
- CAD二次开发——cad查看对象C#:MdgDbg.dll
- Model-Free Adaptive Predictive Control
- 表白神器!程序员七夕情人节源码合集
- 如何实现今日头条跳转到微信?
热门文章
- git常用命令之git push使用说明
- 小白装系统(超详细)
- 利用更快的r-cnn深度学习进行目标检测
- Kotlin 协程,怎么开始的又是怎么结束的?原理讲解!
- SteamVR 2.x 手柄拾取3D物体(13)
- 关于使用vue.js的模板渲染时出现一瞬间的设置的模板的解决方案
- https://www.jianshu.com/p/43d04d8baaf7
- 【数据结构与算法】之深入解析“铺瓷砖”的求解思路与算法示例
- could和may区别请求_can和may的区别及用法
- U74LVC1G07G-SOT353R-TG