字符和单词级卷积神经网络实现

时间:2017-08-29 23:13:01

标签: python tensorflow neural-network nlp conv-neural-network

为了处理文本,我正在尝试使用字符和单词级CNN来分类凌乱的句子。从概念上讲,这似乎有助于错误/非传统拼写,拼写错误和截断的单词。

我很困惑如何操纵要输入和正确处理的数据。

我想迭代文本中的句子,使用字符级CNN将该句子的单词映射到相应的向量,并将这些向量与这些单词的嵌入输出向量连接起来。得到的张量可以在另一个CNN中再次用于分类。

但是文本作为一个字符串的张量被输入,每个元素都是一个句子,所以迭代好像文本是一个句子列表是行不通的。

我正在尝试做的伪代码示例:

self.X_word_input = tf.placeholder(
    tf.int32, 
    [None, self.max_sentence_length], 
    name='x_word_input'
)

self.X_char_input = tf.placeholder(
    tf.string,
    [None, self.max_char_length],
    name='x_char_input'
)

logits = inference(self.X_word_input,
    self.X_char_input,
    self.max_sentence_length,
    self.max_word_length,
    self.num_classes,
    self.word_vocab_size,
    self.char_vocab_size,
    self.word_embedding_dim,
    self.char_embedding_dim,
    self.word_filter_sizes,
    self.num_word_filters,
    self.char_filter_sizes,
    self.num_char_filters
)

def inference(...):
    for sentence in x_char_input:
        words = sentence.split(' ')
        words_tensor = tf.constant(words)
        char_embedding = get_embedding(words_tensor)
        char_conv = get_convolutions(char_embedding)
        char_logits = get_logits(char_conv)
        words_map.append(char_logits)
    word_embedding = get_embedding(x_word_input)
    combined_embedding = tf.append([word_embedding, words_map], 1)
    combined_conv = get_convolutions(combined_embedding)
    predictions = get_logits(combined_conv)

即使我可以迭代将句子提取为字符串,我需要将每个句子中的每个单词转换为自己的字符张量,以便字符级CNN可以从其字符中为每个单词生成输出向量-tensors。

如何输入句子,分解它们,并从字符CNN迭代生成单词映射?谢谢!

0 个答案:

没有答案