встраивание слов в последовательность lstm - PullRequest
0 голосов
/ 03 июня 2019

Предположим, у меня есть модель Seq2Seq. Я хочу иметь слой Embedded в этой модели.

Основываясь на моих исследованиях, я могу сделать это тремя способами:

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

  2. Я создаю слой встраивания и устанавливаю обучаемое значение true, поэтому не только у меня есть вложение, но и то, что встраивание будет проходить обучение на основе моей задачи

  3. Я создаю слой Embedding, загружаю уже обученные веса и устанавливаю обучаемый False. в этом случае веса не будут обновляться.

(пожалуйста, поправьте меня, если я ошибаюсь).

Я использовал first approach. Я хочу знать, какова будет интерпретация вывода этого кода:

model_wv = Word2Vec.load("word2vec_50d_7w")
embeddings = np.zeros((len(model_wv.wv.vocab), emb_dim))
for i in range(len(model_wv.wv.vocab)):
    # print(i)
    embedding_vector = model_wv.wv[model_wv.wv.index2word[i]]
    if embedding_vector is not None:
        embeddings[i] = embedding_vector

print(embeddings[[1,2,3],[3,4,1]])

это вывод:

[-0.01566689 -1.36469996  0.59684211]

рассмотрите это [1,2,3],[3,4,1] как две последовательности с length=3.

Я думал, что мы используем вложение слов в lstm, чтобы преобразовать каждое слово последовательности в вложение. Я ожидал увидеть two vectors и three items в каждом векторе.

Вложение - это word2vec в gensim,

Цените это, если кто-то проливает свет на то, где я заблудился?

спасибо ~

1 Ответ

1 голос
/ 03 июня 2019

Ваша интерпретация по трем вариантам настройки слоя для встраивания в точности соответствует моему пониманию.

Существует две основные методики трансферного обучения.

  1. Использование предварительно изученной модели в качестве векторного элемента .В вашем случае модель word2vec будет использоваться в качестве службы поиска для предварительной обработки / преобразования токенов в идентификаторы, а затем для встраивания векторов.Эти векторы внедрения становятся реальной особенностью, когда вы тренируете свою собственную модель.(это ваш # 1)

  2. Использование подхода тонкой настройки .Здесь вы можете выбрать либо продолжить обучение предварительно изученной модели (настройка trainable = True), либо исправить предварительно обученную модель (настройка trainable = False).Там может быть выгоды в любом подходе.(Это ваши # 2 и # 3)

(# 1 и # 3) дают аналогичный результат в отношении качества из моего опыта.Если у вас есть приличное количество тренировочных данных, из моего опыта лучше всего подойдет настройка с trainable = True (# 2).

Ваша проблема здесь - проблема с недоработками.вы, вероятно, должны сказать,

print(embeddings[[1,2,3]], embeddings[[3,4,1]])

В противном случае индексирование не будет работать, как вы ожидали.

embeddings[[1,2,3],[3,4,1]]

Это фактически ищет строки с индексами 1, 2, 3 и получает столбец с индексами 3, 4, 1 соответственно.Другими словами, он набирает

column 3 for row 1
column 4 for row 2
column 1 for row 3
...