Embedding

    • class Embedding(size, is_sparse=False, is_distributed=False, padding_idx=None, param_attr=None, dtype='float32')[源代码]

    该接口用于构建 的一个可调用对象,具体用法参照 代码示例 。其根据input中的id信息从embedding矩阵中查询对应embedding信息,并会根据输入的size (vocab_size, emb_size)和dtype自动构造一个二维embedding矩阵。

    注:input中的id必须满足 ,否则程序会抛异常退出。

    • 参数:
      • size (tuple|list) - embedding矩阵的维度。必须包含两个元素,第一个元素为vocab_size(词表大小), 第二个为emb_size(embedding层维度)。
      • is_sparse (bool) - 是否使用稀疏的更新方式,这个参数只会影响反向的梯度更新的性能,sparse更新速度更快,推荐使用稀疏更新的方式。但某些optimizer不支持sparse更新,比如 、 AdamaxOptimizer 、 、 FtrlOptimizer 、 、LarsMomentumOptimizer ,此时is_sparse必须为False。默认为False。
      • is_distributed (bool) - 是否使用分布式的方式存储embedding矩阵,仅在多机分布式cpu训练中使用。默认为False。
      • padding_idx (int|long|None) - padding_idx需在区间[-vocab_size, vocab_size),否则不生效,padding_idx<0时,padding_idx会被改成vocab_size + padding_idx,input中等于padding_index的id对应的embedding信息会被设置为0,且这部分填充数据在训练时将不会被更新。如果为None,不作处理,默认为None。
      • param_attr (ParamAttr) - 指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。具体用法请参见 。此外,可以通过 param_attr 参数加载用户自定义或预训练的词向量。只需将本地词向量转为numpy数据格式,且保证本地词向量的shape和embedding的 参数一致,然后使用 NumpyArrayInitializer 进行初始化,即可实现加载自定义或预训练的词向量。详细使用方法见代码示例2。
      • dtype (str|core.VarDesc.VarType) - 输出Tensor或LoDTensor的数据类型,数据类型必须为:float32或float64,默认为float32。

    返回类型:Variable

    1. import paddle.fluid as fluid
    2. import paddle.fluid.dygraph.base as base
    3.  
    4. # 示例 1
    5. inp_word = np.array([[2, 3, 5], [4, 2, 1]]).astype('int64')
    6. inp_word.shape # [2, 3]
    7. dict_size = 20
    8. with fluid.dygraph.guard():
    9. emb = fluid.dygraph.Embedding(
    10. size=[dict_size, 32],
    11. param_attr='emb.w',
    12. is_sparse=False)
    13. static_rlt3 = emb(base.to_variable(inp_word))
    14. static_rlt3.shape # [2, 3, 32]
    15. # 示例 2: 加载用户自定义或预训练的词向量
    16. weight_data = np.random.random(size=(128, 100)) # numpy格式的词向量数据
    17. w_param_attrs = fluid.ParamAttr(
    18. name="emb_weight",
    19. learning_rate=0.5,
    20. initializer=fluid.initializer.NumpyArrayInitializer(weight_data),
    21. trainable=True)
    22. with fluid.dygraph.guard():
    23. emb = fluid.dygraph.Embedding(
    24. size=[128, 100],
    25. param_attr= w_param_attrs,
    26. is_sparse=False)