TL;博士
我以前从来没有做过nlp
,我觉得我做得不好。我想知道我是不是真的从一开始就做不好,还是还有希望解决后面提到的那些问题。
一些基本信息
我正在尝试为大学任务进行一些二进制文本分类,但我在分类方面遇到了困难,因为 NLP 的预处理并不是最好的。
首先,重要的是要注意在设计事物时我需要考虑效率,因为我正在处理加载在内存中的非常大的数据集(>1M 文本)。
该数据集包含与新文章相关的数据,带有title
, summary
, content
, published_date
, section
, tags
, authors
...
此外,值得一提的是,由于这项任务是学习过程的一部分,我正在尝试自己创建所有内容,而不是使用外部库(仅用于无聊或复杂的任务)
程序
NLP预处理的基本过程是:
- 特征提取 -> str 变量
title
,summary
和content
属性连接在同一个字符串中 - 词形还原 -> 与输入相同的 str 但具有词形还原的单词
- 停用词过滤
- 语料库生成 ->
dict
以词形还原词作为键并将它们插入字典中的索引作为值的对象。
在使用所有这些样本生成语料库之后,我们终于可以安全地对它们进行矢量化(这与上面的过程基本相同,但没有构建语料库的步骤)。
正如您可能猜到的那样,我并没有严格遵循基本bag of words (BOW)
思想,因为我需要减少内存消耗,因此在尝试使用DecisionTreeClassifier
sci-kit 等 AI 算法时会引发两个问题。
问题
到目前为止,我观察到的一些问题是:
- 从这些文本生成的向量需要具有相同的维度
Does padding them with zeroes make any sense?
- 用于预测的向量也需要与训练中的向量具有相同的维度
- 在预测阶段,那些没有添加到语料库中的词被忽略
- 此外,矢量化没有多大意义,因为它们很相似,而且即使它们都包含相同的信息
[0, 1, 2, 3, 4, 1, 2, 3, 5, 1, 2, 3]
,这也是不同的[1, 0, 2, 3, 4, 1, 2, 3, 5, 1, 2, 3]