上一篇讲到,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. mybatis注解@selectKey对于db2数据库的使用

    在新增时返回当前新增的主键. 数据库:DB2 用的是mybatis的@selectKey 代码: @InsertProvider(type = Test.class,method="inse ...

  2. filter过滤器实现特殊字符转义

    web.xml <!-- 特殊字符转义或转换 --> <filter> <filter-name>XssFilter</filter-name> < ...

  3. docker日志输出文件大小设置以及文件个数限制

    问题描述: 今天有同事运行了一个docker容器,不多时就导致宿主机硬盘直接撑爆,消耗了120G,发生的很是突然. 问题排查: 后续查阅资料,发现是因为docker中的某个进程一直在持续输出,而这些输 ...

  4. python解析网页中js动态添加的内容

    https://www.cnblogs.com/asmblog/archive/2013/05/07/3063809.html https://www.zhihu.com/question/21471 ...

  5. iOS开发 检测版本更新

    iOS开发 检测版本更新的实现 苹果给了我们一个接口,能根据应用id请求一些关于应用的信息.我们可以根据返回的信息,来判断版本是否和应用的版本一致,如果不一致,那么就出现新的版本了.这时,就需要向用户 ...

  6. NBUT 1457 Sona (莫队算法)

    题目大意: 求一段区间内 出现的数字的次数的三次方的和 思路分析: 这要水过去的题目真是难,各种优化. 不能用map , 要离散化之后 先处理lowerbound. 优化输入. . . 时间卡的非常紧 ...

  7. 高速清除winXP系统中explorer.exe病毒

    关于这个explorer.exe病毒.是眼下xp最为常见的一个病毒,会大量的消耗系统资源,造成电脑特别的卡顿. 1.关闭还原(假设没有,则跳过),为的是防止我们改动后,还原之后又回来了. 2.打开注冊 ...

  8. EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体server,EasyPlayer手机播放器

    在不断进行EasyDarwin开源流媒体server的功能和性能完好的同一时候,我们也配套实现了眼下在安防和移动互联网行业比較火热的移动端手机直播方案,主要就是我们的 EasyPusher直播推送项目 ...

  9. 解决查询access数据库含日文出现“内存溢出”问题

    ACCESS有个BUG,那就是在使用 like 搜索时如果遇到日文就会出现“内存溢出”的问题,提示“80040e14/内存溢出”. 会出问题的SQL: where title like '%" ...

  10. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...