qrfaction的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

本年爆款... Bidirectional Encoder Representations from Transformers

发表于 2018-10-14 | 分类于 NLP

这几天被BERT刷屏了
结果是真的好看,刷新了十一项记录,每项都有巨大改进…
下面分析一下这篇文章的工作

Input

这里写图片描述
一个句子对,即两个句子

  1. WordPiece Embedding
     这个东西是用来解决oov的word的,将部分单词拆成两个字词,如fued拆成fu,ed .
     具体怎么拆,拆哪些,用贪心算法搜索尽可能少的token去覆盖所有单词
  2. Segment Embedding
     区分是句子一还是句子二
  3. Position Embedding
     融入位置信息,学习得到
  4. cls是句子的类别信息,用于task2和其他任务(非分类任务可无视)
  5. [SEP]是句子的分隔符

下面是该论文的自监督任务的两个创新点

TASK1 #: MLM(masked language model)

随机屏蔽batchsize samples中一定量的单词,并去预测他 (完形填空)

  1. 使用bidirectional self-attention
     不使用rnn可能是因为网络很深不好训练.
     作者认为用单项模型然后两向使用再拼接不如直接双向来的自然,能更好的捕捉上下文信息
  2. 每次屏蔽每个句子中15%的单词
     (1)80%的概率将单词换为[mask]标记 , my dog is hairy → my dog is [MASK]
     (2)10%的概率将单词换为字表中其他单词 , my dog is hairy → my dog is apple
     (3)10%的概率不替换 , my dog is hairy → my dog is hairy
    具体为什么不是很清楚.. (2)可能是加噪缓解过拟合,(3)不知道了…

TASK2 #: NSP(Next Sentence Prediction)

由于输入的是一个句子对,所以这个任务是去判断句子二是否可作为句子一的下一句
这个任务的目的应该是学习句子之间的逻辑关系

summary

下图是在其他任务的微调方式
这里写图片描述

由于每次只屏蔽一部分
这比left2right收敛慢很多
一般来讲自监督的模型一般有比较好的泛化效果
然后结果也很惊人…

最后就是模型好大…用不起用不起…

NAACL2018 best paper ELMo

发表于 2018-10-13 | 分类于 NLP

ELMo 是NAACL2018的best paper
早就想读了了,攒着一直没读…

其实nn的文章看图能识个大概了,接着再细读其中细节
但这篇文章没图…

下面上一张自制的

ELMo结构与使用方式

这里写图片描述

如图,上面是ELMo的使用方式
将模型中word在LSTM中输出的中间态作为他的embedding

这里写图片描述
他自己则是一个多层双向语言自监督模型
正向预测和逆向预测word作为task,进行训练
这里写图片描述

这种设计个人认为有如下几点好处

  1. word在不同语境有不同意思,使用LSTM中间状态带入了上下文信息解决了语义歧义的问题
  2. biLSTM相比Glove,word2vec带入了语序信息
  3. biLSTM能捕捉一定的语法结构信息

使用方式

冷冻biLM模型
将他各个中间层的信息加权平均,再和普通的词向量concat
公式如下
这里写图片描述

stask是可训练且经过softmax归一化的权重
stask用于在不同任务下自适应调整高维还是低维的抽象信息
γ是缩放因子,对模型影响较大,可训练

Object Context Network for Scene Parsing

发表于 2018-10-02 | 分类于 CV

这是一篇应用了attention在图像分割的文章
文章本身很简单,感觉工作不多
最近在vqa工作中对attention体会很深,也创新了不少东西
在结束后再写篇博文吧

回到正文

整体架构

这里写图片描述

恩 … 整体框架还是无特别大的创新

Object Context

这里写图片描述

输出的C指context
P指Position embedding
X+P将位置信息融入feature map
再做个很普通的attention
就是以像素为单位,以余弦相关性作为相似度度量.
获得了context他的使用方式如下
这里写图片描述
配合hypercolumn或ASP

最后

其实感觉Context插入的很强行
self-attention其实有跨大距离依赖效果才比conv强的
相比于self-attention
分割这种感受野任务,给channel加attention(不同感受野feature map拼接后权重不同)效果更佳
效果也只有几个千分点的提升,表示质疑
朋友测试下效果也不是很好…

而且他的注意力是直接用softmax的
对于这么多像素做softmax 有效信息被无效信息覆盖的情况一般都很严重…
我严重怀疑这个和average效果差不多
他可以试试半hard半soft的attention

trick和创新点的碎碎念

发表于 2018-09-09 | 分类于 生活

最近一直在搞video qa
这是一个比较新的方向,论文总共找到不到三篇,天池的视频问答比赛似乎也是全球第一届

大家都是新手,一起开荒
前天和鹏哥聊着聊着看他有啥想法 .
最后聊到trick和创新度的问题

鹏哥说一篇好的论文不能缺少创新度,纯堆trick是不行的
我同意,但是,究竟哪些是创新点那些算trick呢

我做的六七个上分的大工作里排除已有的工作
私以为我的工作里并没有啥trick
或许我对trick的理解不大一样吧

如果在不太严格的条件下具有一定解释性的trick算不算创新点呢
我觉得算的

我认为的trick都是一些magic的leak
这些leak对实际意义起不到任何用处,但他就是能上分.
一些不具备通用性的调参技巧也算trick

现在大部分论文都靠搜索模型再加后向解释水了一个又一个会议
很难看到除模型之外的地方

2017 VQA Challenge 冠军的比赛报告是我比较喜欢的一篇文章
https://arxiv.org/pdf/1708.02711.pdf

除模型之外我个人认为的创新点有

  1. 涉及到了zero-shot思想的初始化
  2. 检测模型做 hard attention
  3. 先进的采样算法
    还有一些就是模型中的不具备通用性的trick了
    例如特定情况下适用的激活函数

聊到最后
其实我就是认为不管你学不学习,只要不作弊考到好分数都是好学生

trick具备通用性且后向解释能解释的通就好
通用性是前提,解释性可以稍稍靠后

Home Credit

发表于 2018-08-31 | 分类于 ML&DL

说起来这个比赛打起来体验极差…
线上线下琢磨不透…
时间上花了两周,最终结果single model cv 0.8004

开始三天在那抄抄dissussion和kernel里的代码拿到了cv 0.7963
后来觉得这样不行
后来花两天重构了下了代码,优化并行了特征生成部分
开始逐文件批量生成特征,再进行筛选 (毕竟一个变量名都看不懂)
接着效率大大提高,分数逐渐上升到8004
但是在这途中lb一直很差只有和cv差不多的分数
然后就丢了干别的比赛去了,打的烦啊,工作无聊机械,lb还上不去

最后一天把自己的oof和submit丢给队友就跑了
队友提交的最终cv是0.801吧

第八名的single model cv是0.799 集成804的样子
早知道最后一天随便跑跑了几个模型搞点儿差异性出来了…
小可惜,不过投入也不算多,不是特别心疼吧

这个比赛看下来搞特征的思路大多不是特别稀奇
强特的话批量找慢慢找都可以找出来的吧
主要是筛选工作和批量搜索的时候缩小搜索范围

我做的主要有

  1. 时间差分特征 xt - xt-1
  2. 趋势特征 过去一段时间内某变量的随时间变化趋势(即斜率)
  3. 趋势预测特征 用2所得的斜率预测当前值的预测值
  4. 一条record缺失值个数
  5. 特征分bin,计算各bin中的样本,数作为特征
  6. 一些条件概率,共现概率特征
  7. target encode
  8. 批量搜索单位具有实际意义的特征,例如 钱/钱 , 钱/次数 , 次数/次数 , 次数 - 次数, 时间-时间
    这么做的主要目的是减小搜索空间,毕竟几百个特征两两组合筛不过来呀

我的收益几乎都来8 …
后来工作没干完就跑了,恩…

还有一些其他的思路下面再讲

筛选主要是这样的:

我首先划定了top550收益的特征,因为划到550我的cv上升了
然后每次批量生成几百个特征的时候留下gain落在top300的特征
注意事项: 必须要尽量缩小特征的生成量,因为特征生成的太多,收益均摊到各个特征上,导致大部分特征收益都很接近
这时候不利于筛选

集成上虽然没做,但简单简述dissussion的magic集成思路
即用rank score进行集成
如果了解auc的话这个集成方式其实很容易想到

  1. 因为AUC是排序指标
    这种集成方式还有一个优势
  2. 因为不同的loss输出的预测值在[0,1]的方差不同,密度不同,期望也不同
    直接加权可能问题就很大了
    一种方式是把他们直接minmax缩放到[0,1],但这个没解决密度问题
    另一个很简单的思路就是把预测值投射到rank上

其他人的特征思路
对样本聚类500,然后用这个类别进行target encode
(话说聚类这东西我一直玩儿不溜,这东西到底能不能用自己每次都是试了才知道,所以要做都会堆到后期,没一点经验性的参考)
因为ext_1缺失值特别多,但他是重要特征,所以建立模型预测该特征作为新特征
这个带来收益也比较大

整个比赛里貌似只有第二名的方式是个亮点
他发现了样本以时间序排序,他用一些时间差分的特征如出生日期-上班日期等等特征得到了user_id
然后根据user_id和历史上下文信息对target进行编码得到了很大的提高
见https://www.kaggle.com/titericz/visualizing-user-ids

emmmmm 就这样吧

2018CVPR之Visual Question Answering with Memory-Augmented Networks阅读笔记

发表于 2018-08-14 | 分类于 CV

需求所致简单入门一下vqa

Sequential Co-Attention

如图所示
这是16年11月份一个序列协同注意力结构

这里写图片描述

直接放公式吧

这里写图片描述
这里写图片描述
这里写图片描述

思路比较简单
{qt} question(word sequence)
{vn} 是通过一个backbone后再reshape的”区域”序列
如vgg16 -> 1616512 -> 256*512 每个像素代表一个区域

然后对图片的每个区域以及question的每个时间步做相关性计算
获得注意力权重加权….

Memory Augmented Network

这里使用了Memory Network
是本文的创新点貌似

用(xt,yt)代表一个样本
t表示样本喂给模型的顺序

以LSTM 作为Memory Net的controller
ht = LSTM(xt , ht-1)
每次基于内容寻址
将ht与所有记忆单元计算相似度
这里写图片描述
然后用softmax规范化相似度作为权重
这里写图片描述
加权获得历史信息
这里写图片描述
与ht拼接放入分类网络

更新历史信息单元
这里写图片描述
结束

结语

作为一个放入VQA的小萌新
刷了几篇感觉好像比我想象中的要easy很多

数据增广思考

发表于 2018-07-29 | 分类于 ML&DL

魔镜杯中第二名的数据增广使用了mixup
但词向量空间是否满足和图像一致的插值的性质值得深思
下面是自己的一些收货

从答辩情况来看,数据增广成功的只有三个人
第一第二以及yin叔

首先是样本生成方式
第一没有明说他的方式
第二介绍了mixup
yin叔则直接利用了相似问题对的稀疏性,断言生成的样本不匹配

yin叔的方式确有理论保证性,
随便估计一下如果官方给的78w个问题中共有10000类
以这个计算约两万个样本中只有一个正例 …
可见生成的样本label噪声很小

而mixup不敢笃定
图像的数据增广里mixup虽不易证明
但是其生成的样本结果肉眼可得到其label也是线性组合

词向量空间是否满足此性质不知
第二的大致思路是
q1,q2相似,q2,q3不相似
则q1+q2与q3仍不相似
似乎没有生成正样本
这里难以确定到底是正样本的稀疏性带来的收益还的确是mixup
不过不能再提交了,我猜是稀疏性…
不过第二好像和yin叔吐槽没啥效果 (所以说mixup并没有成功?到底有无收益?做成的变成2个人?)
不过看过来第二的确似乎是堆了多种模型给他带来的收益
从我们一直使用一种模型来看,最后一天使用了两个结构比较相似的模型却带来了巨大的收益
模型结构差异带来的收益可能更为显著

其实以上都不是重点
我也做了很多数据增强
yin叔的那种方式我也做了
都会过拟合…

但还有一个值得注意的地方
前排和yin叔数据增强的方式都是先用原有数据集训练
再从生成的数据集上进行微调

而我要么是放入训练集一起训练
要么是先用生成的样本获得权重…

反过来会成功的原因有待深究…

这次比赛和yin叔探讨中还获得了一个很有价值的东西
我使用prob label过拟合的原因似乎不知道,线下涨两个百分点,线上掉三个千分点
但是yin叔在一个预估用户评分的任务中给label加了高斯噪声成功了

他的任务可以很清楚的看到label本身噪声很大
给label加高斯噪声并无多大影响,反而能控制过拟合

数据增强的几个trick论文一览

label加噪的论文在此,效果较为显著
DisturbLabel
https://arxiv.org/pdf/1605.00055v1.pdf
label加噪也可以认为是一种数据增广的方式

MixUp论文
https://arxiv.org/pdf/1710.09412.pdf

数据增强之CutOut
https://arxiv.org/pdf/1708.04552.pdf

魔镜杯比赛答辩PPT

发表于 2018-07-25 | 分类于 NLP

最终排名rank 6

自己团队的解决方案
此次比赛主要目的用于促进团队的感情…

答辩情况来看,我们的集成做的太烂了…
一直只有一种模型,最后一天才反应到吃亏搞出两种很相似的上了俩千分点
靠着半监督的优势撑了大半个比赛流程

单模型情况(似乎是最高的?)
纯模型 0.153-0.154
结构特征 0.151-0.152
半监督(伪标签) 0.1475

PPT里藏了部分细节和思考
昨天中午和yin叔讨论中发现一些细节,发现了数据增强做成的技巧,发现了概率标签的可能适用场景,虽然仍然不知道他为啥过拟合
现在看来数据增强做成功的有三组队伍,冠军队,亚军队,yin叔
yin叔只用一种模型不用结构特征到这个分数还是很佩服的
小幸运组的tfidf加权词向量有待尝试

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

Avito Demand Prediction Challenge比赛总结

发表于 2018-07-07 | 分类于 ML&DL

这个比赛我是快结束的时候参加了,想顺手捞一波名次
他对我最大的挑战就是试错成本太高太高了

树模型交叉验证五折要5-7天 = =
图片70G
各种特征生成也有几十个G = =

我总共打了15天
写代码占4天,接下来搞别的事情去了,代码挂着跑了11天
最终拿了top6%的成绩,这种情况下拿到这个成绩个人还是很满意的

因为时间短不说,调试周期还长(占我打的时间的1/3~1/2了)
不过现在看下来他们的大部分trick我都做到了,就是没时间搞细

特征工程

文本特征

自己的做法

  1. tfidf+char/word(稀疏矩阵存下来,几万维全部丢给树,svd效果会变差,大部分分数靠的是他)
  2. 地理位置信息用google api获取经纬度(没啥效果)

其他有价值的做法

  1. 用fastText的词向量替代tfidf矩阵
  2. 文本的一些统计特征,词数,字数等等

图像特征

自己的做法

  1. 图片的一些属性特征(写了没跑,因为具言效果不佳)
  2. vgg的卷积结束后global pool成向量svd分解(效果不佳),其实这里可能丢失语义信息了,或许从全连接那里抽比较好(没时间了)

其他有价值的做法

  1. 和我的2差不多类似换了基础网络resnet152,resnet34
  2. 还有一些图像的传统统计量亮度暗度(效果都不是很明显)
  3. 冠军用out-of-preditcion来微调resnet34 效果比较显著
  4. 预训练模型对图像进行分类作为特征(其实这个特征已经有了,所以比较冗余,不是很明显)

categorical & numerical

user_id和item_id 几乎一个样本一个id了,表示学习都没法了
而且user_id训练集测试集交集只有6%,item_id只有0%

自己的做法
1   用user_type和city的组合编码近似代表user
  用category,image_top_1等近似代表item
  获取邻接矩阵进行svd分解(分数提升)
2   category批量生成共现概率,条件概率
3   category与连续组合计算条件统计量
4   连续连续组合+-*/
5   target encode(用category和label组合计算label的统计量)

其他有价值的做法

  1. 冠军把user_id用起来了,虽然user_id在训练集测试集中交集只有6%,但他交叉验证时将user_id分的和测试集差不多比例

category之间计算共现概率,条件概率(条件熵,信息熵等没算)
数值和类别之间计算条件统计量(mean,min,max,std)等
交叉组合四五个特征

虽说我的特征大都是批量生成
但还是选择性的批量生成,否则维度太高了
其中起主要效果的是price的条件统计量,以及price条件统计量的标准化

模型细节

  1. spatialDropout1D放embedding后超级棒,我最近发现先bn再sdp效果极佳
  2. 图像部分迁移学习固定权重
  3. 树模型与nn都使用交叉熵效果极佳,树模型是xentropy

值得一提的是好多文本比赛感觉attention很不work,我猜可能大部分都是短文本的缘故吧

集成

没做 = =
跑出了俩模型,第一个太烂丢掉了
实际有效的模型只跑出了一个,只能随便拉个kerne的平均一下

其他人的做法
几组较优超参集成
疯狂stacking…

最后感受

大家做的方法其实都大差不差
都是一些细节拉大了分数
我感觉我吃的最大的亏是时间
在细节上我用的是回归,别人用的是交叉熵

和鹏哥感受一样比赛真的是一件投入产出比很低 = =
从头打到尾套路基本都会了的话
不出意外个人感觉top3%,top2%不是意见特别难的事情
但是很耗精力,比赛周期一般也太长了。。。

GRL简述

发表于 2018-07-01 | 分类于 GNN

nlp讨论班需要简要入门一下GRL
在此做个简短的介绍
这东西对大家打比赛也是很有用的
而且个人觉得这个方向也是比较有趣的

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

1234…6

qrfaction

59 日志
8 分类
28 标签
RSS
© 2019 qrfaction
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
访问人数 人