在进行文本处理时如何向 CNN 提供输入?

数据挖掘 机器学习 Python nlp 美国有线电视新闻网
2021-09-17 19:42:07

作为一名信号处理工程和 NLP 新手,我对向 CNN 网络提供输入感到困惑。

以我对CNN的了解,我正在尝试构建一个种族分类器,输入为文本(姓(LN)、中间名(MN)、名字(FN))。我有一个包含姓氏、中间名、名字和班级信息的 8,000,000 个样本的列表

array = [['person1_LN','person1_MN','person1_FN','Person1_class'],
         ['person1_LN','person1_MN','person1_FN','Person2_class'], 
         ....]

我想分别在 LN、MN、FN 上应用转换层(CL),然后是池化层(PL)。

文本处理示例演示了将句子转换为词嵌入。我试图理解这个代码片段

W = tf.Variable(tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0), name='W')
self.embedded_chars = tf.nn.embedding_lookup(W, self.input_x)
self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)

教程说要使用 word2vec 进行培训。看了这两个博客,我什么也不懂。在任何一种情况下,我的数据都不是一个句子,而且在第二种情况下,我必须训练什么?

如果我直接输入没有词嵌入的词,CL 会运行吗?如果没有任何关于如何在我的案例中嵌入单词以向 CNN 提供输入的示例?

1个回答

所以,这里的问题是问你如何在 CNN 架构中使用文本。

就像我们使用 CNN 处理图像一样,文本数据也将是一个 2D 矩阵,其中行将代表文本特征,列代表字符序列(构成名称)。

现在,当然,如果我们简单地使用 one-hot 编码,我们会得到数据稀疏性,这并不是特别有效的计算,尤其是在使用 CNN 时。因此,我们最好使用您在帖子中描述的词嵌入。在这里,词嵌入旨在折叠输入的高维,从而减少数据稀疏的机会。

但是,在您的问题中使用词嵌入存在潜在问题。词嵌入背后的原理是它将相似的词嵌入分配给在相似的上下文中可以很容易地替换的词(例如 Sam 是善良的,Simon 是善良的)并且不会影响句子的连贯性。正如你所看到的,当涉及到专有名词时,我们最终可能会得到所有名称的相似向量,因为它们在任何上下文中都可以互换,并且不会影响句子的整体连贯性。

因此,尽管这自相矛盾,但我建议使用一次性编码的字符序列作为此问题的起点,然后当您实现这一点时,您可能会想出一种更有效的方式来表示名称。