Глубокое обучение: Как построить встраивание на уровне персонажа? - PullRequest
2 голосов
/ 14 мая 2019

Я пытаюсь использовать встраивание на уровне символов в моей модели, но у меня мало сомнений относительно встраивания на уровне символов.

Итак, для встраивания на уровне слов:

Sentence = 'this is a example sentence'

создать вокаб:

vocab = {'this' : 0 , 'is' :1 , 'a': 2 'example' : 3, 'sentence' : 4 }

закодировать предложение:

encoded_sentence = [ 0, 1 , 2 , 3 , 4 ]

Теперь отправьте его в любое предварительно обученное вложение, например, word2vec или glove:

каждый идентификатор будет заменен на 300 или вложение dim:

embedding_sentence = [ [ 0.331,0.11 , ----300th dim ] , [ 0.331,0.11 , ----300th dim ] , [ 0.331,0.11 , ----300th dim ] , [ 0.331,0.11 , ----300th dim ] , [ 0.331,0.11 , ----300th dim ] ] 

и если мы имеем дело с партиями, тогда мы дополняем предложения

Итак, форма выглядит так:

[ batch_size , max_sentence_length , embedding_dim ]

Теперь для встраивания на уровне персонажа у меня мало сомнений:

так для встраивания на уровне символов:

Sentence = 'this is a example sentence'

создать char_vocab:

char_vocab = [' ', 'a', 'c', 'e', 'h', 'i', 'l', 'm', 'n', 'p', 's', 't', 'x']

int_to_vocab = {n:m for m,n in enumerate(char_vocab)}

закодировал предложение по уровню символа:

Теперь вот мое замешательство, поэтому при встраивании слов мы сначала токенизируем предложение, а затем кодируем каждый токен с помощью идентификатора vocab (word_id)

но для встраивания символов, если я ставлю токен на предложение, а затем кодирую на уровне символов, тогда форма будет 4 тусклой, и я не могу передать это в LSTM.

Но если я не использую токены и не кодирую напрямую необработанный текст, он будет 3 тусклым, и я могу передать его в LSTM

например:

с токенизацией:

 token_sentence = ['this','is','a','example','sentence']

encoded_char_level = []

for words in token_sentence:
    char_lvel = [int_to_vocab[char] for char in words]
    encoded_char_level.append(char_lvel)

это выглядит так:

[[0, 1, 2, 3],
 [2, 3],
 [5],
 [6, 7, 5, 8, 9, 10, 6],
 [3, 6, 11, 0, 6, 11, 12, 6]]

Теперь мы должны заполнить это для двух уровней, один из которых - заполнение char_level, а второй - заполнение уровня предложения:

char_level_padding:

[[0, 1, 2, 3, 0, 0, 0,0],
 [2, 3, 0, 0, 0, 0, 0, 0],
 [5, 0, 0, 0, 0, 0, 0, 0],
 [6, 7, 5, 8, 9, 10, 6, 0],
 [3, 6, 11, 0, 6, 11, 12, 6]]

Теперь, если у нас есть 4 предложения, тогда мы должны дополнить каждое предложение максимальным предложением len, чтобы форма была:

[batch_size , max_sentence_length , max_char_length ] 

Теперь, если мы передадим это слою для встраивания, тогда:

[ batch_size , max_sentence_length, max_char_length , embedding_dim ] 

Что равняется 4 тусклым.

Как кодировать предложения с уровнями символов и использовать их со слоем tenstflow LSTM?

Because lstm takes 3 dim input [ batch_size , max_sequence_length , embedding_dim ] 

Могу ли я использовать что-то вроде:

[ Batch_size , ( max_sentence_length x max_char_length ) , dim ] 

так например:

[ 12 , [ 3 x 4 ] , 300 ]

1 Ответ

1 голос
/ 14 мая 2019

Можно объединить элементы уровня персонажа с фиксированной длиной.

Например:

``[[0, 1, 2, 3, 0, 0, 0,0],
  [2, 3, 0, 0, 0, 0, 0, 0],
  [5, 0, 0, 0, 0, 0, 0, 0],
  [6, 7, 5, 8, 9, 10, 6, 0],
  [3, 6, 11, 0, 6, 11, 12, 6]]``

можно изменить на: [[0, 1, 2, 3, 0, 0, 0,0,2, 3, 0, 0, 0, 0, 0, 0,5, 0, 0, 0, 0, 0, 0, 0,6, 7, 5, 8, 9, 10, 6, 0,3, 6, 11, 0, 6, 11, 12, 6]]

...