Facebook开源文本分类专用工具fastText

fastText是 Facebook 开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快(学界 | Facebook研究者提出新型文本分类方法fastText:性能比肩深度学习而且速度更快)。昨日,Facebook 官方博客发文称开源 fastText。


更快、更好的文本分类


人工智能研究员面临的一大技术挑战是理解你所说话以及敲打出的文字的意义。但这项工作非常的重要。自动文本处理成为了人们每天与计算机交互的关键成分,它也是从网页搜索和内容排名到垃圾过滤这些所有事情中的主要组成,而你却完全看不见它。随着在线数据量的增长,我们需要更灵活的工具去更好的理解这些内容,从而提供更准确的分类结果。


为了这一需求,Facebook 人工智能实验室开源了 fastText,这是一个用来帮助建立文本表征和分类的可延展解决方案的库。我们知道将学习到的内容共享出来对促进社区的发展非常重要,所以我们也将关于 fastText 的研究内容公开了,论文:Enriching Word Vectors with Subword Information。


faxtText 结合了过去十几年中自然语言处理和机器学习社区引入的大部分成功的概念,包括使用 n-gram 袋表征语句,还有使用子字(subword)信息,通过一个隐藏表征在类别间共享信息。我们也采用了一个层级 softmax(它利用了类别不均衡分布的优势)加速就算过程。这些不同的概念被用于两个不同任务:有效的文本分类和学习词向量表征。


文本分类的有效学习


深度神经网络近期在文本处理中非常的流行。尽管这些模型在有限制的实验室实践中获得了非常好的表现,但训练和测试过程会很慢,限制了它们在大型数据集上的应用。


fastText 帮助解决这一问题。为了在有众多类别的大型数据集上有效,fastText 使用层级分类器而非平面结构,不同的类别被组织进一颗树中(想象二叉树而非 list)。从线性到有多种类别的对数模型,这大大减少了训练和测试文本分类器的时间。fastText 也利用类(class)不均衡这样的一个事实(一些类别出现次数要更多),通过使用 Huffman 算法建立用于表征类别(category)的树。因此,频繁类别的树的深度要比不频繁类别的树的深度要小,导致更进一步的计算效率。


fastText 也用一个更低维度的向量表征文本,这是通过总结对应文本中出现的词的向量所获得的。在 fastText 中,一个低维度向量与每个单词都相关。隐藏表征被不同类别中的所有分类器共享,使得从一个类别中学到的词信息被其他类别使用。这类表征被称为词袋(bag of words),忽视词序。在 fastText 中,我们也使用向量表征单词 n-gram,将局部词序考虑在内,这对很多文本分类问题都很重要。


我们的实验表明 fastText 在准确率上总是与深度学习分类器有同等水平,而且在训练和评估速率上要高数个等级。使用 fastText,我们总能够将训练时间从几天降至几秒,并且在许多标准问题上达到最先进的表现,例如情感分析或标签预测。


eq9.6.png

FastText 与基于深度学习的方法之间的比较


一款专用工具


在商业世界中,文本分类非常重要。垃圾邮件或点击诱饵过滤器可能就是最典型的例子。现在已经有能为一般的分类问题(例如 Vowpal Wabbit 或 libSVM)设计模型的工具,但是 fastText 仅专注于文本分类。这使得在特别大的数据集上,它能够被快速训练。使用一个标准的多核 CPU,我们得到了在 10 分钟内基于超过十亿单词训练完模型的结果。FastText 也能在五分钟内将 50 万句句子分类成 30 多万种。


多国语言


除了文本分类,fastText 也能够用于学习单词的向量表征。通过利用语言的形态结构,它支持多国语言,包括英语、德语、西班牙语、法语及捷克语。它还使用了一种简单高效的纳入子字信息的方式,在用于像捷克语这样词态丰富的语言的时候,该方式表现得非常好,证明了精心设计的字符 n-gram 特征是丰富单词表征的重要来源。FastText 的性能明显要比流行的 word2vec 工具,或者其他最先进的词态单词表征好。


twitter-money-bag1.png

不同语言下,FastText 与最先进的单词表征的比较


我们希望 fastText 的引入能帮助社区构建更好的,更可扩展的文本表征与分类的解决方案。作为开源库,我们相信 fastText 对于研究和工程社区是有价值的,最终将帮助我们所有人设计更好的应用,并取得更多语言理解的进展。

入门Facebook工程开源NLP工具包文本分类
1