赞
踩
虽然神经网络在实践中效果不错,然而训练和测试需要大量的时间,但是有rank constraint和fast loss approximation的线性模型却可以在十亿级别的单词量下十分钟完成分析。fastText是可以应用在带监督的文本分类问题的语言模型,准确率可以与深度学习相提并论,且速度更快。它有两个突出的优点:
fastText基本结构如下:
模型的输入是多个单词以及其N-gram模型和对应的特征,输出是文本所对应的label。这个模型有三个要点:
上次是同组的大佬讲了word2vec中的skip-gram模型,CBOW模型与skip-gram模型几乎是镜像的,应用场景是,用一群词来预测一个词。fastText的结构与CBOW的结构基本是一毛一样的,区别在于输入输出有改变,作用不同。
CBOW模型 | fastText模型 | |
---|---|---|
输入 | one-hot编码的文本,单位:单词 | 文本中的n-gram向量,特征为词向量平均值,单位:n字符 |
输出 | 预测的词 | label |
应用 | 预测中间词 | 预测标签 |
下面是关于为什么fastText会顺便训练词向量的解释:
CBOW模型的基本结构(此图截取自博客 https://blog.csdn.net/u010665216/article/details/78724856 ,侵删)如下:
可以看到,虽然CBOW模型要解决的是给定一串词预测一个词的问题,但是它还十分顺便地训练了词嵌入矩阵
W
V
∗
N
W_{V*N}
WV∗N,当然这个副产品十分有用。所以对于有相同结构的fastText有这样的功能也就不奇怪了,但是由于fastText采用的是字符级别的n-gram模型,所以可能这个副产品也许应该叫做n-字节嵌入矩阵?
N-gram是基于语言模型的算法,基本思想就是将文本内容按照字节的顺序按照n的窗口滑动截取,并用得到的文本进行之后的计算。
这篇论文的n-gram模型有以下优点:
softmax作为很常用的输出层激活函数,可以将输出的值归整到0-1。但是如果采用标准的softmax函数,则需要对所有类别的概率都列入计算并做归一化,这个操作在单词量大的时候非常耗时,所以论文使用分层softmax来减少计算的复杂度。这种基于Huffman编码树的分层softmax将复杂度从O(kh)降到了O(hlogk).(k为label的总数,h为词向量维度)
分层softmax的结构中,通过文本(或者字节)的出现次序构成Huffman编码,非叶子节点中包含向左走向右走的概率,叶子节点包含选择的文本。这样计算出从根节点到
w
2
w_2
w2的复杂度就简化成
l
o
g
n
logn
logn数量级的了。
fastText是运行在Mac OS或者linux上的,所以贫穷如我先切换到了linux然后安装了一通,安装命令如下:
$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ make
这三行分别是从github中下载文件,解压并编译安装
然后我们就可以用命令开始训练了:
./fasttext supervised -input inputfile.txt -output model -dim 2
model.bin
在当前目录中创建包含训练分类器的文件。训练之后,导入测试集,然后命令行会直接输出测试结果:
共勉
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。