深度学习:如何构建字符级嵌入?
Deep learning : How to build character level embedding?
我正在尝试在我的模型中使用字符级嵌入,但我对字符级嵌入几乎没有疑问。
所以对于词级嵌入:
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 :
每个 id 将替换为 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)}
按字符级别对句子进行编码:
这是我的困惑,所以在词嵌入中我们首先对句子进行标记,然后用词汇 ID (word_id)
对每个标记进行编码
但是对于 char 嵌入,如果我对句子进行标记,然后使用字符级别进行编码,那么形状将为 4 dim,我无法将其提供给 LSTM。
但如果我不标记并直接编码原始文本,那么它是 3 dim,我可以将它提供给 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_填充:
[[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 暗淡。
如何用字符级别对句子进行编码并将其与tensorflow 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 ]
您可以连接固定长度的字符级特征。
例如:
``[[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]]
我正在尝试在我的模型中使用字符级嵌入,但我对字符级嵌入几乎没有疑问。
所以对于词级嵌入:
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 :
每个 id 将替换为 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)}
按字符级别对句子进行编码:
这是我的困惑,所以在词嵌入中我们首先对句子进行标记,然后用词汇 ID (word_id)
对每个标记进行编码但是对于 char 嵌入,如果我对句子进行标记,然后使用字符级别进行编码,那么形状将为 4 dim,我无法将其提供给 LSTM。
但如果我不标记并直接编码原始文本,那么它是 3 dim,我可以将它提供给 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_填充:
[[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 暗淡。
如何用字符级别对句子进行编码并将其与tensorflow 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 ]
您可以连接固定长度的字符级特征。
例如:
``[[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]]