上一篇讲到,fastText在训练数据中过拟合的问题。接下来将介绍一些提高fastText泛化能力的尝试。

模型泛化
使用过fastText的人,往往会被它的很多特性征服,例如训练速度、兼具word embedding和分类等。但是正如一个硬币有正反两面,fastText也并非完美,fastText的泛化性是它的短板。

增加正则项
在Logistic Regression中,调节正则项能够提高模型的泛化性能。通过上一篇博客可知,fastText的代价函数是:

L(d,h)=−∑i=1CyilogPi=−∑i=1CyilogeθTih∑Cj=1eθTjh
L(d,h)=−∑i=1Cyilog⁡Pi=−∑i=1Cyilog⁡eθiTh∑j=1CeθjTh
增加正则项后,代价函数:

L(d,h)=−∑i=1CyilogPi+λ∑i=1V∥wi∥+μ∑j=1C∥θj∥
L(d,h)=−∑i=1Cyilog⁡Pi+λ∑i=1V‖wi‖+μ∑j=1C‖θj‖
此时词向量的更新方式变为:

wj=wj−η∑i=1C(Pi−yi)θi−λwj, j=1,2,...,L
wj=wj−η∑i=1C(Pi−yi)θi−λwj, j=1,2,...,L
增加了正则项后,同一个句子的词向量无法按照相同的方向更新,词向量间的相似便无法保证。此时,fastText与常见的前馈神经网络(DNN)没有任何差别,它的很多优秀的特质全部丧失了。个人猜测,这是Mikolov大神为什么没有在word2vec或者fastText中增加正则项的原因。

Dropout
Dropout是常见的增加神经网络泛化性能的trick,它按照一定的概率将神经网络单元暂时从网络中丢弃。fastText作为一种浅层神经网络,能够加入dropout的地方非常有限:

在唯一的隐层,增加dropout,即hidden=dropout(1n∑ni=1wi)hidden=dropout(1n∑i=1nwi)
在输入层增加dorpout,即hidden=1n∑ni=1dropout(wi)hidden=1n∑i=1ndropout(wi)。在输入层dropout中,有两种方法:
按照概率,随机干掉某个词
按照概率,随机干掉某个词的某个维度
在微博场景下,第二种方法的第一个子方法是最好的,即按照概率,随机干掉某个词。在引入dropout时,最开始通过等概率干掉某个词,即

dropout(wi)={wi  if p>t0 otherwise
dropout(wi)={wi  if p>t0 otherwise
经过试验发现效果不好,模型对于某些关键词的学习效果不佳,例如上面提到的皮肤问题。考虑到微博广告文本中有许多强特征(关键词),它们的存在干扰了模型的泛化能力,因此等概率dropout是不适用的,需要一种不等概率的dropout——category dropout,简记为cdropout。在cdropout中,某个词被干掉的概率与它在某个类别的出现频率相关:

cdropout(c,wi)={wi  if p>1−t(c,i)0  otherwise
cdropout(c,wi)={wi  if p>1−t(c,i)0  otherwise
其中cc表示训练样本的类别,t(c,i)t(c,i)表示词ii在类别cc中的阈值。设计t(c,i)t(c,i)时,需要考虑两个问题:

cdropout会干掉那些强特征,使模型能够从剩余的句子中,寻找有用的信息。
模型会把某些无用的词当作特征。
基于上述两个问题,t(c,i)t(c,i)的形式如下:

t(c,i)=max(0.5,log7n(c,i)10)
t(c,i)=max(0.5,log7n(c,i)10)
其中n(c,i)n(c,i)表示词ii在类别cc中出现的概率。t(c,i)t(c,i)既保证强特征不会被完全干掉,也使模型能够从剩余的句子中寻找有用的信息。使用上述方法后,fastText对于关键词的预测效果如下所示:

关键词 类别
祛痘 label祛痘 1.00001 label邮政业务 1e-05 label买点卡 1e-05
痘痘 label祛痘 1.00001 label邮政业务 1e-05 label买点卡 1e-05
黑头 label祛痘 1.00001 label邮政业务 1e-05 label买点卡 1e-05
长痘 label祛痘 1.00001 label邮政业务 1e-05 label买点卡 1e-05
痤疮 label祛痘 1.00001 label邮政业务 1e-05 label买点卡 1e-05
痘坑 label祛痘 1.00001 label邮政业务 1e-05 label买点卡 1e-05
皮肤问题 label美甲美瞳 1.00001 label祛痘 1.05769e-05 label美发护发 1.00299e-05
关键词 类别
婚纱照 label美甲美瞳 1.00001 label祛痘 1.05769e-05 label美发护发 1.00299e-05
婚纱照 label旅行跟拍 0.549722 label婚纱摄影 0.450298 label邮政业务 1e-05
相册 label婚纱摄影 1.00001 label邮政业务 1e-05 label买点卡 1e-05
拍一套 label旅行跟拍 1.00001 label邮政业务 1e-05 label买点卡 1e-05
婚照 label婚纱摄影 1.00001 label邮政业务 1e-05 label买点卡 1e-05
样片 label婚纱摄影 1.00001 label祛痘 1.00004e-05 label美甲美瞳 1.00003e-05
金夫人 label婚纱摄影 1.00001 label减肥瘦身 1.00005e-05 label美发护发 1.00002e-05
客片 label婚纱摄影 1.00001 label旅行跟拍 1.00002e-05 label国内游 1e-05
显然,加入cdropout后,类别准确度有了长足的进步。与此同时,cdropout也兼顾了词的余弦相似度

祛痘
黑头 0.962714
粉刺 0.941785
痤疮 0.941042
毛孔 0.939662
痘坑 0.937129
长痘 0.934889
青春痘 0.915363
痘 0.910426
痘痘 0.910171
祛 0.909382
1
2
3
4
5
6
7
8
9
10
11
婚纱照
摄 0.921392
婚照 0.905441
海景 0.848199
造 0.832112
全送 0.831038
婚纱 0.826123
夜景 0.818146
放大 0.81653
视觉 0.807251
这座 0.804767
1
2
3
4
5
6
7
8
9
10
11
可见cdropout,不仅提高了模型的泛化性能,而且保证了fastText的很多优秀特质。

总结
通过cdropout,fastText的泛化性能得到了长足的进步,但是对于实际场景,尤其是微博短文本场景,依然是不够。在实际应用中,我们做了很多模型以外的工作,例如规则、爬虫等等。希望这三篇博客,能够对你有所帮助!吃饭去喽~

---------------------
作者:cptu
来源:CSDN
原文:https://blog.csdn.net/ackclinkz/article/details/81907903
版权声明:本文为博主原创文章,转载请附上博文链接!

fastText(三):微博短文本下fastText的应用(二)的更多相关文章

  1. fastText(二):微博短文本下fastText的应用(一)

    众所周知,微博中的内容以短文本居多,文本内容随意性极强,这给建模增加了很大的难度.针对这一问题,这里分享一下fastText在微博短文本的应用. 任务目标简单介绍一下整个任务的目标:给微博内容打上标签 ...

  2. 文本情感分析(二):基于word2vec、glove和fasttext词向量的文本表示

    上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...

  3. JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题

    JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...

  4. java清除所有微博短链接 Java问题通用解决代码

    java实现微博短链接清除,利用正则,目前只支持微博短链接格式为"http://域名/字母或数字8位以内"的链接格式,现在基本通用 如果链接有多个,返回结果中会有多出的空格,请注意 ...

  5. 【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)

    转自: URL短地址压缩算法 微博短地址原理解析 (Java实现) 最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没 ...

  6. CSS 文本下划线 text-decoration

      定义和用法 text-decoration 属性规定添加到文本的修饰. 可能的值 值 描述 none 默认.定义标准的文本. underline 定义文本下的一条线. overline 定义文本上 ...

  7. 文本主题模型之LDA(二) LDA求解之Gibbs采样算法

    文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 本文是LDA主题模型的第二篇, ...

  8. Android平台下利用zxing实现二维码开发

    Android平台下利用zxing实现二维码开发 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描库主要有zxing和zbar,zbar在iPos平 ...

  9. CentOS下Docker与.netcore(二) 之 Dockerfile

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

随机推荐

  1. 快速上传到rackspace cdn工具turbolift swift 安装

    快速上传到rackspace cdn 工具安装,2步即可完成: 1.安装git CentOS的yum源中没有git,只能自己编译安装,现在记录下编译安装的内容,留给自己备忘. 确保已安装了依赖的包 y ...

  2. 一步步走向国际乱码大赛-- 恶搞C语言

    大家都一直强调规范编码.可是这个世界上有个大师们娱乐的竞赛--国际乱码大赛. 能写出来的都是对语言深入了解的master.我从没想自己也能"恶搞"C,一直都是老老实实编码.就在前几 ...

  3. 一道题目- Find the smallest range that includes at least one number from each of the k lists

    You have k lists of sorted integers. Find the smallest range that includes at least one number from ...

  4. 带您了解Oracle层次查询

    http://database.51cto.com/art/201010/231539.htm Oracle层次查询(connect by )是结构化查询中用到的,下面就为您介绍Oracle层次查询的 ...

  5. 64-bit Itanium与x64

    64-bit Itanium是什么意思 64-bit Itanium,指的是intel 安腾处理器,intel安腾处理器是Intel的某一代处理器,当然是在酷睿(即core)这一代之前出来的. ora ...

  6. BUPT复试专题—最近公共祖先(2014软院)

    题目描述 给出一棵有N个节点的有根树TREE(根的编号为1),对于每组查询,请输出树上节点u和v的最近公共祖先. 最近公共祖先:对于有向树TREE的两个结点u,v.最近公共祖先LCA(TREE u,v ...

  7. Autolayout和VFL

    Autolayout,開始于iOS6.0   一.什么时候用autolayout比較适合   1.不负责任的骑墙派说法:apple的设备越来越多了,你的应用应该都使用al. (而且用sb)   2.要 ...

  8. SQL server创建和管理

    数据库函数的应用 数据库的查询方法 修改和替换数据库的数据

  9. 细说linux IPC(三):mmap系统调用共享内存

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途]         前面讲到socket的进程间通 ...

  10. html使用代码大全

    <DIV style="FONT-SIZE: 9pt">1)贴图:<img src="图片地址">1)首行缩进2格:<p styl ...