关于skip-gram

  1. 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(θ)

  2. 为什么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 的训练更难,其泛化性、会更好。

  3. 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。

  4. 对skip-gram 的整体的推导。

    1. 首先,举例,对句子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(w1​0∣w8​)
      最终应求L 的最大值。
    2. 现在来进行一般化。
      对于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=θargmax​w∈整个文档∏​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=θargmax​w∈整个文档∑​c∈滑动窗口∑​uc​∗vw​−logc′∈词库∑​euc′​∗vw​
      这个是最终版的目标函数。

      1. 目标函数中,有一个 l o g ∑ log\sum log∑,这里不好解决。
      2. 目标函数中,有一个 ∑ c ′ ∈ 词 库 e u c ′ ∗ v w \sum_{c'∈词库}e^{u_{c'} * v_w} ∑c′∈词库​euc′​∗vw​,这个太大了,特别费时。
        怎么解决呢?
    3. 怎么解决第2点的问题呢?
      nagetive sampling
      其实吧好像没有啥好方法,就不能用这个方法了。采用另外的一种方式。
    4. 新的方式:
      1. 对于句子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 没有作为上下文出现的概率。
      2. 那么我们期望,对于任意两个单词 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​)
      3. 那么新的目标函数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
      4. 对于每一个正样本,采集n个负样本。

skip-gram 学习笔记相关推荐

  1. 《自然语言处理学习之路》02 词向量模型Word2Vec,CBOW,Skip Gram

    本文主要是学习参考莫烦老师的教学,对老师课程的学习,记忆笔记. 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟. 零.吃水不忘挖井人 一.计算机如何实现对于词语的理解 1.1 万物数字化 1.2 ...

  2. gram矩阵的性质_第十七课:正交矩阵和GramSchmidt正交化——MIT线性代数课程学习笔记...

    公众号关注  "DL_NLP" 设为 "星标",重磅干货,第一时间送达! ◎ 原创 | 深度学习算法与自然语言处理 ◎ 作者 | 丁坤博 一. 知识概要 这一节 ...

  3. 吴恩达深度学习之五《序列模型》学习笔记

    一.循环序列模型 1.1 为什么选择序列模型 如图所示是一些序列数据的例子 1.2 数学符号 如图所示,我们用  表示一个序列的第 t 个元素,t 从 1 开始 NLP中一个单词就是一个元素(又称时间 ...

  4. 吴恩达深度学习笔记(四)

    吴恩达深度学习笔记(四) 卷积神经网络CNN-第二版 卷积神经网络 深度卷积网络:实例探究 目标检测 特殊应用:人脸识别和神经风格转换 卷积神经网络编程作业 卷积神经网络CNN-第二版 卷积神经网络 ...

  5. Brian2学习笔记

    Brian2学习笔记 前言 运行环境 写点有用的 没用的 简介 引用 安装 python编译安装 pip安装 C++ code generation的安装要求 测试 使用教程 Tutorial par ...

  6. SVO学习笔记(一)

    SVO学习笔记(一) 这篇文章 Frame Featuredetection Featrue_matcher 三角测量求深度 特征匹配 非线性优化寻找匹配特征 极线搜索匹配特征 总结 这篇文章  一个 ...

  7. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

    Crypto++入门学习笔记(DES.AES.RSA.SHA-256) 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypt ...

  8. pytorch 学习笔记目录

    1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...

  9. glibc-2.23学习笔记(一)—— malloc部分源码分析

    glibc-2.23学习笔记(一)-- malloc部分源码分析 搭建Glibc源码调试环境 1.下载并解压glibc源码 2.配置gdb 3.编译测试程序 第一次调用 源码分析 __libc_mal ...

  10. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

最新文章

  1. Java8 Stream应用:Map合并、过滤、遍历、values int求和等
  2. Python pandas用法
  3. 在 libevent 中使用 MariaDB(MySQL)
  4. vmware 虚拟机控制台打开慢的解决方案
  5. IDEA中如何彻底删除项目
  6. golang 切片的三种简单使用方式及区别
  7. python pip安装模块失败的原因
  8. 论项目团队情商与项目团队绩效(转)
  9. 北斗导航 | NED(北东地)转ECEF(地心地固)或ECEF转NED(Matlab源代码)
  10. activiti 5.21工作流规则引擎扩展(businessRuleTask)
  11. 代码需要不断进化和改变
  12. matlab中的nlinfit,matlab中nlinfit问题!!!!!!!!!!!!
  13. 为什么重写equals时必须重写hashCode方法?
  14. oracle 查看锁表情况及数据库连接情况
  15. Python命令行版本的员工管理系统
  16. 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
  17. CAD二次开发——cad查看对象C#:MdgDbg.dll
  18. Model-Free Adaptive Predictive Control
  19. 表白神器!程序员七夕情人节源码合集
  20. 如何实现今日头条跳转到微信?

热门文章

  1. git常用命令之git push使用说明
  2. 小白装系统(超详细)
  3. 利用更快的r-cnn深度学习进行目标检测
  4. Kotlin 协程,怎么开始的又是怎么结束的?原理讲解!
  5. SteamVR 2.x 手柄拾取3D物体(13)
  6. 关于使用vue.js的模板渲染时出现一瞬间的设置的模板的解决方案
  7. https://www.jianshu.com/p/43d04d8baaf7
  8. 【数据结构与算法】之深入解析“铺瓷砖”的求解思路与算法示例
  9. could和may区别请求_can和may的区别及用法
  10. U74LVC1G07G-SOT353R-TG