Понимание плотного слоя после встраивания слоя в Keras - PullRequest
1 голос
/ 21 июня 2019

У меня возникли проблемы с пониманием функционирования слоя Dense, обрабатывающего текстовые последовательности. Давайте представим этот простой случай: у меня есть два предложения, и я присваиваю целые слова:

Sentence 1  I like cheese
Sentence 2  I like milk 

Sentence to sequence
Seq1    [1, 2, 3]
Seq2    [1, 2, 4]

Затем мы берем входные данные (целочисленные последовательности) и добавляем их в слой Embedding (случайные числа в 2 измерениях):

Embedding matrix        

Term    Index   Vector
I       1       [0.2 0.6]
like    2       [0.7 0.1]
cheese  3       [0.4 0.5]
milk    4       [0.1 0.9]

Следующим шагом является выравнивание последовательностей с вложениями, чтобы сделать их 1D:

    Sequence to Embedding
    Seq1    [[0.2 0.6] [0.7 0.1] [0.4 0.5]]
    Seq2    [[0.2 0.6] [0.7 0.1] [0.1 0.9]]

    Flatten to 1D for Dense layer
    Seq1    [0.2 0.6 0.7 0.1 0.4 0.5]
    Seq2    [0.2 0.6 0.7 0.1 0.1 0.9]

Теперь мы можем использовать эти массивы в качестве входных данных для слоя Dense, что-то вроде этого:

Плотный слой из 3 единиц с входной длиной последовательности. Точечный продукт входной последовательности с матрицей весов плотного слоя.

Плотный слой

    Dense layer                                             

    Seq1    X1  X2  X3  X4  X5  X6  ·   WH                   =     ZH   …
           0.2 0.6 0.7 0.1 0.4 0.5  ·   W1,1    W1,2    W1,3       +    
                                        W2,1    W2,2    W2,3        
                                        W3,1    W3,2    W3,3       BH   
                                        W4,1    W4,2    W4,3            
                                        W5,1    W5,2    W5,3            
                                        W6,1    W6,2    W6,3

    Seq2    X1  X2  X3  X4  X5  X6  ·   WH                   =     ZH   …
           0.2 0.6 0.7 0.1 0.1 0.9  ·   W1,1    W1,2    W1,3       +    
                                        W2,1    W2,2    W2,3        
                                        W3,1    W3,2    W3,3       BH   
                                        W4,1    W4,2    W4,3            
                                        W5,1    W5,2    W5,3            
                                        W6,1    W6,2    W6,3            

Проблема здесь в том, что каждая особенность соответствует одной части последовательности, X5 и X6 принадлежат вектору последнего слова. Как правило, при вводе Bag of Words каждый X присваивается слову , и если слово присутствует, оно получает вес (например, после TF-IDF). Также с числовыми данными Xi представляет особенность (цена, температура, ВВП ...), и это всегда так. Здесь , однако, X не присваивается слову и зависит от порядка . Посмотрите X5 и X6, как они меняются, потому что слова разные.

Веса в матрице весов плотного слоя назначаются элементу (Xi) , а затем они оптимизируются.


Мой вопрос:

Как это работает, если порядок слов постоянно меняется, а Xi относится к разным словам?

Я понимаю, что LSTM и другие рекуррентные сети могут обрабатывать динамическое упорядочение, но Мне показалось, что плотные слои не могут работать с последовательным текстом и что ввод должен быть зафиксирован с помощью One Hot vector или TF-IDF для пример. Тем не менее, я видел примеры моделей с предложениями для целочисленных, встраиваемых, плоских и плотных архитектур слоев, плюс я попробовал себя, и я вижу, что это работает ... Я был бы очень признателен за некоторые объяснения или исправления в моем потоке мышления. Спасибо!

...