我正在尝试构建文本分类模型。我的目标是将 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()
函数获得)作为附加特征。
我是一名优秀的程序员,十分优秀!