我正在尝试建立文本分类模型。我的目标是将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)
这将返回所需的矩阵,其最后一列包含有关主题的信息。
但是,由于主题编号不像术语文档矩阵的元素那样具有基序(或序数)顺序,因此我担心某些线性机器学习模型可能不适用于此工作。
是真的吗?还有其他可以采用的解决方案吗?
答案 0 :(得分:2)
是的,你是对的; Topic
列不是主要/常规功能。
您可以使用topic
功能的oneHotEncoding(),然后将其附加到countVectorizer
输出中。
另一种选择(我认为是更好的方法),您可以提供每个主题(通过使用lda.transform()
函数获得的可能性)作为附加功能的可能性。