Я пытаюсь построить модель keras с несколькими входами для задачи маркировки последовательности.В частности, я подаю предложения различной длины и предварительно вычисленные вложения BERT для каждого токена в предложении.
Вложения BERT (каждый токен в предложении, представляемом массивом из 1024 операций с плавающей запятой) вычисляются во времяшаг предварительной обработки, а затем сохраняется с каждым предложением в виде словаря в формате:
{'tokens':['The', 'dog', 'barked'],
'BERT_embedding':[[float1,float2,...,float1024],
[float1,float2,...,float1024],
[float1,float2,...,float1024]]}
{'tokens':['A', 'cat', 'purred', 'softly'],
'BERT_embedding':[[float1,float2,...,float1024],
[float1,float2,...,float1024],
[float1,float2,...,float1024],
[float1,float2,...,float1024]]}
Для модели keras я отправляю токены в качестве входных данных и соединяю эти входные данные со слоем внедрения Word2Vec, который превращает каждый токенв его 300-мерном представлении word2vec.Итак, в моей сводке модели, которую я печатаю, у меня есть:
Layer (type) Output Shape Param # Connected to
token_input (InputLayer) (None, None) 0
token_embed (Embedding) (None, None, 300) 59268000 token_input[0][0]
Мне нужен совет / помощь по определению входного слоя для вложений BERT, которые я предварительно вычислил, так, чтобы я мог затем объединить двавходные данные в связанном слое, который будет выглядеть примерно так:
Layer (type) Output Shape Param # Connected to
token_input (InputLayer) (None, None) 0
token_embed (Embedding) (None, None, 300) 59268000 token_input[0][0]
BERT_input (InputLayer) (None, None, 1024) 0
merged_input (Concatenate) (None, None, 1324) 0 token_embed[0][0]
BERT_input[0][0]
Я все еще довольно новичок в некоторых тонкостях функционального API-интерфейса keras, особенно когда речь идет об определении моделей с несколькими входами, ибыл бы признателен за несколько советов.
Моя основная путаница связана с каждым входным токеном, с которым связан объект списка BERT_embedding.
Как я могу структурировать свой слой BERT для встраивания так, чтобы для каждого токена ввода я передавал 1024 числа с плавающей точкой, связанных с ним, а не сам объект списка (поскольку keras, очевидно, не принимает тип списка)сами объекты в качестве входных данных)?
Буду признателен за ответы, относящиеся к правильной настройке форм ввода модели, а не, например, за предложения по вычислению вложений BERT в качестве слоя в самой модели (т. е. при изменении характеравходные данные).Я вычисляю и сохраняю вложения BERT в качестве шага предварительной обработки, поскольку хочу, чтобы мои входные данные могли использоваться другими, даже если они имеют аппаратные ограничения, которые могут помешать им быстро вычислить вложения BERT сами.