Как обучить модель только с помощью слоя Embedded в Keras и без меток - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть текст без каких-либо ярлыков. Просто куча текстовых файлов. И я хочу обучить слой Embedding, чтобы сопоставить слова с векторами внедрения. Большинство примеров, которые я видел до сих пор, выглядят так:

from keras.models import Sequential
from keras.layers import Embedding, Flatten, Dense

model = Sequential()
model.add(Embedding(max_words, embedding_dim, input_length=maxlen))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()
model.compile(optimizer='rmsprop',
    loss='binary_crossentropy',
    metrics=['acc'])
model.fit(x_train, y_train,
    epochs=10,
    batch_size=32,
    validation_data=(x_val, y_val))

Все они предполагают, что слой Embedded является частью более крупной модели, которая пытается предсказать метку. Но в моем случае у меня нет ярлыка. Я не пытаюсь что-либо классифицировать. Я просто хочу обучить отображению слов (точнее целых чисел) встраивать векторы. Но метод fit модели запрашивает x_train и y_train (как в примере, приведенном выше).

Как обучить модель только со слоем Embedded и без меток?

[ОБНОВЛЕНО]

Основываясь на ответе, который я получил от @Daniel Möller, уровень встраивания в Keras реализует контролируемый алгоритм и поэтому не может быть обучен без меток. Первоначально я думал, что это вариант Word2Vec и, следовательно, не нуждается в обучении меткам. Видимо, дело не в этом. Лично я в итоге использовал FastText , который не имеет ничего общего с Keras или Python.

1 Ответ

0 голосов
/ 18 ноября 2018

Имеет ли смысл делать это без метки / цели?

Как ваша модель решит, какие значения в векторах подходят для чего-либо, если нет цели?

Все вложения"обучены" для определенной цели.Если нет цели, нет цели, если нет цели, нет обучения.

Если вы действительно хотите преобразовать слова в векторы без какой-либо цели / цели, у вас есть два варианта:

  • Создание закодированных векторов в горячем виде.Для этого вы можете использовать функцию Keras to_categorical.
  • Используйте предварительно обученное вложение.Есть некоторые доступные, такие как перчатки, вложения от Google и т. Д. (Все они были обучены в какой-то момент для какой-то цели).

Очень наивный подход, основанный на нашем чате, с учетом расстояния до слова

Предупреждение: я действительно ничего не знаю о Word2Vec, но я постараюсь показать, какдобавить правила для встраивания с использованием некоторого наивного вида расстояния между словами и как использовать фиктивные «метки» только для того, чтобы удовлетворить способ обучения Кераса.

from keras.layers import Input, Embedding, Subtract, Lambda
import keras.backend as K
from keras.models import Model

input1 = Input((1,)) #word1
input2 = Input((1,)) #word2

embeddingLayer = Embedding(...params...)

word1 = embeddingLayer(input1)
word2 = embeddingLayer(input2)

#naive distance rule, subtract, expect zero difference
word_distance = Subtract()([word1,word2])

#reduce all dimensions to a single dimension
word_distance = Lambda(lambda x: K.mean(x, axis=-1))(word_distance)

model = Model([input1,input2], word_distance)

Теперь, когда наша модель выводит непосредственно расстояние между словами,наши метки будут «нулевыми», они не совсем метки для контролируемого обучения, но это ожидаемый результат модели, что-то необходимое для работы Keras.

В качестве функции потерь мы можем иметьНапример, mae (средняя абсолютная ошибка) или mse (среднеквадратичная ошибка).

model.compile(optimizer='adam', loss='mse')

И тренировка со словом 2, являющимся словом после слова 1:

xTrain = entireText
xTrain1 = entireText[:-1]
xTrain2 = entireText[1:]
yTrain = np.zeros((len(xTrain1),))

model.fit([xTrain1,xTrain2], yTrain, .... more params.... ) 

Хотяэто может быть совершенно неверно в отношении того, что на самом деле делает Word2Vec, он показывает основные моменты:

  • Встраиваемые слои не имеют специальных свойств, они просто обучаемые таблицы поиска
  • Правила создания встраивания должны определяться моделью и ожидаемыми результатами
  • Для модели Keras потребуются «цели», даже если эти цели не являются «метками», а математическим приемом для ожидаемого результата.
...