代码之家  ›  专栏  ›  技术社区  ›  MenorcanOrange

Keras-嵌入层

  •  8
  • MenorcanOrange  · 技术社区  · 7 年前

    input_dim , output_dim input_length

    Embedding(input_dim, output_dim, input_length)
    

    • 输入尺寸 :int>0.词汇量
    • 输出尺寸
    • 输入_长度 :输入序列的长度

    google.com 每个字符由一个整数表示 [5, 2, 2, 5, 8, 3, 4, 1, 2, 9] 75 . 可能的最大字符数为 38 输入尺寸 输出尺寸 ?

    4 回复  |  直到 7 年前
        1
  •  13
  •   Sam - Founder of AceAINow.com    6 年前

    为了将文字用于自然语言处理或机器学习任务,必须首先将其映射到连续向量空间,从而创建 文字向量 文字嵌入

    输入尺寸

    输出尺寸 :文字向量的所需维数。例如,如果output\u dim=100,则每个单词将映射到具有100个元素的向量,而如果output\u dim=300,则每个单词将映射到具有300个元素的向量。

    :序列的长度。例如,如果数据由句子组成,那么这个变量表示一个句子中有多少个单词。由于不同的句子通常包含不同数量的单词,因此通常需要填充序列,使所有句子的长度相等。凯拉斯。预处理。pad_序列方法可用于此( https://keras.io/preprocessing/sequence/

    https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html )提供了一个关于如何使用手套预训练词向量的教程。对于选项2,Keras将随机初始化向量作为默认选项,然后在训练过程中学习最优词向量。

        2
  •  6
  •   Vallie Vaasha    6 年前
    • input\u dim:是要嵌入的词汇表的大小
    • input_length:输入(句子)的最大长度

    如所示 Explain with example: how embedding layers in keras works 你可以把一个句子变成一系列整数(向量或张量)。具有input_长度的向量示例(句子的最大长度为6,如果您的句子更长,则会修剪剩余的单词)

     'This is a text' --> [0 0 1 2 3 4]
     'This is a very long text, my friends' --> [1 2 3 5 6 4]
    

    然后使用keras的嵌入层,可以将这些向量转化为输出深度的嵌入向量。例如,output_dim=3:

    [0 0 1 2 3 4] --> 
    array([[ 0.00251105,  0.00724941, -0.01146401],
       [ 0.00251105,  0.00724941, -0.01146401],
       [ 0.03071865,  0.00953215, -0.01349484],
       [ 0.02962008,  0.04860269, -0.04597988],
       [-0.01875228,  0.03349927, -0.03210936],
       [-0.02512982,  0.04811014,  0.03172458]], dtype=float32)
    

    model.layers[0].get_weights() 
    

    因为嵌入层通常是模型的第一层。在10的情况下,嵌入层包含10个大小为output_dim的向量。注意,第一个元素对应于输入向量中0的映射(0-->[0.00251105,0.00724941,-0.01146401]),第二个对应于1,等等。

    [array([[ 0.00251105,  0.00724941, -0.01146401],
        [ 0.03071865,  0.00953215, -0.01349484],
        [ 0.02962008,  0.04860269, -0.04597988],
        [-0.01875228,  0.03349927, -0.03210936],
        [-0.02512982,  0.04811014,  0.03172458],
        [-0.00569617, -0.02348857, -0.00098624],
        [ 0.01327456,  0.02390958,  0.00754261],
        [-0.04041355,  0.03457253, -0.02879228],
        [-0.02695872,  0.02807242,  0.03338097],
        [-0.02057508,  0.00174383,  0.00792078]], dtype=float32)]
    

    增加input_dim可以映射更大的词汇表,但也可以增加emdebing层的参数数量。参数数量为input\u dim x output\u dim。

    据我所知,这些向量是随机初始化的,并像任何其他层一样使用优化器的算法进行训练。但是,您可以使用不同的算法,如word2vec或预训练向量,如glove( https://nlp.stanford.edu/projects/glove/ ). 其思想是,每个单词将代表空间中的一个独特位置(由其向量描述),您可以对单词的语义(含义)应用一些向量数学。E、 g.W('cheesburger')-W('cheese')=W('hamburger')或W('prince')-W('man')+W('woman')=W('princess')查看更多信息,例如 https://www.oreilly.com/learning/capturing-semantic-meanings-using-deep-learning

        3
  •  2
  •   zimmerrol    7 年前

    keras 文件 layer 您可以看到:

    Embedding(1000, 64, input_length=10)
    #the model will take as input an integer matrix of size (batch, input_length).
    #the largest integer (i.e. word index) in the input should be no larger than 999 (vocabulary size).
    #now model.output_shape == (None, 10, 64), where None is the batch dimension.
    

    通过使用您在帖子中给出的值,您可以尝试掌握此方法的想法,并可以得出以下设置:

    • input_dim=38
    • input_length=75

    output_dim 是一个模型参数,您仍然需要确定(可能需要尝试不同的值以找到最佳值)。

    here

        4
  •  0
  •   Kamil    3 年前

    我很难理解“output\u dim”参数,但作为一个视觉人,我发现这个图像很有帮助。字嵌入将从标记器获得的单个整数值转换为n维数组。例如,单词“cat”可能具有来自标记器的值“20”,但keras的嵌入层可以使用vocab中的所有单词来构建单词嵌入,以确定vocab中所有单词(包括“cat”)之间的关系。它查找“维度”或特征,如“活着的人”、“猫”、“人”、“性别”等。然后单词“cat”具有每个维度/特征的值。“output\u dim”参数只是告诉keras您希望在嵌入矩阵中拥有多少维度/特征。

    enter image description here