Я пытаюсь использовать встраивание на уровне символов в моей модели, но у меня мало сомнений относительно встраивания на уровне символов.
Итак, для встраивания на уровне слов:
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 ]