当前位置:   article > 正文

FastText模型原理_fasstest模型

fasstest模型

FastText简介

预备知识

N-gram模型

对句子或单词的所有长度为N的子句或子字符串进行操作,如2-gram中,对“girl”的字符串为“gi”,“ir”,"rl"进行操作,通常有操作如下:

  • 比较两个单词的相似度,即按照公式根据子字符串的匹配情况计算出相似度,常用于模糊匹配、单词纠错等
  • 评估句子是否合理,将句子定义为N阶马尔科夫链,即 P ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) = P ( w i ∣ w i − N + 1 , . . . , w i − 1 ) ​ P(w_i|w_1,w_2,...,w_{i-1})=P(w_i|w_{i-N+1},...,w_{i-1})​ P(wiw1,w2,...,wi1)=P(wiwiN+1,...,wi1),根据语料库得到的条件概率可求得句子出现在该语料库中的概率,常用于搜索引擎中输入提示、文本自动生成等

CBOW模型

是把单词的高维稀疏的one-hot向量映射为低维稠密的表示的方法。

模型架构如下:

(此处有图)

  • 输入:给定词的上下文共 C C C 个单词,每个单词由 V V V 维的一个1-of-V的向量表示,即

{ x 1 , x 2 , . . . , x c − 1 , x c } \{x_1,x_2,...,x_{c-1},x_c\} {x1,x2,...,xc1,xc}

  • 映射:每个单词乘以一个 ( V , N ) (V,N) (V,N) 的输入矩阵 W W W,求和得到一个 N N N 维的中间向量 h h h,即

h = 1 C ∑ i = 1 C x i W h = \frac{1}{C}\sum_{i=1}^C x_iW h=C1i=1CxiW

  • 输出: h h h 乘以一个 ( N , V ) (N,V) (N,V) 的输出矩阵 W ′ W' W,得到一个 V V V 维向量,每一维做 s o f t m a x softmax softmax得到这个单词出现的概率,选择其中最大的 C C C 个作为输出

V o u t = h W ′ = [ u 1 , u 2 , . . . , u V ] V_{out}=hW'=[u_1,u_2,...,u_V] Vout=hW=[u1,u2,...,uV]

y i = e x p ( u i ) ∑ j = 1 V e x p ( u j ) y_i=\frac{exp(u_i)}{\sum_{j=1}^V exp(u_j)}\\ yi=j=1Vexp(uj)exp(ui)

FastText模型

[1]中提出了FastText模型,类似CBOW模型,使用n-gram特征代替单个词的特征,提取序列信息,效果与深度学习分类器持平,但速度快得多。其模型架构如下:

  • 对整篇文档的n-gram特征,计算词向量,取平均得到文档的向量表示
  • 将上述文档向量作为线性分类器的输入,并使用层次softmax计算文档属于每个类别的概率
    • 将所有类别按照频率构建哈夫曼二叉树,每次对两个类别进行二分类(如使用LR),决定走左子树或右子树,将复杂度由线性降低为对数
  • 损失函数为对数似然函数取负,即

m i n − 1 N ∑ i = 1 N y i l o g ( f ( B A x i ) ) 其 中 , x i 为 第 i 个 文 档 正 则 化 / 规 范 化 后 的 特 征 向 量 ( b a g    o f    f e a t u r e s ) A 和 B 是 两 个 权 重 矩 阵 min-\frac{1}{N}\sum_{i=1}^N y_ilog(f(BAx_i))\\ 其中,x_i为第i个文档正则化/规范化后的特征向量(bag\ \ of\ \ features)\\ A和B是两个权重矩阵 minN1i=1Nyilog(f(BAxi))xii/bag  of  featuresAB

NCE loss(noise-contrastive estimation),噪声对比估计。

在词向量的生成过程中,用的loss函数是NCE或negative sampling,而不是常规的softmax。在《learning tensorflow》这本书中,作者这样说道:but it is sufficient to think of it (NCE) as a sort of efficient approximation to the ordinary softmax function used in classification tasks。由此看来,NCE是softmax的一种近似,但是为什么要做这种近似,而不直接用softmax呢?

当类别数很大时(CBOW中是单词数),softmax复杂度很高,为了更高效地进行,将softmax计算过程转化为二分类(LR)。具体地,将单词与真实类别的true pair、单词与随机类别的randomly corrupted pair送入分类器,待优化的分类器只需判断输入的pair是真或假即可。(主要思想与负采样和层次softmax相同)

Word2Vec slightly customizes the process and calls it negative sampling.

def nce_loss(weights, #[num_classes, embed_size]
             biases,  #[num_classes]
             inputs,  #[vocab_size, embed_size]
             labels,  #[vocab_size, num_true]
             num_sampled, num_classes, num_true=1,
             sampled_values=None,
             remove_accidental_hits=False,
             partition_strategy="mod",
             name="nce_loss")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

个人理解:对input中的每个词,选择对应的标签构成正样本对,再随机选择num_sampled个标签与该词构成负样本对。对每个单词对,在weights和biases中找到对应标签的w和b,用逻辑回归进行二分类,每个分类问题计算交叉熵

Reference

[1] Bag of Tricks for Efficient Text Classification

[2] 自然语言处理中的N-Gram模型详解

[3] https://github.com/brightmart/text_classification

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/242764
推荐阅读
相关标签
  

闽ICP备14008679号