为了处理文本,我正在尝试使用字符和单词级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迭代生成单词映射?谢谢!