Интеграция предложения BERT в сиамскую сеть LSTM - PullRequest
0 голосов
/ 11 июля 2019

Я работаю над проектом по схожести текста и хотел поэкспериментировать с сиамской сетью LSTM. Я работаю над изменением этой реализации https://amitojdeep.github.io/amitoj-blogs/2017/12/31/semantic-similarity.html. Код основан на использовании вложения слов Word2Vec, и я хотел заменить его на вложения предложений BERT https://github.com/imgarylai/bert-embedding

В результирующей матрице есть столбец 1 со строками входных предложений, столбец 2 с каждой ячейкой, содержащей соответствующую матрицу внедрения (num_words, 768). Насколько я понимаю, используя эту матрицу внедрения, я могу просто пропустить шаг уровня внедрения и подставить его непосредственно в следующий слой. Что я и пытался сделать ниже.

# The visible layer

left_input = Input(shape=(max_seq_length,), dtype='int32')
right_input = Input(shape=(max_seq_length,), dtype='int32')

#embedding_layer = Embedding(len(embeddings), embedding_dim, weights=[embeddings], input_length=max_seq_length, trainable=False)
#embedding layer modified to use embeddings from BERT

# Embedded version of the inputs  
encoded_left_full = bert_embedding(left_input) 
encoded_left = encoded_left_full[0][1]
encoded_right_full = bert_embedding(right_input)
encoded_right = encoded_right_full[0][1]

Я получаю сообщение об ошибке ниже:

TypeError: объект типа 'Tensor' не имеет len ().

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

...