文本分类是机器学习(ML)和自然语言处理(NLP)的非常常用的用例。它用于电子邮件中的垃圾邮件检测等内容,社交媒体帖子的情感分析,或在聊天机器人中的意图检测。
在本系列中,我将比较几个可用于训练文本分类模型的库。
FastText是Facebook的工具,专门用于高效文本分类。它是用C ++编写的,并针对多核培训进行了优化,因此它非常快,能够处理每秒数十万个单词。它非常简单地使用,作为Python库或通过CLI工具。
尽管使用了较旧的机器学习模型(2016年的神经网络架构),FastText仍然非常有竞争力,并提供出色的基线。如果您还考虑了资源使用情况,则考虑到唯一执行更好的模型需要强大的GPU,就会全部更加不可能改进FastText结果。
FastText需要文本分类的培训数据以特殊格式:每个文档应在单线上,标签应该在行的开始时,使用前缀__label__,如下所示:
__label__sauce __label__cheese土豆淀粉对奶酪酱配方有多大? __abel__食品 - 安全__abel__Aciondy危险病原体能够在酸性环境中生长__label__cast-iron __label___stove如何掩盖我的铸铁炉子上的白色斑点?
如果使用doccano来注释文本数据,则可以选择以FastText格式导出数据。但即使您使用其他用于注释的工具,它也只有几行Python代码转换为适当的格式。假设我们以JSONL格式拥有我们的数据,每个JSON对象都具有标签密钥和文本密钥。要转换为FastText格式,我们可以使用以下短片段:
在您以正确的格式进行数据后,使用FastText的最简单方法是通过它的CLI工具。安装后,您可以使用监督的子命令培训模型:
> ./fasttext监控 - input fasttext.txt -otput modelread 0m字词数字:16568数字标签:736progress:100.0%字/秒/线程:47065 Lr:0.000000 Avg.loss:10.027837 eta:0h 0m 0s
您可以使用测试子命令在单独的数据集上评估模型,您将获得第一个候选标签的精度并调用:
> ./fasttext预测模型.bin - 发出烤宽面条?__ label__bakendbest剁碎肉类__abel___mood-safetyhow来储存牛排__标记
FastText附带内置的HyperParameter Optimizer,在给定时间内找到验证数据集上的最佳模型(默认情况下5分钟):
精度为0.72,相比于之前的0.16。不错,我们的时间10分钟,其中5分钟在等待电脑找到我们更好的模型。
这个库提供了一些旋钮,您可以用来试图获得更好的模型,从什么样的n-gram使用,学习率应该是多大的,应该是损失函数,也应该是什么指标?优化。精确或召回更好地与您的商业KPI对齐吗?最重要的结果是一个非常好的一个,或者你在前5名中寻找几个好结果吗?你是对高信任结果感兴趣吗?这一切都取决于您尝试解决的问题,FastText提供了为每个人提供优化的方法。
没有多大的灵活性 - 2016年只有一个神经网络架构实现,仅限少数参数来调整 FastText是一个很棒的库,可以在您想要开始解决文本分类问题时使用。 在不到半小时的时间里,您可以获得一个很好的基线,这将告诉您是否这是一个值得追求的问题。