NLP经典模型入门-FastText

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NLP经典模型⼊门-FastText
前⾔:笔者之前是cv⽅向,因为⼯作原因需要学习NLP相关的模型,因此特意梳理⼀下关于NLP的⼏个经典模型,由于有基础,这⼀系列不会关注基础内容或者公式推导,⽽是更侧重对整体原理的理解。

顺便推荐两个很不错的github项⽬——以及。

⼀. fasttext模型的⽬的以及预备知识
fasttext是facebook提出的⼀个⽂本分类⼯具(也可⽤于词向量计算),优势是:
在浅层训练上取得了和⼀些深层⽹络类似的精度
训练速度⽐较快
1. 分层softmax
即YOLOv2中提过的类别数,主要为了解决词向量维度⽐较⼤的问题,如下图:
计算y2的类别只需要计算三次⼆分类逻辑回归然后把概率相乘即可,分层softmax计算的是条件概率
2. n-gram特征
⽂本特征⽣成的⼀种算法,即按照滑动窗⼝⽅法按照字节顺序滑动出长度为N的字节⽚段序列,例如取N=2,对今天天⽓⾮常晴朗,可以得到:
今天,天天,天⽓,⽓⾮,⾮常,常晴,晴朗(字粒度)
今天/天⽓,天⽓/⾮常,⾮常/晴朗(词粒度)
⼆. fasttext实现
1. fasttext采⽤字符级别的n-gram去表⽰⼀个单词,例如apple就可以由如下特征组成:“<ap”, “app”, “ppl”, “ple”, “le>”,这样做的好处是:
对于⼀些⾼度类似的单词,⽐如apple和apples,它们的特征会有很多重叠的部分,可以复⽤;⽽且低频词可以由于特征重复获益
对于训练库以外的单词,也可以尝试构建词向量
2. fasttext的⼀个⽹络结构的简单⽰意图如下,具体输⼊以及⽹络见下部分分析
三. 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层最后得到分类概率。

相关文档
最新文档