注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
自然语言处理系列五十一
Python开源快速文本分类器FastText》算法原理
自然语言处理(NLP)是机器学习,人工智能中的一个重要领域。文本表达是 NLP中的基础技术,文本分类则是 NLP 的重要应用。Fasttext是facebook开源的一个词向量与文本分类工具,在2016年开源,典型应用场景是“带监督的文本分类问题”。提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快。fastText结合了自然语言处理和机器学习中最成功的理念。这些包括了使用词袋以及n-gram袋表征语句,还有使用子词(subword)信息,并通过隐藏表征在类别间共享信息。我们另外采用了一个softmax层级(利用了类别不均衡分布的优势)来加速运算过程。
14.4.1 FastText框架核心原理
FastText方法包含三部分,模型架构,层次SoftMax和N-gram子词特征。
- 模型架构
FastText的架构和Word2vec中的CBOW的架构类似,因为它们的作者都是Facebook的科学家Tomas Mikolov,而且确实FastText也算是Word2vec所衍生出来的。
CBOW的架构:输入的是w(t)的上下文2d个词,经过隐藏层后,输出的是w(t)。CBOW架构如图14.1所示。
图14.1 CBOW架构图
Word2vec将上下文关系转化为多分类任务,进而训练逻辑回归模型,这里的类别数量是 |V| 词库大小。通常的文本数据中,词库少则数万,多则百万,在训练中直接训练多分类逻辑回归并不现实。
Word2vec中提供了两种针对大规模多分类问题的优化手段,negative sampling 和 hierarchical softmax。在优化中,negative sampling 只更新少量负面类&#