Керас: дополнительный слой для вложений / векторов?
У меня есть 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 или более вариаций.
Например:
- Тани означает ферма (глагол)
- пе-тани значит фермер
- per-tani-средство фермы (существительное)
- ber-tani означает ферма (глагол, с немного другим значением)
Преобразование семантики, сделанное добавлением префикса к слову, согласуется между словами. Например:
- pe-tani для tani - это то, что pe-layan для layan, что pe-layar для layar, что pe-tembak для tembak и так далее.
- 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])
А в остальном тоже самое.
Если это не ваш вопрос, пожалуйста, дайте более подробную информацию о том, откуда берутся три "вложения слова", как вы собираетесь их выбирать и т. Д.