zoukankan      html  css  js  c++  java
  • NLP经典模型入门-FastText

    前言:笔者之前是cv方向,因为工作原因需要学习NLP相关的模型,因此特意梳理一下关于NLP的几个经典模型,由于有基础,这一系列不会关注基础内容或者公式推导,而是更侧重对整体原理的理解。顺便推荐两个很不错的github项目——开箱即用的中文教程以及算法更全但是有些跑不通的英文教程

    一. fasttext模型的目的以及预备知识

    fasttext是facebook提出的一个文本分类工具(也可用于词向量计算),优势是:

    • 在浅层训练上取得了和一些深层网络类似的精度
    • 训练速度比较快

    1. 分层softmax

    即YOLOv2中提过的类别数,主要为了解决词向量维度比较大的问题,如下图:

    img

    计算y2的类别只需要计算三次二分类逻辑回归然后把概率相乘即可,分层softmax计算的是条件概率

    2. n-gram特征

    文本特征生成的一种算法,即按照滑动窗口方法按照字节顺序滑动出长度为N的字节片段序列,例如取N=2,对今天天气非常晴朗,可以得到:

    今天,天天,天气,气非,非常,常晴,晴朗(字粒度)

    今天/天气,天气/非常,非常/晴朗(词粒度)

    二. fasttext实现

    1. fasttext采用字符级别的n-gram去表示一个单词,例如apple就可以由如下特征组成:“<ap”, “app”, “ppl”, “ple”, “le>”,这样做的好处是:
      • 对于一些高度类似的单词,比如apple和apples,它们的特征会有很多重叠的部分,可以复用;而且低频词可以由于特征重复获益
      • 对于训练库以外的单词,也可以尝试构建词向量
    2. fasttext的一个网络结构的简单示意图如下,具体输入以及网络见下部分分析

    img

    三. FastText的输入以及结构

    1. 获取词表,词表分为char级别和word级别,可以视作字典,其中key是所有可能的char或者word,而value则是其对应的id;假设此处词表的长度为D,即最多有D个不同的char或word
    2. 对输入语句进行分为1中的char或者word,即分词;根据1中每个char或者word的id,原句从文字转化为一串数字,称之为词向量,一般来说转化后的词向量是定长的,所以要短补长截
    3. n-gram特征的生成:
      • n-gram特征也是向量,它的每个元素也是从一个n-gram词表中得到的,词表的大小是一个超参,假设n-gram词表的长度为B
      • n-gram可以同时使用多个,比如n=2的bigram以及n=3的trigram
      • 一般来说,n-gram词表的构建需要人为定义一个关系。以n=2的bigram为例,用一个大小为2的滑动窗口遍历词向量,窗口内是一个二维数组[a, b],其中a和b都是词向量中的元素,因此它们大于等于零小于D;我们要将[a, b]映射到一个整数b_id上,b_id大于等于零,小于B……映射方式可以自己定义,比如相乘取余等。滑动窗口如果需要应该在两边补零以保证生成的gram特征的长度和词向量特征的长度相同
    4. embedding:词向量和多个n-gram特征向量都需要做embedding,embedding可以使用预训练网络或者随机初始化;embedding会改变大小,以bs=128,词向量长度V=32为例,输入的特征都是128x32的,可以手动设定一个映射维数的超参,比如300,则映射后tensor大小变成128x32x300,元素也从原来的正整数变为小数
    5. 网络结构:连缀所有向量,并在词向量长度V的维度上取平均值作为特征表示;可以设定1~2个fc层和dropout层最后得到分类概率
  • 相关阅读:
    linux 命令——48 watch (转)
    linux 命令——47 iostat (转)
    linux 命令——46 vmstat(转)
    linux 命令——45 free(转)
    linux 命令——44 top (转)
    linux 命令——43 killall(转)
    linux 命令——42 kill (转)
    linux 命令——41 ps(转)
    linux 命令——40 wc (转)
    Java for LeetCode 068 Text Justification
  • 原文地址:https://www.cnblogs.com/lity/p/13454860.html
Copyright © 2011-2022 走看看