NCE

class paddle.fluid.dygraph.NCE(num_total_classes, dim, param_attr=None, bias_attr=None, num_neg_samples=None, sampler=’uniform’, custom_dist=None, seed=0, is_sparse=False, dtype=”float32”)[源代码]

该接口用于构建 NCE 类的一个可调用对象,具体用法参照 代码示例 。其中实现了 NCE 损失函数的功能,其默认使用均匀分布进行抽样,计算并返回噪音对比估计( noise-contrastive estimation training loss)。更多详情请参考:Noise-contrastive estimation: A new estimation principle for unnormalized statistical models 参数 :::::::::::

  1. - **num_total_classes** (int) - 所有样本中的类别的总数。
  2. - **dim** (int) - 输入的维度(一般为词嵌入的维度)。
  3. - **sample_weight** (Variable, 可选) - 维度为\[batch_size, 1\],存储每个样本的权重。每个样本的默认权重为1.0。默认值:None
  4. - **param_attr** (ParamAttr, 可选) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr`
  5. - **bias_attr** (ParamAttr, 可选) - 指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr`
  6. - **num_neg_samples** (int, 可选) - 负样本的数量。默认值:10
  7. - **sampler** (str, 可选) 指明采样器的类型,用于从负类别中进行采样。可以是 ``uniform`` ``log_uniform`` ``custom_dist`` 默认值: ``uniform``
  8. - **custom_dist** (float[], 可选) float[] 类型的数据,并且它的长度为 ``num_total_classes`` 。如果采样器类别为 ``custom_dist`` ,则使用此参数。custom_dist\[i\]是第i个类别被取样的概率。默认值:None
  9. - **seed** (int, 可选) 采样器使用的随机种子。默认值:0
  10. - **is_sparse** (bool, 可选) 指明是否使用稀疏更新,如果为True :math:`weight@GRAD` :math:`bias@GRAD` 会变为 SelectedRows。默认值:False
  11. - **dtype** (str, 可选) - 数据类型,可以为"float32""float64"。默认值:"float32"

返回

代码示例

  1. import numpy as np
  2. import paddle.fluid as fluid
  3. window_size = 5
  4. dict_size = 20
  5. label_word = int(window_size // 2) + 1
  6. inp_word = np.array([[1], [2], [3], [4], [5]]).astype('int64')
  7. nid_freq_arr = np.random.dirichlet(np.ones(20) * 1000).astype('float32')
  8. with fluid.dygraph.guard():
  9. words = []
  10. for i in range(window_size):
  11. words.append(fluid.dygraph.base.to_variable(inp_word[i]))
  12. emb = fluid.Embedding(
  13. size=[dict_size, 32],
  14. param_attr='emb.w',
  15. is_sparse=False)
  16. embs3 = []
  17. for i in range(window_size):
  18. if i == label_word:
  19. continue
  20. emb_rlt = emb(words[i])
  21. embs3.append(emb_rlt)
  22. embs3 = fluid.layers.concat(input=embs3, axis=1)
  23. nce = fluid.NCE(
  24. num_total_classes=dict_size,
  25. dim=embs3.shape[1],
  26. num_neg_samples=2,
  27. sampler="custom_dist",
  28. custom_dist=nid_freq_arr.tolist(),
  29. seed=1,
  30. param_attr='nce.w',
  31. bias_attr='nce.b')
  32. wl = fluid.layers.unsqueeze(words[label_word], axes=[0])
  33. nce_loss3 = nce(embs3, wl)

属性

weight

本层的可学习参数,类型为 Parameter

bias

本层的可学习偏置,类型为 Parameter