使用预训练的词嵌入后如何进行特征选择?

数据挖掘 nlp 特征选择 特征工程
2022-03-06 18:42:45

我正在研究一个多类文本分类问题。我想使用基于互信息 ( mutual_info_classif) 的前 k 个特征来训练我的模型。

我在 ML 模型上开始了这个项目:

我用于tfidf特征提取,然后用于mutual_info_classif特征选择。

    svc = Pipeline([('tfidf', TfidfVectorizer()),
                   ('ig', SelectKBest(mutual_info_classif,k=1000)),
                   ('clf',LinearSVC(multi_class='ovr')),
              ])
    svc.fit(X_train, y_train)
    y_pred = svc.predict(X_test)

这很简单。

接下来,我开始研究 RNN(更具体地说是一个简单的 LSTM 模型),这就是我遇到问题的地方。

我使用了来自 GloVe (300d) 的预训练词嵌入来从我的数据中获取特征。我输入 RNN 嵌入层的嵌入矩阵的形状为 (4293,300),4293 是在我的数据中找到的唯一词的数量,300 是维度。

我的问题是:有什么方法可以使用这些 4293 中的前 1000 个单词(特征)mutual_info_classif甚至有可能这样做吗?如果是,那么应该在制作 embedding_matrix 之前还是之后完成?

2个回答

使用 RNN 时,您不会一次输入所有数据,您通常有一个 seq2seq 模型。这些模型是使用编码器-解码器架构创建的。LSTM 用于编码阶段。

所以,假设你有一段文字78您将300这些单词的嵌入向量(大小)以781×1 的形式输入到您的 LSTM 中,最后您将得到一个hidden vector代表您的句子的词。

然后,您可以将hidden vector其用于分类(例如,使用前馈神经网络)。

4293因此,您的数据中是否有唯一的单词并不重要。您需要为您的 LSTM 提供一系列 size [<number of words in sentence> × 300]

如果你这样做,你就会失去词矩阵的意义。

粗略地说,重点是当您预先确定您的字典以计算单词的分布式表示时。换句话说,一个词的信息也将是其他词向量。