zoukankan      html  css  js  c++  java
  • [DeeplearningAI笔记]序列模型2.7负采样Negative sampling

    5.2自然语言处理

    觉得有用的话,欢迎一起讨论相互学习~

    我的微博我的github我的B站

    吴恩达老师课程原地址

    2.7 负采样 Negative sampling

    Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2013:3111-3119.

    • skip-gram模型可以构造一个监督学习任务,把上下文映射到目标词上,以学习一个实用的词嵌入,但是他的缺点是softmax计算起来很慢。本节将会介绍了一个经过优化的学习问题叫做 负采样,其能够做到和 skip-gram 相似的功能但是使用起来更加高效。

    样本生成方法

    • 例句: I want a glass of orange juice to go along with my cereal 构造一个新的监督学习问题,给定一对单词 orange 和 juice ,预测这是否是一对 上下文词-目标词 (context-target) ,在这个样本中,orange 和 juice 就是一个正样本。 然而对于 orange 和 king 就是一个负样本。
      • 正样本 的生成是采样得到一个上下文词和一个目标词。其中先在句中随机均匀的选取一个单词作为上下文词。然后在其左右两边一定词距内随机选择一个单词作为目标词。 并且将 标签 设置为1.
      • 负样本 的生成是使用和正样本一样的上下文词,然后从字典中随机选取一个单词构成一个组合。并且将 标签 设置为0. 其中同一 上下文词 生成 K个 负样本
    context word target
    orange juice 1
    orange king 0
    orange book 0
    orange the 0
    orange of 0
    • 注意:正负样本 的区别仅取决于单词对的来源,即是 of 也在 orange 的设定词距之内,但是作为随机从字典中选取的单词, of - orange 单词对仍然被标记为负样本。
    • 在本次提出的算法中 输入数据x 将被设定为 context-word 的单词对,预测结果y 将被设置为 target 算法的目的即是区分 样本采样的来源
    • 论文作者推荐,小数据集的话 K 被设置为5-20, 而对于较大的数据集, K 被设置为2-5.即数据集越小 K 值被设定的越大。

    模型学习原理

    • Skip-grams 中softmax函数定义:

    [P(target|content)=frac{e^{ heta_{t}^{T}e_{c}}}{sum^{10000}_{j=1}{e^{ heta^{T}_{j}e_{c}}}} ]

    • 本节算法定义 输入Context为c,Word为t,定义输出Target为y
    context word target
    c t y
    (x_1) (x_2) y
    orange juice 1
    orange king 0
    orange book 0
    orange the 0
    orange of 0
    • 损失函数 定义为给定 样本单词对 的情况下,(y=1) 的概率:
      • 使用(e_{c})表示context的词嵌入向量 其中( heta_{t})表示每个样本对应的参数.
      • [P(y=1|c,t)=sigma( heta^{T}_{t}e_{c}) ]

      • 对于每个正样本都有 K 个负样本来训练一个类似logisitic回归的模型。

    神经网络算法流程

    1. 如果输入词是 orange ,即词典中的第6257个词,将其使用one-hot向量表示 (o_{6257}),
    2. 再传递给E(词嵌入向量矩阵),通过两者相乘得到 orange 的嵌入向量 (e_{6357})
    3. (e_{6357})是一个1W维(字典中总单词数量)的向量,可以看成是1W个可能的logistic回归分类问题,其中一个是用来判断目标词是否是 juice 的分类器,当然也有用来判断 king,book,the... 等词汇是否是目标词的分类器。但是每次迭代不都是训练所有的样本, 每次迭代只会训练一个正样本和随机选取的 K 个负样本
    • 此算法将需要计算10000个维度的softmax问题转化为10000个二分类问题,每一个都易于计算,每次迭代要做的只是训练其中的 K+1 个样本,其中一个正样本和随机选取的同一个Context的 K 个负样本。
    • 此算法被称为 负采样 , 因为在挑选一个 正样本 的同时,随机生成 K个负样本

    负样本采样方法

    • 仅考虑单词在 语料库 中出现的频率,会导致负样本中 the, of, and ... 等介词出现的频率过高
    • 仅考虑单词在 词汇表 中出现的频率,即在 词汇表 中随机采样,分母是词汇表中的总词数,这样采样十分没有代表性。
    • 论文提出采样公式为:

    [P(w_{i})=frac{f(w_{i})^{3/4}}{sum^{10000}_{j=1}f(w_{j})^{3/4}} ]

    其中(f(w_{i}))表示单词在语料库中的词频。

  • 相关阅读:
    python注释方法以及编码问题
    python数据类型和变量
    JavaScript必须了解的知识点总结。
    javaScript语法总结
    美图WEB开放平台环境配置
    变点问题的统计推新及其在全融中的应用 谭常春
    Structural breaks in time series
    多种单位根检验法的比较研究 房林邹卫星
    1-出口数据的平稳性分析
    时间序列中的结构突变与单位根检验
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/9556278.html
Copyright © 2011-2022 走看看