作为大学项目的一部分,应该训练一个朴素贝叶斯分类器来对三个不同类别的问题和答案进行分类,这个任务应该很容易,因为这三个类之间确实不同。
数据集
该数据集是来自不同领域(家具和 C++ 课程)的问题和答案的混合体,它们使用不同的语言(意大利语和英语),因此乍一看应该很容易对它们进行分类。
数据集的唯一问题是它确实不平衡,例如 C++ 课程 2700 训练实例。家具英语200培训实例。家具意大利60培训实例。
特征提取
该功能只是 n-gram 计数,我不会删除停用词,因为我有 2 种不同的语言可供使用。
使用 TF-IDF 特征和词干标记,我得到了较低的结果。
NB算法
我自己实现了朴素贝叶斯,但它获得了与 scikit learn one 相同的结果。我已经用之前的每堂课训练过它,并使用 alpha=.5 进行了平滑处理
结果
最后的结果在某种意义上是好的
precision recall f1-score support
0 0.92 1.00 0.96 318
1 1.00 0.50 0.67 44
2 1.00 0.33 0.50 6
avg / total 0.93 0.93 0.92 368
但唯一的缺点是 1 和 2 类的召回率很低,原因很简单(我们有不平衡的类)。
有一种方法可以实际获得更低但更平衡的结果,但受限于使用用朴素贝叶斯训练的单一模型?
干杯
编辑: 我需要获得更平衡的结果是因为我应该将此分类器用作问答任务的一部分。