fastText原理学习

fastText的组成包含三部分:模型架构、层次Softmax和N-gram特征

一、Softmax回归(Softmax Regression):

多项逻辑回归(multinomial logistic regression),是逻辑回归在处理多类别任务上的推广,用于解决多分类问题

逻辑回归中:m个被标注的样本:\left \{ (x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)}) \right \},其中x^{(i)} \epsilon R^{n}。由于类标是二元的,所以,y^{(i)} \epsilon \left \{ 0,1 \right \}

假设(hypothesis)如下:

h_{\theta } = \frac{1}{1 + e^{-\theta ^{T}x}}

代价函数(cost function)如下 类标y可取k个不同的值,类别下标从1开始:

J(\theta ) = - \frac{1}{m} \left [ \sum_{i=1}^{m}y^{(i)}logh_{\theta }(x^{(i)}) + (1 - y^{(i)})log(1 - h_{\theta }(x^{(i)})) \right ]

对于训练集,y^{(i)} \epsilon \left \{ 1,2,...,K \right \}

给定测试输入x,想估计x的每一种分类(j)结果出现的概率(p(y = j | x)),就要假设函数将要输出一个k维的向量(向量元素的和为1)来表示k个估计的概率值

假设函数h_{\theta }\left ( x \right )形式如下:

h_{\theta }\left ( x \right ) = \begin{bmatrix} P(y = 1 | x;\theta )\\ P(y = 2 | x;\theta )\\ ...\\ P(y = K | x;\theta )\\ \end{bmatrix} = \frac{1}{\sum_{j=1}^{K}e^{\theta_{j}^{T} x^{(i)}}}\begin{bmatrix} e^{\theta_{1}^{T}x^{(i)}}\\ e^{\theta_{2}^{T}x^{(i)}}\\ ...\\ e^{\theta_{K}^{T}x^{(i)}}\\ \end{bmatrix}

注意:\frac{1}{{\sum_{j=1}^{K}e^{\theta_{j}^{T} x^{(i)}}}},是对概率分布进行归一化,使得所有概率之和为1

1{值为真的表达式} = 1

1{值为假的表达式} = 0

代价函数为:

J(\theta ) = - \frac{1}{m}\left [ \sum_{i=1}^{m}\sum_{j=1}^{k} 1\left \{ y^{i} = j \right \} log\frac{e^{\theta _{j}^{T}x^{(i)}}}{\sum_{l=1}^{k}e^{\theta ^{_{l}^{T}}x^{(i)}}}\right ]

上式是logistic回归代价函数的推广。逻辑回归是softmax回归在K=2是的特例

二、分层softmax:

要计算 y = j 时的Softmax概率:P(y = j),我们需要对所有的K个概率做归一化处理,非常耗时,

分层Softmax的基本思想:

使用树的层级结构代替扁平化的标准Softmax,使得计算P(y = j)时,只需计算一条路径上的所有节点你的概率值

示例:(树的结构是根据类标的聘书构造的霍夫曼树,K个不同的类标组成 所有的叶子节点,K-1个内部节点为内部参数,

从根节点到某个叶子节点经过的节点和边形成一条路径,路径长度被表示为L(y_{j})

所以P(y_{j})可被写成:

其中

ææ¯å¹²è´§ä¸¨fastTextåçåå®è·µ 表示sigmod函数;

LC(n) 是n节点的左孩子

[[x]] 是一个特殊的函数,被定义为:ææ¯å¹²è´§ä¸¨fastTextåçåå®è·µ

ææ¯å¹²è´§ä¸¨fastTextåçåå®è·µ 是中间节点 ææ¯å¹²è´§ä¸¨fastTextåçåå®è·µ的参数,X是Softmax层的输入

上图中,高亮的节点和边是从根节点到 技术干货丨fastText原理及实践 的路径,路径长度

从根节点走到叶子节点技术干货丨fastText原理及实践,实际上是在做了3次二分类的逻辑回归,通过分层的Softmax,将计算的复杂度由|K|降到log|K|。

三、 n-gram特征:

eg: 

1. n-grm 字粒度:

我参与了这个项目的开发

相应的bigram特征为:我参 参与 与了 了这 这个 个项 项目 目的 的开 开发

相应的trigram特征为:我参与 参与了 与了这 了这个 这个项 个项目 项目的 目的开 的开发

2. n-gram 词粒度:

我 参与了 这个 项目的 开发

相应的bigram特征为:我/参与了  参与了/这个  这个/项目 项目的/开发

相应的trigram特征为:我/参与了/这个 参与了/这个/项目 这个/项目的/开发

为什么使用n-gram:

传统的word2vec把语料苦衷的每个单词当成原子的,会为每个单词生成一个向量,使得它忽略了单词内部的形态特征

n-gram来表示一个单词“apple”,假设n的取值为3,则它的trigram有:

"<ap" , "app" , "ppl", "ple", "le>"     <表示前缀,>表示后缀,5个trigram的向量叠加起来就可以表示“apple”

优点:

1.对于低频词生成的词向量效果会更好,因为它们的n-gram可以和 其它词共享

2.对于训练词库之外的单词,仍然可以构建它们的词向量,我们可叠加她们的字符级n-gram向量

模型架构(与word2vec的CBOW模型相似,见下一节):

架构图(输入层、隐含层、输出层):

输入: 多个经向量表示的单词(多个单词及其n-gram特征,这些特征用来表示单个文档,输入特征被embedding(词嵌入)过);

输出: (采用Softmax,大大降低了模型训练时间)一个特定的target;隐含层: 对多个词向量的叠加平均

核心思想:

仔细观察模型的后半部分,即从隐含层输出到输出层输出,会发现它就是一个softmax线性多类别分类器,分类器的输入是一个用来表征当前文档的向量;模型的前半部分,即从输入层输入到隐含层输出部分,主要在做一件事情:生成用来表征文档的向量。那么它是如何做的呢?叠加构成这篇文档的所有词及n-gram的词向量,然后取平均。叠加词向量背后的思想就是传统的词袋法,即将文档看成一个由词构成的集合。

fastText的核心思想就是:将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。

实践(生产版fastText):https://github.com/facebookresearch/fastText

demo版:

ææ¯å¹²è´§ä¸¨fastTextåçåå®è·µ

from: http://www.52nlp.cn/fasttext

猜你喜欢

转载自blog.csdn.net/Coco_wjy/article/details/83655006