所有文章 > 正文

使用fastText构建学科分类工具

作者: 赵志浩

时间: 2019-05-28 11:40

本文介绍了一个基于fastText框架的开源学科分类工具的原理和使用方法

项目地址:https://github.com/AMinerOpen/prediction_api

本文介绍了一个基于fastText框架的开源学科分类工具的原理和使用方法。

1.fastText介绍

fastText是Facebook Research开源的文本分类和词训练工具[1],具有快速、轻量的特点。

在模型结构上,fastText使用 cbow[^2]架构,由输入层,隐藏层,输出层三层构成,结构如图所示。


为了提供词的顺序特征信息,fastText在统计语言模型上使用了n-gram模型^3,基于马尔科夫假设认为每个词的出现只与前面的$n$个词有关,即: $$ p(S) = \prod p(wi|w{i-1} \cdots w_{i-n+1}) $$ fastText使用了分层分类器,将不同的分类器整合到一个树形结构中,使用基于Huffman编码的层次softmax[^4]技巧,大幅减少了模型预测目标的数量,提高了计算速度。

2.模型的训练

fastText是一个轻量级框架,训练速度快,易于使用,这里只需要短短的几行代码即可构建模型。

该工具基于国家自然科学基金申请代码进行学科分类,因此使用的训练数据均为中文论文标题和对应的学科标签。为此在使用模型的时候,我们需要使用中文分词工具来进行分词,这里我们选用jieba分词。

这样我们就可以训练并使用模型了

经过测试,模型的准确率如下表所示:

3.工具的使用

该项目包含两个分类工具,一个是基于NSFC的三级学科分类器 classifier.py,另一个是专门针对AI学科的分类器 aiclassifier.py,下面介绍一下工具的使用

3.1环境的配置

3.1.1创建虚拟环境

由于自行安装编译fastText比较麻烦,所以推荐使用 anaconda完成运行环境的配置,首先创建一个虚拟环境

对于windows用户,使用如下命令激活虚拟环境

linux用户:

3.1.2安装依赖包

该项目目前有如下依赖

对于windows用户,使用以下命令安装依赖包:

但注意 mbednarski是私人打包的为windows和linux用户提供的anaconda源,对于osx用户,可以使用官方源:

至此完成了依赖包的安装

3.2三级学科分类

Classifier类包含 classify方法,接受一个包含论文标题的列表,返回一个字典,包含三级学科分类(字段level1~3)的代码、中文学科名以及对应的概率。

以标题Annotating gene sets by mining large literature collections with protein networks为例说明如何使用这个工具。

得到了如下输出:

3.3AI学科分类

AIClassifier类的使用与 Classifier类相近,不过该类的 classify方法返回的字典还提供了一个学科树,以 children属性表示子树,下面是例子:

得到了如下输出:

以上便是这个学科分类工具的技术以及使用的介绍,大家快来试一试吧。

Reference

[1]: https://github.com/facebookresearch/fastText/

[^2]: Efficient Estimation of Word Representations in Vector Space, Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean https://arxiv.org/pdf/1301.3781.pdf

[^4]: Frederic Morin and Yoshua Bengio. Hierarchical probabilistic neural network language model. In Proceedings of the international workshop on artificial intelligence and statistics, pages 246–252, 2005.

[关于转载]:本文为“AMiner”官网文章。转载本文请联系原作者获取授权,转载仅限全文转载并保留文章标题及内容,不得删改、添加内容绕开原创保护,且文章开头必须注明:转自“AMiner”官网。谢谢您的合作。

推荐阅读 更多