Как тренировать мое собственное встраивание слов на веб-страницах? - PullRequest
0 голосов
/ 24 января 2019

У меня есть тонны текстовых данных на нескольких веб-страницах о продукте, который я заинтересован продавать клиентам.Я пытался использовать предварительно обученное встраивание слов быстрого текста, обученное в Википедии, и это не дало мне хороших результатов для задачи классификации.Возможно, потому что текстовые данные на сайте содержат много технических деталей и отличаются от текстовых данных в википедии.Поэтому я хотел бы провести какое-то трансферное обучение встраиванию слов, сохранив предварительно встроенное быстрое встраивание слова в качестве основы.

  1. Как я могу обучить собственное встраивание слов на этих веб-страницах с помощью Keras?
  2. Как я могу инициализировать встраивание пользовательских слов с помощью быстрого обучения с предварительным обучением и обучением?Поможет ли эта инициализация улучшить вложение слов?

Я бы предпочел решение с использованием Keras для обучения встраиванию слов.
Я знаю, что встраивание имеет обучаемую = истинную опцию, не знаю, как я могу использоватьэто.

Embedding(voc_size, emb_dim, weights=[embedding_matrix], input_length, trainable=True)

Какой фреймворк порекомендовал для этого Keras или Gensim и почему?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Я бы посоветовал вам использовать gensim-реализацию fastText для обучения собственным встраиваниям слов. Это должно быть намного проще и быстрее, чем ваша собственная реализация Keras. Вы можете начать с загрузки предварительно обученной модели, а затем продолжить обучение со своими собственными данными.

from gensim.models import FastText

model = FastText.load_fasttext_format('cc.en.300.bin')

data = [['Hello', 'world'], ...] # Your own training data, a list of sentences
model.build_vocab(data, update=True)
model.train(sentences=data, 
            total_examples=model.corpus_count,
            epochs=5)

РЕДАКТИРОВАТЬ: Если вы хотите реализовать свою собственную модель в Keras, вы действительно можете использовать слой Embedding с trainable = True (поведение по умолчанию), как вы предлагаете. Здесь есть хорошее руководство о том, как это сделать .

0 голосов
/ 24 января 2019
  1. Чтобы тренироваться только вы должны поставить обучаемый флаг на True в слое Embedding.Но он будет тренироваться с самого начала -
  2. Чтобы инициализировать матрицу, вы можете использовать ту, которую вы считаете, у вас есть пример здесь: https://www.kaggle.com/lystdo/lstm-with-word2vec-embeddings (где используются Google300Negatives, а также взяты только словачто они используются из исходной матрицы).Используйте параметр weights в классе конструктора Embedded (weights = [...]).Эта матрица должна иметь размер числа слов x количество измерений вложения.

В Keras любой слой, имеющий параметры, может быть обучаемым или нет.Этот флаг полезен, когда вы хотите обучить только подмножество слоев (только полностью подключенных и т. Д.), Чтобы избежать взрыва параметров.

Когда вы задаете trainable = true :

  • Если слой находится в середине сети, это только распространяет входной градиент, но не корректирует вес.
  • Если слой является первым в сети, это не распространяет какой-либо градиент.

В случае слоя внедрения вы можете инициализировать этот слой как матрицу внедрения по умолчанию (например, gensim Gooogle300Negative).

Когда вы активируете обучаемость в этом слое, вы даете карт-бланш для Кераса, чтобы он корректировался с учетом этого встраивания.Это также означает необходимость оптимизации многих других параметров.

В некоторых случаях нет интереса в изменении исходного встраивания, либо из-за связанных с этим затрат, либо из-за того, что оно должно быть сохранено.

РЕДАКТИРОВАТЬ: Эта задача соответствует Tensorflow внутри Керас.Но этот принцип не зависит от рамок, а только от теории.Когда вы определяете trainable = false, вы указываете, что веса не должны обновляться.

Это означает, что промежуточные слои должны рассчитывать градиент только относительно входных данных, потому что один из весов бесполезен (простоесли они вычислены, ничто не получено, и обучаемый флаг не будет существовать).Они рассчитывают относительно входа, потому что градиент должен продолжать распространяться.

Первый слой также имеет особенность, что входные данные являются вашими данными, и, следовательно, нет необходимости продолжать распространение, поэтому, если trainable = false, выне нужно ничего делать.

В Tensorflow флаг обучаемого добавляет или нет переменную в коллекцию GraphKeys.TRAINABLE_VARIABLES, таким образом, они учитываются или нет.https://www.tensorflow.org/api_docs/python/tf/trainable_variables

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...