Керас: дополнительный слой для вложений / векторов?

У меня есть 3 вложения слова:

  • Встраивание #1: [w11, w12, w13, w14]
  • Встраивание #2: [w21, w22, w23, w24]
  • встраивание #3: [w31, w32, w33, w34]

Есть ли способ получить четвертое вложение, добавив все три вектора с обучаемыми весами от всех из них, например:

  • Встраивание # 4: [w11 + w21 + w31, w12 + w22 + w32, w13 + w23 + w33, w14 + w24 + w34]

? Есть ли способ сделать это в слое keras?

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

Однако грамматика индонезийского языка отличается от английского. В частности, на индонезийском языке вы можете изменить слово, используя префиксы и суффиксы. Имя существительное, когда ему дан префикс, может стать глаголом, а когда дано суффикс, может стать прилагательным. Вы можете поместить так много в одно слово, чтобы одно базовое слово могло иметь 5 или более вариаций.

Например:

  1. Тани означает ферма (глагол)
  2. пе-тани ​​значит фермер
  3. per-tani-средство фермы (существительное)
  4. ber-tani означает ферма (глагол, с немного другим значением)

Преобразование семантики, сделанное добавлением префикса к слову, согласуется между словами. Например:

  1. pe-tani для tani - это то, что pe-layan для layan, что pe-layar для layar, что pe-tembak для tembak и так далее.
  2. per-main-an is to main - это то, что per-guru-an для гуру, что per-kira-an для kira, что per-surat-an для surat и так далее.

Поэтому я планирую представлять префиксы и суффиксы как вложения, которые будут использоваться для добавления вложения базового слова, создавая новое вложение. Таким образом, значение составного слова происходит от вложений базового слова и аффиксов, а не хранится в виде отдельных вложений. Однако я не знаю, как сделать это в слое Keras. Если бы об этом спрашивали раньше, я не могу его найти.

1 ответ

Решение

Когда вы говорите "вложение трех слов", я вижу три слоя встраивания, такие как:

input1 = Input((sentenceLength,))
input2 = Input((sentenceLength,))
input3 = Input((sentenceLength,))

emb1 = Embedding(...options...)(input1)
emb2 = Embedding(...options...)(input2)
emb3 = Embedding(...options...)(input3)

Вы можете использовать простой Add() слой для суммирования трех:

summed = Add()([emb1,emb2,emb3])

Затем вы продолжаете моделирование...

#after creating the rest of the layers and getting the desired output:
model = Model([input1,input2,input3],output)

Если вы не используете встраивание слоев, но вводите три вектора:

input1 = Input((4,)) #or perhaps (sentenceLength,4)
input2 = Input((4,))
input3 = Input((4,))

added = Add()([input1,input2,input3])

А в остальном тоже самое.


Если это не ваш вопрос, пожалуйста, дайте более подробную информацию о том, откуда берутся три "вложения слова", как вы собираетесь их выбирать и т. Д.

Другие вопросы по тегам