使用卷积神经网络进行文档分类

数据挖掘 神经网络 分类 文本挖掘 卷积神经网络 word2vec
2021-09-29 04:24:51

我正在尝试使用 CNN(卷积神经网络)对文档进行分类。用于短文本/句子的 CNN 已在许多论文中进行了研究。但是,似乎没有论文将 CNN 用于长文本或文档。

我的问题是文档中的功能太多。在我的数据集中,每个文档都有超过 1000 个标记/单词。为了将每个示例提供给 CNN,我使用word2vecglove将每个文档转换为矩阵,从而生成一个大矩阵。对于每个矩阵,高度是文档的长度,宽度是词嵌入向量的大小。我的数据集有 9000 多个示例,训练网络需要大量时间(整整一周),这使得微调参数变得困难。

另一种特征提取方法是对每个单词使用 one-hot 向量,但这会创建非常稀疏的矩阵。当然,这种方法甚至比以前的方法需要更多的时间来训练。

那么有没有更好的方法来提取特征而不创建大型输入矩阵呢?
我们应该如何处理可变长度的文档?目前,我添加特殊字符串以使文档具有相同的长度,但我认为这不是一个好的解决方案。

2个回答

您可以通过将文档表示为一系列句子向量而不是更长的词向量系列来减少输入数据的长度。Doc2vec是执行此操作的一种方法(每个句子都是一个“文档”)。

如果您不想使用 Doc2vec,创建句子向量的一种方法是平均每个句子的词向量,为每个句子提供一个相同宽度的向量。这可能不如通过 Doc2Vec 提供的某些方法精确,但我已将其用于主题建模并取得了相当大的成功。

无论哪种方式,一旦你有了句子向量,就可以为每个文档按顺序排列它们,就像你已经为你的词向量做的那样,然后运行你的模型。由于每个文档的序列长度较短,因此您的模型应该比使用词向量训练得更快。

顺便说一句,这种方法可以在按比例放大或缩小以满足您的准确性和速度需求时起作用。(例如,如果你的 CNN 仍然用句子向量训练太慢,你可以创建段落向量来代替)。

处理不同长度文档的一种方法是通过填充。您的文档序列的长度都应该与您最长的文档相同。因此,如果您最长的文档是 400 个句子,那么所有文档序列的长度将是 400 个向量。短于最大长度的文档将用填充零的向量填充。

您可以使用区域嵌入。您可以使用一种策略将文本区域转换为向量,而不是将单个“标记”转换为向量。这里使用这种方法

如果您不限于 CNN,您可以使用分层注意模型,例如,您有这种管道

word vectors (combined into) sentence vectors (combined into) final document vector

请注意,使用这种方法,您仍然需要将所有词向量转换为嵌入,但不是一次全部转换。

要处理不同长度的文档,填充/剪切是目前唯一的解决方案。

最后,为了提高速度,您可以尝试通过仅包含重要部分来减少文本的维度(也许仅文档的开头就足以具有良好的分类精度)