项目地址:https://github.com/AMinerOpen/prediction_api
本文介绍了一个基于fastText框架的开源学科分类工具的原理和使用方法。
fastText介绍
fastText是Facebook Research开源的文本分类和词训练工具 [1] ,具有快速、轻量的特点。
在模型结构上,fastText使用 cbow
[^2]架构,由输入层,隐藏层,输出层三层构成,结构如图所示。
为了提供词的顺序特征信息,fastText在统计语言模型上使用了n-gram模型^3,基于马尔科夫假设认为每个词的出现只与前面的$n$个词有关,即: $$ p(S) = \prod p(w i|w {i-1} \cdots w_{i-n+1}) $$ fastText使用了分层分类器,将不同的分类器整合到一个树形结构中,使用基于Huffman编码的层次softmax[^4]技巧,大幅减少了模型预测目标的数量,提高了计算速度。
模型的训练
fastText是一个轻量级框架,训练速度快,易于使用,这里只需要短短的几行代码即可构建模型。
该工具基于国家自然科学基金申请代码进行学科分类,因此使用的训练数据均为中文论文标题和对应的学科标签。为此在使用模型的时候,我们需要使用中文分词工具来进行分词,这里我们选用jieba分词
这样我们就可以训练并使用模型了
经过测试,模型的准确率如下表所示:
level | top1 | top5 |
---|---|---|
1 | 0.5079 | 0.8331 |
2 | 0.3629 | 0.6668 |
3 | 0.3342 | 0.6317 |
工具的使用
该项目包含两个分类工具,一个是基于NSFC的三级学科分类器 classifier.py
,另一个是专门针对AI学科的分类器 aiclassifier.py
,下面介绍一下工具的使用
环境的配置
创建虚拟环境
由于自行安装编译fastText比较麻烦,所以推荐使用 anaconda
完成运行环境的配置,首先创建一个虚拟环境
对于windows用户,使用如下命令激活虚拟环境
linux用户:
安装依赖包
该项目目前有如下依赖
fasttext
scikit-learn
jieba
requests
对于windows用户,使用以下命令安装依赖包:
但注意 mbednarski
是私人打包的为windows和linux用户提供的anaconda源,对于osx用户,可以使用官方源:
至此完成了依赖包的安装
三级学科分类
Classifier
类包含 classify
方法,接受一个包含论文标题的列表,返回一个字典,包含三级学科分类(字段level1~3)的代码、中文学科名以及对应的概率
以标题Annotating gene sets by mining large literature collections with protein networks为例说明如何使用这个工具。
得到了如下输出
AI学科分类
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
[ ^3 ] : http://web.stanford.edu/~jurafsky/slp3/3.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.
Be First to Comment