fastText

Fasttext最大的特点是模型简单,只有一层的隐层以及输出层,因此训练速度非常快,在普通的CPU上可以实现分钟级别的训练,比深度模型的训练要快几个数量级。

输入层:为了将word order考虑进来,fastext使用了N-gram feature。这些输入是n-gram向量,这些向量是随机生成的。由于n-gram的量远比word大的多,完全存下所有的n-gram也不现实。Fasttext采用了Hash桶的方式,把所有的n-gram都哈希到buckets个桶中,哈希到同一个桶的所有n-gram共享一个embedding vector。(CBOW的输入是目标单词的上下文并进行one-hot编码)

输入向量

隐层:对于cbow,简单的求和;对于fastText,隐层是由输入层求和并平均乘以权重矩阵A得到的。相当于将各个词向量加权求和,作为该句子的vector。(CBOW会将上下文单词向量叠加起来并经过一次矩阵乘法(线性变化)并应用激活函数)

输出层:由隐层乘以权重矩阵B得到的。

trick :1. 为保留一定的次序信息,引入n-gram 

2. 层次softmax 的应用。思想实质上是将一个全局多分类的问题,转化成为了若干个二元分类问题,从而将计算复杂度从O(V)降到O(logV)。每个二元分类问题,由一个基本的逻辑回归单元来实现。如下图所示,从根结点开始,每个中间结点(标记成灰色)都是一个逻辑回归单元,根据它的输出来选择下一步是向左走还是向右走。下图示例中实际上走了一条“左-左-右”的路线,从而找到单词w₂。而最终输出单词w₂的概率,等于中间若干逻辑回归单元输出概率的连乘积。

层次softmax结构

一是如何构造每个逻辑回归单元的输入,另一个是如何建立这棵用于判断的树形结构。

逻辑回归单元的参数

每个逻辑回归单元中,sigmoid函数所需的输入实际上由三项构成  
隐藏层的输出、中间结点对应向量以及路径取向函数为输入,相乘后再经过sigmoid函数,得到每一步逻辑回归的输出值。

霍夫曼树的构造

霍夫曼树构造方法

在做Hierarchical Softmax之前,我们需要先利用所有词汇(类别)及其频次构建一棵霍夫曼树。这样,不同词汇(类别)作为输出时,所需要的判断次数实际上是不同的。越频繁出现的词汇,离根结点越近,所需要的判断次数也越少。从而使最终整体的判断效率更高。

参考:

https://www.jiqizhixin.com/articles/2018-06-05-3

http://albertxiebnu.github.io/fasttext/

你可能感兴趣的:(fastText)