zoukankan      html  css  js  c++  java
  • fastText入门

    简介
    fastText是Facebook AI Research在2016年提出的文本分类和词训练的工具。它最大的特点:模型非常简单,训练速度快,并且能够达到与深度学习旗鼓相当的精度。

    最近在做一个给微博内容分类的项目,主要目的是给微博打上商业标签。这个项目是一个经典的多分类任务,传统的方法包括:SVM、TextCNN、LSTM等。上面这些方法都略有尝试,而大名鼎鼎的fastText一直没有尝尝鲜,正好借此机会尝尝鲜。

    原理
    fastText主要有两个功能:训练词向量和文本分类。除此之外,它的训练中还考虑了N-gram。

    训练词向量
    word2vec的训练粒度是词语,而fastText进一步考虑了subword粒度。subword是一种character-level的n-gram。例如使用tri-gram,那么词语where可以分解成:

    文本分类
    若熟悉Continuous Bag of Words(CBOW)的模型结构,你会发现它完全有潜力扩展成一个分类模型:

    上图左边是word2vec中CBOW的结构,右边是fastText的结构。两类模型的结构区别是:

    CBOW使用context(wt−2,wt−1,...,wt+1,wt+2wt−2,wt−1,...,wt+1,wt+2)作为模型输入,而fastText使用document的词(w1,w2,...,wnw1,w2,...,wn)。
    fastText使用label作为学习目标,而CBOW使用wtwt。
    总结而言,学习目标是造成模型结构不同的决定性因素,即fastText是有监督模型,而word2vec是无监督模型。

    在上述模型结构下,hidden层的计算方式是:

    hidden=1n∑i=1nwi
    hidden=1n∑i=1nwi
    由于分类是模型的最终目标,因此需要一个从hidden层到label的映射,常见的映射方法:

    Softmax
    Hierarchical Softmax
    Noise Contrastive Estimation
    Negative Sampling
    上述方法中,softmax是常见的多分类分类器,其余三种均是对Softmax的近似(通过近似计算,避免过大的归一化代价)。关于Softmax的近似计算,我会在以后的博客中介绍,这里介绍Softmax在fastText的应用。基于Softmax的fastText,其代价函数如下所示:

    loss=−1N∑i=1N∑j=1M1(yi=j)log(y^ij)
    loss=−1N∑i=1N∑j=1M1(yi=j)log(y^ij)
    其中:

    y^i=softmax(hiddeni)
    y^i=softmax(hiddeni)
    N-gram特征
    根据上面的介绍,fastText本质上仍是一类基于词袋(bag-of-words)的分类模型,而丢失词顺序是词袋模型最受人诟病的地方。在词袋模型中,常见增加词顺序信息的方法是N-gram。但是增加N-gram的方法,将带来词典包含大量的词汇,进而导致内存溢出。为了解决此类问题,fastText采用了Hash桶的方式,把所有的N-gram哈希到buckets中,哈希到同一个bucket内的n-gram共享一个vector。具体实现过程如下所示:

    为了更好的表述,如何将n-gram特征转化为hidden层,这里举一个例子。假设一个文本由三个词组成w1w1,w2w2,w3w3,其bigram是w12w12,w23w23,那么此时hidden层的计算公式如下所示:

    hidden=15(w1+w2+w3+w12+w23)
    hidden=15(w1+w2+w3+w12+w23)
    结语
    以上便是fastText的基本原理,接下来将介绍fastText在微博中的应用。

    [1] 玩转fastText
    [2] P. Bojanowski*, E. Grave*, A. Joulin, T. Mikolov, Enriching Word Vectors with Subword Information
    [3] A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, Bag of Tricks for Efficient Text Classification
    [4] facebookresearch/fastText
    ---------------------
    作者:cptu
    来源:CSDN
    原文:https://blog.csdn.net/AckClinkz/article/details/81907555
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/ExMan/p/10142483.html
Copyright © 2011-2022 走看看