总结词向量会破坏它们的含义吗?

人工智能 深度学习 自然语言处理 词嵌入 文本分类 二元分类
2021-11-09 11:00:12

例如,我有一个段落,我想以二进制方式分类。但是因为输入必须有一个固定的长度,我需要确保每个段落都由一个统一的数量表示。

我所做的一件事是获取段落中的每个单词,使用 GloVe word2vec 对其进行向量化,然后将所有向量相加以创建一个“段落”向量,然后将其作为模型的输入输入。在这样做的过程中,我是否破坏了这些词可能具有的任何意义?

考虑到这两个句子将具有相同的向量:

我的狗咬了戴夫

戴夫咬了我的狗

我该如何解决这个问题?我接近这个错误吗?

还有什么其他方法可以训练我的模型?如果我把每个单词都输入到我的模型中,我怎么知道我应该输入多少单词?我如何输入这些单词?以二维数组的形式,其中每个词向量是一列?

我希望能够训练一个可以准确分类文本的模型。令人惊讶的是,仅通过使用这种总结方法,对于像 RandomForestClassifier 这样相对简单的模型,我得到了很高的(> 90%)。有什么见解吗?

2个回答

总结一个词向量序列有时可能在实践中使用。但是,加法运算是不可逆的,这意味着一旦将几个数字相加,就无法恢复原始数字。但是,根据您的任务,总结一系列词向量可能会起作用。您还应该标准化这些值,或者只使用平均值。

详情:https ://towardsdatascience.com/document-embedding-techniques-fed3e7a6a25d#ecd3

要提供不同长度的数据,您还可以尝试填充和修剪它。为段落长度设置一个常量 L 并将所有单词向量列表修剪/填充到该长度。填充将 0 个向量添加到列表的开头并修剪修剪文本的第一部分,直到它等于 L。即使在 LSTM 网络中,填充和修剪仍然被使用,即使您可以将尽可能长的文本提供给 LSTM如您所愿,您仍然必须批量处理词向量,这要求它们的长度相同。

python中关于填充/修剪向量的示例代码:

def pad_trim(list_vec, L):
    //list vec: {vec1,vec2,vec3......}
    //Assuming vecN have a size of 200
    return list_vec[-L:0] if len(list_vec) > L else [[0] * 200] * (L-len(list_vec)) + list_vec

然而在推理中,如果你使用基于 RNN 的方法,你可以忽略最大长度,尽管由于网络没有接受超过 L 的长度训练,它的性能可能更好或更差。

一般来说,如果可能,您应该进行连接,这样您就可以将所有信息保留在句子中。但是,根据您的任务,两者都可以正常工作。

对于基于 RNN 和基于 CNN 的模型示例,您应该查看: https ://medium.com/jatana/report-on-text-classification-using-cnn-rnn-han-f0e887214d5f

但是因为输入必须有一个固定的长度

他们有吗?为什么?首选策略是使用 RNN(可能使用 LSTM 或 GRU,但可能没有必要)并训练它按顺序处理输入并输出段落的最终分类。这样做的好处是能够考虑词序和星座,以及处理可变大小的输入。

直觉上,我认为简单地添加词向量将包含来自常见词的大量噪声,这些词不能从分类中提供太多有意义的信息。我会考虑贝叶斯方法或降维方法来将输入限制为更有用的输入向量。