我正在尝试构建一个文本分类模型。我的目标是将 10000 个文档中的每个段落分类为是否包含“劳工罢工事件”信息。
首先,我遵循基本的预处理步骤,将段落转换为术语文档矩阵 (CountVectorizer)。然后将这个矩阵输入到 scikit-learn 提供的逻辑回归和 svm 等模型中。
但是,我发现预训练的 LDA 模型给出的有关文档主题的信息将有助于段落级别的文本分类。
因此,我还想提供有关主题的信息以及每个文本的 BOW 信息。
遵循similar的答案问题,我认为只需在术语文档矩阵的最后一列添加主题编号即可。
例如,让“text_train”为我的训练语料库(假设有 40000 个段落),“topic”为 LDA 模型赋予每个段落的主题编号列表。
vectorizer = CountVectorizer(ngram_range=(1,3))
X = vectorizer.fit_transform(text_train)
X.toarray() #shape (40000, 643898)
topic = coo_matrix([topic]).T #shape (40000, 1)
hstack([X.toarray(), topic]).toarray() #shape (40000, 643899)
这将返回所需的矩阵,其最后一列包含有关主题的信息。
但是,由于主题编号不像术语文档矩阵的元素那样具有基数(或序数)顺序,我担心某些线性机器学习模型可能不适合这项工作。
这是真的吗?那我还有其他可以采用的解决方案吗?
最佳答案
是的,你说得对; 主题
列不是基数/序数特征。
您可以使用oneHotEncoding() topic
功能,然后将其附加到 countVectorizer
输出。
另一个选项(我认为这是更好的方法),您可以提供每个主题的概率(可以通过使用 lda.transform()
函数获得)作为附加功能。
关于python - 如何将 BOW 以外的功能添加到 scikit-learn 分类模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56251034/