我正在为一家公司开展一个项目,该公司需要对有关贷款和保险的客户电子邮件进行分类。电子邮件是从 13 个类别标签中唯一标记的。数据集中的记录数为3000。所有的电子邮件都不是正确的英文或格式,有很多拼写错误和不需要的特征,如印度名字、地址等。数据集非常不平衡,前 3 个类别的频率组合高达 2000 个,有 2 个类别频率范围为 40-80。我设法对数据进行了预处理,并删除了大部分不需要的内容和拼写错误。
我使用LinearSVC创建了一个监督学习模型,该模型在验证数据集上给出了大约78%的结果,之后我使用了 XGBoost 分类器,将准确率提高到了80%。这两个模型都使用Tfidf 向量,将预处理的一元和二元(停用词删除和词干文本)作为输入。我用 chi2 尝试过SMOTE、TruncatedSVD 和 SelectKBest,但它们降低了准确性。
在机器学习模型方面,我使用了多项朴素贝叶斯、随机森林、决策树分类器。我什至尝试过前馈神经网络 (MLP) 和循环神经网络进行分类,但 XGBoost 仍然提供了最好的准确度。我还使用了使用 LDA 的主题建模。我为每个类别生成了热门词,并尝试找到每个测试集记录与属于每个类别的所有生成的热门词的余弦相似度,但准确性仍然没有提高。
所以,我的问题是我应该寻找什么样的功能?如何提取更复杂的特征?我的主要目标是提高准确性,因为该产品将成为公司的内部软件。我期待上下文感知特征提取或以某种方式设计特征(添加更多或增强它们)以提高准确性
PS:在电子邮件中,客户要求提供多个可操作项目,但仍在训练集中,它们被预先分类为只有一个标签对应于电子邮件中要求的可操作项目之一。此外,数据也被以前的工作人员手动错误分类。请提出建议和方法来捕获可操作的项目。我尝试过使用类概率,但它们似乎没有给出正确的答案,而且如果这个人只要求一个可操作的项目,那么类概率也会指示其他。我想根据用户的要求捕获可操作的项目。我已经为此尝试过POS 标记,但由于数据质量差,它没有给出好的结果。
PPS:我拥有的电子邮件数据是 HTML 格式并且有线程。我尝试在训练之前删除以前的对话线程,但结果是准确度很差。非常奇怪的是,我越是尝试通过删除不需要的内容(如免责声明、自动回复电子邮件、客户服务代表的回复)来优化数据,准确性就会下降得越多。
期待获得一些关于如何改变我的方法,特别是特性的见解。
谢谢