Классификация текста: LSTM против прямой связи - PullRequest
1 голос
/ 07 апреля 2020

Я тренирую модель классификации текста.

Задание : по описанию укажите квантификатор

Для ex 1) Это поле содержит общую сумму выручки в долларах США -> сумма

2) Здесь указан код города -> код

3) общая сумма депозита составляет 34 -> сумма

4) содержит информацию о имени -> имя

5) содержит last nme -> name

Для данной задачи имеет смысл смоделировать это как задачу классификации текста.

Я использовал два подхода

Подход 1:

a) Использовать вложение перчаток, чтобы получить векторное представление

b) Использовать NN обратной связи для классификации данных в 1 из 11 возможных классов вывода


    model = Sequential()
    model.add(layers.Embedding(vocab_size, embedding_dim, 
                               weights=[embedding_matrix], 
                               input_length=maxlen, 
                               trainable=False))
    model.add(layers.GlobalMaxPool1D())
    model.add(layers.Dense(200, activation='relu'))
    model.add(layers.Dense(100, activation='relu'))
    model.add(layers.Dense(50, activation='relu'))
    model.add(layers.Dense(11, activation='softmax'))
    model.compile(optimizer='adam',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    model.summary()

Этот подход дает мне 80% точности теста

Подход 2: Я планирую использовать LSTM, потому что они также могут изучать контекст и из предыдущих слов


    model = Sequential()
    model.add(layers.Embedding(vocab_size, embedding_dim, 
                               weights=[embedding_matrix], 
                               input_length=maxlen, 


    model.add(layers.LSTM(100,dropout=0.2, recurrent_dropout=0.2, activation='tanh'))
    model.add(layers.Dense(11, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])

    epochs = 100
    batch_size = 32

    model.summary()

Проблема не зависит от того, что я делаю, LSTM никогда не достигает отметки точности выше 40%. Это застревает на этом от начала до конца.

Morevoer, прямая связь net (подход 1) может обнаруживать простые случаи, такие как «общая сумма составляет 6 долларов США», но LSTM не может получить даже это правильное значение и прогнозирует его как Другое

My Вопрос в том, почему LSTM (с добавленной силой контекста) не может улучшить обратную связь. Что я должен сделать, чтобы улучшить это.

1 Ответ

1 голос
/ 07 апреля 2020

Не могу точно сказать, почему, но я предполагаю, что размер выборки / качество данных. Чем глубже обучение, тем больше данных ему нужно и тем более оно чувствительно к небольшим искажениям в данных обучения. Если у вас небольшой набор данных, возможно, менее сложная модель будет работать лучше. enter image description here

Другая возможность состоит в том, что LSTM очень сильны в аргументации на основе контекста и позиции, и из того, что я почерпнул о вашей задаче, кажется, что вы ищете больше ключевых слов и меньше для отношения на расстоянии. Это также может объяснить, почему прямая связь работает лучше

...