一文详解深度学习在命名实体识别(NER)中的应用

近几年来,基于神经网络的深度学习方法在计算机视觉、语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展。在NLP的关键性基础任务—命名实体识别(Named Entity Recognition,NER)的研究中,深度学习也获得了不错的效果。最近,笔者阅读了一系列基于深度学习的NER研究的相关论文,并将其应用到达观的NER基础模块中,在此进行一下总结,与大家一起分享学习。

1、NER 简介

NER又称作专名识别,是自然语言处理中的一项基础任务,应用范围非常广泛。命名实体一般指的是文本中具有特定意义或者指代性强的实体,通常包括人名、地名、组织机构名、日期时间、专有名词等。NER系统就是从非结构化的输入文本中抽取出上述实体,并且可以按照业务需求识别出更多类别的实体,比如产品名称、型号、价格等。因此实体这个概念可以很广,只要是业务需要的特殊文本片段都可以称为实体。

学术上NER所涉及的命名实体一般包括3大类(实体类,时间类,数字类)和7小类(人名、地名、组织机构名、时间、日期、货币、百分比)。

实际应用中,NER模型通常只要识别出人名、地名、组织机构名、日期时间即可,一些系统还会给出专有名词结果(比如缩写、会议名、产品名等)。货币、百分比等数字类实体可通过正则搞定。另外,在一些应用场景下会给出特定领域内的实体,如书名、歌曲名、期刊名等。

NER是NLP中一项基础性关键任务。从自然语言处理的流程来看,NER可以看作词法分析中未登录词识别的一种,是未登录词中数量最多、识别难度最大、对分词效果影响最大问题。同时NER也是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。

NER当前并不算是一个大热的研究课题,因为学术界部分学者认为这是一个已经解决的问题。当然也有学者认为这个问题还没有得到很好地解决,原因主要有:命名实体识别只是在有限的文本类型(主要是新闻语料中)和实体类别(主要是人名、地名、组织机构名)中取得了不错的效果;与其他信息检索领域相比,实体命名评测预料较小,容易产生过拟合;命名实体识别更侧重高召回率,但在信息检索领域,高准确率更重要;通用的识别多种类型的命名实体的系统性能很差。

2. 深度学习方法在NER中的应用

NER一直是NLP领域中的研究热点,从早期基于词典和规则的方法,到传统机器学习的方法,到近年来基于深度学习的方法,NER研究进展的大概趋势大致如下图所示。

图1:NER发展趋势

在基于机器学习的方法中,NER被当作序列标注问题。利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。NER 任务中的常用模型包括生成式模型HMM、判别式模型CRF等。条件随机场(ConditionalRandom Field,CRF)是NER目前的主流模型。它的目标函数不仅考虑输入的状态特征函数,而且还包含了标签转移特征函数。在训练时可以使用SGD学习模型参数。在已知模型时,给输入序列求预测输出序列即求使目标函数最大化的最优序列,是一个动态规划问题,可以使用Viterbi算法解码来得到最优标签序列。CRF的优点在于其为一个位置进行标注的过程中可以利用丰富的内部及上下文特征信息。

图2:一种线性链条件随机场

近年来,随着硬件计算能力的发展以及词的分布式表示(word embedding)的提出,神经网络可以有效处理许多NLP任务。这类方法对于序列标注任务(如CWS、POS、NER)的处理方式是类似的:将token从离散one-hot表示映射到低维空间中成为稠密的embedding,随后将句子的embedding序列输入到RNN中,用神经网络自动提取特征,Softmax来预测每个token的标签。

这种方法使得模型的训练成为一个端到端的过程,而非传统的pipeline,不依赖于特征工程,是一种数据驱动的方法,但网络种类繁多、对参数设置依赖大,模型可解释性差。此外,这种方法的一个缺点是对每个token打标签的过程是独立的进行,不能直接利用上文已经预测的标签(只能靠隐含状态传递上文信息),进而导致预测出的标签序列可能是无效的,例如标签I-PER后面是不可能紧跟着B-PER的,但Softmax不会利用到这个信息。

学界提出了DL-CRF模型做序列标注。在神经网络的输出层接入CRF层(重点是利用标签转移概率)来做句子级别的标签预测,使得标注过程不再是对各个token独立分类。

2.1 BiLSTM-CRF

LongShort Term Memory网络一般叫做LSTM,是RNN的一种特殊类型,可以学习长距离依赖信息。LSTM 由Hochreiter &Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题上,LSTM 都取得了相当巨大的成功,并得到了广泛的使用。LSTM 通过巧妙的设计来解决长距离依赖问题。

所有 RNN 都具有一种重复神经网络单元的链式形式。在标准的RNN中,这个重复的单元只有一个非常简单的结构,例如一个tanh层。

图3:传统RNN结构

LSTM 同样是这样的结构,但是重复的单元拥有一个不同的结构。不同于普通RNN单元,这里是有四个,以一种非常特殊的方式进行交互。

图4:LSTM结构

LSTM通过三个门结构(输入门,遗忘门,输出门),选择性地遗忘部分历史信息,加入部分当前输入信息,最终整合到当前状态并产生输出状态。

图5:LSTM各个门控结构

应用于NER中的biLSTM-CRF模型主要由Embedding层(主要有词向量,字向量以及一些额外特征),双向LSTM层,以及最后的CRF层构成。实验结果表明biLSTM-CRF已经达到或者超过了基于丰富特征的CRF模型,成为目前基于深度学习的NER方法中的最主流模型。在特征方面,该模型继承了深度学习方法的优势,无需特征工程,使用词向量以及字符向量就可以达到很好的效果,如果有高质量的词典特征,能够进一步获得提高。

图6:biLSTM-CRF结构示意图

2.2 IDCNN-CRF

对于序列标注来讲,普通CNN有一个不足,就是卷积之后,末层神经元可能只是得到了原始输入数据中一小块的信息。而对NER来讲,整个输入句子中每个字都有可能对当前位置的标注产生影响,即所谓的长距离依赖问题。为了覆盖到全部的输入信息就需要加入更多的卷积层,导致层数越来越深,参数越来越多。而为了防止过拟合又要加入更多的Dropout之类的正则化,带来更多的超参数,整个模型变得庞大且难以训练。因为CNN这样的劣势,对于大部分序列标注问题人们还是选择biLSTM之类的网络结构,尽可能利用网络的记忆力记住全句的信息来对当前字做标注。

但这又带来另外一个问题,biLSTM本质是一个序列模型,在对GPU并行计算的利用上不如CNN那么强大。如何能够像CNN那样给GPU提供一个火力全开的战场,而又像LSTM这样用简单的结构记住尽可能多的输入信息呢?

Fisher Yu and Vladlen Koltun 2015 提出了dilated CNN模型,意思是“膨胀的”CNN。其想法并不复杂:正常CNN的filter,都是作用在输入矩阵一片连续的区域上,不断sliding做卷积。dilated CNN为这个filter增加了一个dilation width,作用在输入矩阵的时候,会skip所有dilation width中间的输入数据;而filter本身的大小保持不变,这样filter获取到了更广阔的输入矩阵上的数据,看上去就像是“膨胀”了一般。

具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而receptive field却是指数增加的,可以很快覆盖到全部的输入数据。

图7:idcnn示意图

图7中可见感受域是以指数速率扩大的。原始感受域是位于中心点的1x1区域:

(a)图中经由原始感受域按步长为1向外扩散,得到8个1x1的区域构成新的感受域,大小为3x3;

(b)图中经过步长为2的扩散,上一步3x3的感受域扩展为为7x7;

(c)图中经步长为4的扩散,原7x7的感受域扩大为15x15的感受域。每一层的参数数量是相互独立的。感受域呈指数扩大,但参数数量呈线性增加。

对应在文本上,输入是一个一维的向量,每个元素是一个character embedding:

图8:一个最大膨胀步长为4的idcnn块

IDCNN对输入句子的每一个字生成一个logits,这里就和biLSTM模型输出logits完全一样,加入CRF层,用Viterbi算法解码出标注结果。

在biLSTM或者IDCNN这样的网络模型末端接上CRF层是序列标注的一个很常见的方法。biLSTM或者IDCNN计算出的是每个词的各标签概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络。

3. 实战应用

3.1 语料准备

Embedding:我们选择中文维基百科语料来训练字向量和词向量。

基础语料:选择人民日报1998年标注语料作为基础训练语料。

附加语料:98语料作为官方语料,其权威性与标注正确率是有保障的。但由于其完全取自人民日报,而且时间久远,所以对实体类型覆盖度比较低。比如新的公司名,外国人名,外国地名。为了提升对新类型实体的识别能力,我们收集了一批标注的新闻语料。主要包括财经、娱乐、体育,而这些正是98语料中比较缺少的。由于标注质量问题,额外语料不能加太多,约98语料的1/4。

3.2 数据增强

对于深度学习方法,一般需要大量标注语料,否则极易出现过拟合,无法达到预期的泛化能力。我们在实验中发现,通过数据增强可以明显提升模型性能。具体地,我们对原语料进行分句,然后随机地对各个句子进行bigram、trigram拼接,最后与原始句子一起作为训练语料。

另外,我们利用收集到的命名实体词典,采用随机替换的方式,用其替换语料中同类型的实体,得到增强语料。

下图给出了BiLSTM-CRF模型的训练曲线,可以看出收敛是很缓慢的。相对而言,IDCNN-CRF模型的收敛则快很多。

图9:BiLSTM-CRF的训练曲线

图10:IDCNN-CRF的训练曲线

3.3 实例

以下是用BiLSTM-CRF模型的一个实例预测结果。

图11:BiLSTM-CRF预测实例

4. 总结

最后进行一下总结,将神经网络与CRF模型相结合的CNN/RNN-CRF成为了目前NER的主流模型。对于CNN与RNN,并没有谁占据绝对优势,各有各的优点。由于RNN有天然的序列结构,所以RNN-CRF使用更为广泛。基于神经网络结构的NER方法,继承了深度学习方法的优点,无需大量人工特征。只需词向量和字向量就能达到主流水平,加入高质量的词典特征能够进一步提升效果。对于少量标注训练集问题,迁移学习,半监督学习应该是未来研究的重点。

ABOUT

关于作者

朱耀邦:达观数据NLP算法工程师,负责达观数据NLP基础模块的研究、优化,以及NLP算法在文本挖掘系统中的具体应用。对深度学习、序列标注、实体及关系抽取有浓厚兴趣。

达观数据王子豪:这5个例子,小学生都能秒懂分类算法

分类算法作为数据挖掘、机器学习中重要的研究领域,在新闻分类、黄反广告识别、情感分析、观点挖掘等应用实践中都有着广泛的应用。如何将朴素贝叶斯、决策树、支持向量机这些常见的分类算法通俗易懂地讲给对人工智能感兴趣的人?达观研究院的这篇分类算法科普文章,以日常生活为例子,让小学生都能秒懂分类算法。

试想,8岁的小明是你刚上小学的儿子,长得可爱,古灵精怪,对世界充满好奇。

这天饭后,刚写完家庭作业的小明看到你在书桌前对着电脑眉头紧锁,便跑了过来问你:“爸爸(妈妈),你在做什么呀?”。

身为算法工程师的你正为公司的一个分类项目忙得焦头烂额,听到小明的问话,你随口而出:“分类!”

“分类是什么?”

听到儿子的追问,你的视线终于离开屏幕,但想说的话还没出口又咽了回去……

分类是什么?

简单来说,分类就是对事物进行区分的过程和方法。

在你眼里乖巧的小明是一个好孩子,同时你也想确保他会在学校做一名“好学生”而不是“坏学生”。这里的区分“好学生”和“坏学生”就是一个分类任务,关于这点,达观研究院可以帮你回答小明的疑问。

K最邻近

“别和其他坏学生在一起,否则你也会和他们一样。”        —— 家长

这句话通常来自家长的劝诫,但它透露着不折不扣的近邻思想。在分类算法中,K最近邻是最普通也是最好理解的算法。它的主要思想是通过离待预测样本最近的K个样本的类别来判断当前样本的类别。

家长们希望孩子成为好学生,可能为此不惜重金购买学区房或者上私立学校,一个原因之一是这些优秀的学校里有更多的优秀学生。与其他优秀学生走的更近,从K最近邻算法的角度来看,就是让目标样本与其他正样本距离更近、与其他负样本距离更远,从而使得其近邻中的正样本比例更高,更大概率被判断成正样本。

 

朴素贝叶斯

“根据以往抓获的情况来看,十个坏学生有九个爱打架。”      —— 教导主任

说这句话的训导主任很有可能就是通过朴素贝叶斯算法来区分好、坏学生。

“十个坏学生有九个爱打架”就意味着“坏学生”打架的概率P(打架|坏学生)=0.9,假设根据训导处历史记录坏学生占学生总数P(坏学生)=0.1、打架发生的概率是P(打架)=0.09,那么这时如果发生打架事件,就可以通过贝叶斯公式判断出当事学生是“坏学生”的概率P(坏学生|打架)=P(打架|坏学生)×P(坏学生)÷P(打架)=1.0,即该学生100%是“坏学生”。

朴素贝叶斯算法成立的一个前提是满足特征间条件独立假设。假如教导主任还管学生早恋问题,那么他通过“打架”和“早恋”两种特征来判断学生的前提必须是——在已知学生“好坏”的情况下“打架”和“早恋”之间没有关联。这样的假设可能和实际情况不符合,但让训导主任判断起来更加简单粗暴。

决策树

“先看抽不抽烟,再看染不染头发,最后看讲不讲脏话。”  ——社区大妈

社区大妈经验丰富,有一套自己的判断逻辑。假设“抽烟”、“染发”和“讲脏话”是社区大妈认为的区分“好坏”学生的三项关键特征,那么这样一个有先后次序的判断逻辑就构成一个决策树模型。在决策树中,最能区分类别的特征将作为最先判断的条件,然后依次向下判断各个次优特征。决策树的核心就在于如何选取每个节点的最优判断条件,也即特征选择的过程。

而在每一个判断节点,决策树都会遵循一套IF-THEN的规则:

IF “抽烟” THEN -> “坏学生”

ELSE

IF “染发” THEN -> “坏学生”

ELSE IF “讲脏话” THEN -> “坏学生”

ELSE -> “好学生”

逻辑回归

“上课讲话扣1分,不交作业扣2分,比赛得奖加5分。”   ——纪律委员

班上的纪律委员既勤恳又严格,总是在小本本上记录同学们的每一项行为得分。在完成对每一项行为的评分后,纪律委员根据最终加总得到的总分来判断每位同学的表现好坏。

上述的过程就非常类似于逻辑回归的算法原理。我们称逻辑回归为一种线性分类器,其特征就在于自变量x和因变量y之间存在类似y=ax+b的一阶的、线性的关系。假设“上课讲话”、“不交作业”和“比赛得奖”的次数分别表示为x1、x2、和x3,且每个学生的基础分为0,那么最终得分y=-1*x1-2*x2+5*x3+0。其中-1、-2和5分别就对应于每种行为在“表现好”这一类别下的权重。

Sigmoid函数图像

对于最终得分y,逻辑回归还通过Sigmoid函数将其变换到0-1之间,其含义可以认为是当前样本属于正样本的概率,即得分y越高,属于“表现好”的概率就越大。也就是说,假如纪律委员记录了某位同学分别“上课讲话”、“不交作业”和“比赛得奖”各一次,那么最终得分y=-2-1+5=2,而对2进行Sigmoid变换后约等于0.88,即可知该同学有88%的概率为“好学生”。

支持向量机

“我想个办法把表现差的学生都调到最后一排。”  ——班主任

即使学生们再不情愿,班主任也有一万个理由对他们的座位作出安排。对于“坏学生”,一些班主任的采取的做法是尽量让他们与“好学生”保持距离,即将“坏学生”们都调到教室的最后一排。这样一来,就相当于在学生们之间画了一条清晰的分割界线,一眼就能区分出来。

支持向量机的思想就是如此。支持向量机致力于在正负样本的边界上找到一条分割界线(超平面),使得它能完全区分两类样本的同时,保证划分出的间隔尽量的大。如果一条分割界线无法完全区分(线性不可分),要么加上松弛变量进行适当的容忍,要么通过核函数对样本进行空间上的映射后再进行划分。对于班主任来讲,调换学生们的座位就相当于使用了核函数,让原本散落在教室里的“好”、“坏”学生从线性不可分变得线性可分了。

结束语

分类和分类算法的思想其实无处不在。而在实际工程中,分类算法的应用需要关注的地方还有很多。达观数据在中文文本分类方面拥有丰富的实践经验和心得。想了解这方面的内容,敬请期待下一篇文章《中文文本分类——你需要了解的10项关键内容》。

关于作者

王子豪:达观数据高级NLP算法工程师,负责达观数据文本挖掘和NLP算法的开发及应用,在文本分类、观点挖掘和情感分析等领域有丰富实践经验。

如何学习自然语言处理:NLP领域经典《自然语言处理综论》英文版第三版更新

如何学习NLP? 我觉得先要学好英语、数学和编程,因为英文世界的资料更丰富和原创,而数学会让你读论文的时候游刃有余、编程可以让你随时随地实现相关的idea。这好像是废话,那么闲话少说,进入正题。

去年写过一篇《如何学习自然语言处理:一本书和一门课》,介绍了NLP领域经典书籍《自然语言处理综论(Speech and Language Processing)》第三版的相关情况,时隔一年,很多事情发生了变化,包括第二版的中文翻译版终于出了。作为NLP入门书籍,十年前我读过这本书的第一版中文翻译版,第二版英文版;看到第二版中文翻译版和当前第三版英文版的相关内容,仿佛一个时代的跨越。

貌似为了方便2018年(斯坦福)秋季课程的原因,该书作者,NLP领域的大神 Daniel Jurafsky 教授和 James H. Martin 教授发布了一个截止2018年9月23日的单pdf文件:Speech and Language Processing (3rd ed. draft),包含了目前已经完成的所有章节,供用户下载和使用:

This is the release for the start of fall term 2018.
The slides are in the process of being updated now, we are putting them up as we write them.

Significantly rewritten version of 5, 6, 7, 8, 17, 18, 19, 23, 24, 25, and a draft of 9! New pedagogical sequences on neural networks and their training, starting with logistic regression and continuing with embeddings, feed-forward nets, and RNNs. Plus new or improved coverage of BPE, tf-idf, bias in embeddings, beam search decoding, HMMs, connotation frames, lexicon induction. reading comprehension/QA. Some chapters have been moved to the Appendix.

New lecture slides (so far) for chapters 6 and 25.

Here's a single pdf of the whole book-so-far!

Typos and comments welcome (just email slp3edbugs@gmail.com and let us know the date on the draft)!
And feel free to use the draft slides in your classes.

When will the book be finished? We're shooting for late 2019.

与之前的版本相比,重写了5、6、7、8、17、18、19、23、24、25章节的大部分内容和并新增了第9章节“递归神经网络中的序列处理(Sequence Processing with Recurrent Networks)”的草稿;调整了神经网络及其训练的教学顺序,从逻辑回归开始,到(词)嵌入,前馈网络以及递归神经网络;新增或者加大了BPE处理、tf-idf、柱搜索解码、隐马尔可夫模型、词典推理、阅读理解、自动问答等内容;一些旧的章节被移到附录。

另一个大家比较关心的问题,英文版第三版什么时候完工?官方预计要到2019年年底了。这本书英文版第一版自2000年出版,第二版英文版2008年出版,至今跨越接近20年,特别是这几年深度学习的风生水起,第三版增加了很多NLP和深度学习相关的内容,相对第二版变化有些大,这个第三版已完成章节的电子版草稿,总计有558页,估计全书完成时要秒杀第二版的厚度。

关于作者,两位都是NLP领域的神牛,以下是第二版中文翻译版中详细的介绍:

Daniel Jurafsky现任斯坦福大学语言学系和计算机科学系副教授。在此之前,他曾在博尔德的科罗拉多大学语言学系、计算机科学系和认知科学研究所任职。他出生于纽约州的Yonkers,1983年获语言学学士,1992年获计算机科学博士,两个学位都在伯克利加利福尼亚大学获得。他于1998年获得美国国家基金会CAREER奖,2002年获得Mac-Arthur奖。他发表过90多篇论文,内容涉及语音和语音处理的广泛领域。James H. Martin现任博尔德的科罗拉多大学语言学系、计算机科学系教授,认知科学研究所研究员。他出生于纽约市,1981年获可伦比亚大学计算机科学学士,1988年获伯克利加利福尼亚大学计算机科学博士。他写过70多篇关于计算机科学的论著,出版过《隐喻解释的计算机模型》(A Computational Model of Metaphor Interpretation)一书。

最后是如何下载这个电子版,其实官网上已经提供了相关的下载链接:https://web.stanford.edu/~jurafsky/slp3/ ,这篇文章上面的pdf也直接链向下载链接 ,如果还是无法下载这个电子版,可以关注我们的公众号:"NLPJob" , 回复 "slp3" 获取该书电子版以及 Daniel Jurafsky 教授之前在Coursera上开播的斯坦福大学自然语言处理课程相关资料视频(目前已绝版),一并学习自然语言处理。

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn

本文链接地址:如何学习自然语言处理:NLP领域经典《自然语言处理综论》英文版第三版更新 http://www.52nlp.cn/?p=10785

达观数据桂洪冠:如何省时省力验证模型效果?达观数据在线分层实验平台给你支招

背景

随着大数据和人工智能时代的到来,数据的驱动使得企业经营决策和精细化运营的效果指标的量化评估成为可能,企业的决策和运营也越来越离不开数据的支持。尤其是朝夕万变的互联网行业,产品创新和决策都需要快速得到用户反馈的数据去不断的迭代更新。 产品的新特性是否会受到用户的欢迎?新优化的模型和策略的线上效果如何?如何低成本的进行快速且量化的效果验证? 答案是A/B test实验

事实上,一个高效的A/B test在线实验平台已经成为各大互联网公司进行产品迭代和策略优化的标配工具。A/B测试是互联网公司实现数据驱动的基础,Microsoft、Google, Amazon、Facebook都在这方面做了大量的工作,腾讯、阿里、百度等国内主流互联网公司也纷纷各自构建了一套支持产品迭代和策略优化的A/B test在线实验平台。

达观数据的算法和工程团队每天都在持续不断地尝试各种算法模型的升级和策略优化,而这些算法模型和策略有的相互独立,有的相互影响。为了对这些模型和策略进行有效的量化效果评估,我们借鉴了谷歌的 ”Overlapping Experiment Infrastructure”中的思想搭建了达观数据在线分层实验平台。该实验平台可以支持同时运行多个并行实验,支持多种分流模式,支持自动灰度发布,支持实验效果的实时反馈和可视化(达观数据桂洪冠)。

分层实验模型

达观数据在线分层实验平台的设计借鉴了谷歌2010年在KDD上公布的分层实验框架,并在其基础上根据我们的应用特点进行了大量的裁剪。谷歌分层实验框架对实验空间进行了纵向横向两个维度的划分,其中纵向的划分是对应的概念,横向的划分对应的概念。是指流量的一个划分(指对一部分流量的独占),是指系统参数的一个子集,而实验是指在一个流量划分上,进行零个或多个参数的修改,并最后改变请求处理的过程。概念还是比较抽象,我们来看一个栗子:

如上图,流量先被分成两个域,左边是一个只有单一层的非重叠域,右边是一个三层的重叠域。在这种情况下,每个请求要么被分到非重叠域要么被分到重叠域。如果请求在非重叠域(上图左侧),那么请求最多在一个实验中(这个实验可以改变参数集合中的任意参数的值),如果请求在重叠域(上图右侧),那么请求可以通过三个实验层总共九个实验中。每个实验层可以根据不同的流量划分策略把流量分配到相应参数集的实验中。

下图是一个更具体的栗子,左侧是非重叠域,右侧分为3层,分别是UI层搜索结果层广告结果层

根据我们的实践经验,一般每一层划定一个批次实验,这个批次试验中有一个是基准实验,其它的属于对比实验,基准实验以及每个对比试验都对应一个试验参数集(达观数据桂洪冠)。

分层实验模型特性

分层实验模型具备如下一些特性:

特性1:纵向域划分,横向层划分。

特性2:相互关联的策略参数位于相同实验层,相互独立的策略参数位于不同实验层。

特性3:流量在不同实验层之间根据不同的分流策略被重新分配,不同层的实验流量是正交的。

特性4:不同实验层之间的实验相互独立。

特性5:模型的发布层(Launch Layers)可以实现实验流量的灰度发布直至全流量发布。

流量分配策略

分层实验模型常见的流量分配策略:

策略1:随机分配

优点是简单自然,缺点是用户的请求会在不同参数集的实验中“穿梭”,造成用户体验上的不一致性。

策略2:按照cookie或用户id取模进行分配

此种流量划分方式可以确保用户的请求被分配到固定的实验中,不会造成用户体验的不一致。

策略3:按照cookie+日期取模进行分配

这种方式是综合了cookie和日期的信息后再取模,采用这种方式的话,一个实验一天内圈定的cookie是固定的,但随着日期的变更会圈定不同的cookie。

策略4:按照业务字段进行分配

这种方式可以满足特定的实验流量要求,比如可以按照用户的地域来源取特定城市的用户流量,或者按照用户年龄取特定年龄段的用户流量。

策略5:hash查询串取模进行分配

这种方式使得相同的查询串请求可以分流到确定的实验上。

为了保证层与层之间实验流量的相互独立,上述基于取模的流量分配策略需要考虑实验所在层layerid的信息, 假设当前层有20个bucket分桶(实验参数),则当前流量在当前层的bucket = (f(cookieid, layerid) % 20),f是某个hash函数。

流量分流条件

在通过上述流量分配策略选择一部分流量后,分流条件(condition)通过仅分配特定条件的流量给实验或域,以达到更高效利用流量的目的。比如,一个实验仅仅改变来自日语的查询,那么实验配置中只抽取日语的流量。我们可以基于地区,语言,浏览器等信息设置流量抽样条件。有了分流条件,一个只使用“日语”流量的实验,和一个只使用英语流量的实验,可以使用相同的cookie取模。

灰度发布策略

灰度发布是一种常用的发布流量控制策略,是指在实验的过程中根据实验的效果逐步加大实验流量同时持续跟踪实验效果直至最终全量一个实验。分层实验模型是如何实现灰度发布策略的呢? 谷歌提出一个发布层的概念(Launch Layers)。在这个架构下,一个特性的评估和发布过程是类似如下过程的:

1)创建一个实验或是一组实验来评估特性。注意配置实验涉及指定分配类型和相关的分配参数(比如:cookie取模),分配条件,和特性相关的参数。

2)评估实验指标。根据实验结果,判断是否要进行新一轮的实验,即通过修改或创建新的实验,或甚至修改代码从根本上改变特性。

3)如果特性可以发布,就进入发布过程:创建一个新的发布层和发布层实验,逐步的放量这个实验,并最终删除发布完的发布层,然后将发布层实验的相关参数设为系统默认参数。

达观分层实验平台架构

达观分层实验平台主要由实验配置管理中心实验分析与展示中心以及在线服务系统三部分组成。

实验配置管理中心

实验人员可以在实验配置管理中心进行实验的创建启动暂停删除等操作。

实验创建:实验数据主要包括(但不限于)实验的名称(比如搜索Reranking实验)、实验的起始时间、实验owner、实验参数集、实验作用模块、流量分配等。其中实验起始时间定义了实验生效发生作用的时间范围,超过此时间实验自动结束并停止。实验参数集定义了需要测试的不同实验参数数据,每个实验参数对应实验的一个bucket分桶(比如rank_strategy=5, rank_strategy=6, rank_strategy=7分别对应实验的三个bucket)。每个实验都有一个唯一的实验ID。

实验流量分配:对实验选择流量划分策略(见前文介绍)。

实验启动:创建好的时间在达到实验设置的开始时间后自动启动,实验人员也可以对暂停的实验重新执行启动操作。

实验暂停:实验人员可以对执行中的实验执行暂停操作。

实验删除:实验人员可以删除已经停止的实验,正在执行的实验无法直接删除(需要先执行停止操作)

实验权限控制:实验的owner(创建者)对实验有启动、暂停、删除等权限,也即只能操作自己创建的实验。实验配置管理中心直接控制线上服务的模型和策略的执行,安全性就显得尤为重要。

实验持久化:实验的数据被存储到MySQL数据库中进行持久化。

实验分析与效果展示中心

实验分析和可视化效果展示是实验平台不可或缺的组成部分。在数据实时采集模块,实验ID以及实验参数数据(比如策略和模型参数)连同系统的业务日志数据一起被记录和采集。在这里可以实时查看到每个执行中实验(实验ID区分)的统计分析和效果对比数据,既可以对一个实验的不同参数集(实验bucket分桶)的结果数据进行横向对比(通常与基准实验作对比),也可以对实验基于时间维度的纵向效果作对比。

上图是达观数据推荐算法和某客户推荐算法时间维度纵向效果(点击率)对比。

在我们的实践中,通过对实验日志数据的实时采集和分析,可以实现对实验效果(比如CTR指标)进行准实时的对比分析和监控。如果发现实验(新算法策略)的效果指标出现异常,可以在实验配置管理中心及时调整实验参数或调整实验流程或停止实验(达观数据桂洪冠)。

在线服务系统(实验执行环境)

在线服务系统是实验执行的环境。在线服务系统加载了一个实验平台客户端组件,该组件主要有2个职责:

职责1:定时从数据库中同步实验数据信息

职责2:实验流量决策。对每个请求流量,根据实验的流量划分策略进行bucket分桶计算,获取对应bucket的实验参数数据(策略和模型参数)。请求携带被分配的实验参数数据流入线上服务模块。

各线上服务模块从请求中获取自己关心的实验参数数据进行相应的实验,并在记录日志时把实验ID和参数数据一同写入。

总结

本文以谷歌2010年发布的分层实验框架为参考,阐述了分层实验模型的域、层、实验等基本概念,进一步分析了分层模型的基本特性、实验流量划分策略、分流条件以及灰度发布方法等内容。然后,重点介绍了达观数据分层实验平台架构的实验配置中心、效果分析与展示中心、在线服务系统(实验执行环境)等主要模块,描述了从实验创建到实验执行再到实验结果分析的全过程。

达观数据分层实验平台同时运行着数十个面向不同客户的多个系统应用的策略和模型迭代优化实验,已经成为公司基础平台体系架构中非常重要的组成部分。

未来展望

未来我们希望把达观数据分层实验平台做成开放的一站式实验服务平台,把我们的平台实验能力输出给更多的客户和合作伙伴,大家基于这个平台相互学习合作共赢。

参考文献

1.Diane Tang, Ashish Agarwal, Deirdre O’Brien, Mike Meyer   Overlapping Experiment Infrastructure: More, Better, Faster Experimentation

2.阿里妈妈大规模在线分层实验实践http://www.infoq.com/cn/articles/alimama-large-scale-online-hierarchical-experiment/

关于作者

桂洪冠,达观数据联合创始人,中国计算机学会CCF会员,自然语言处理技术专家。在参与创办达观数据前,曾在腾讯文学、阿里巴巴、新浪微博等知名企业担任数据挖掘高级技术管理工作。桂洪冠在数据技术领域拥有6项国家发明专利,中国科学技术大学计算机硕士学位。在大数据架构与核心算法以及文本智能处理等领域有深厚的积累和丰富的实战经验。

“达人”计划丨达观数据2019届校园招聘正式启动

一 Who we are

用理解分析情景

用热诚驱动革新

用AI开拓未来

为有志于在人工智能NLP领域发展的同学

提供一条有趣、钱多、目标明确的赛道

为客户提供文本智能处理解决方案

以一流文本挖掘技赋能企业转型

AI趋势中一起破浪前行!

二 招聘岗位

AI算法工程师
自然语言处理,搜索算法,推荐算法,计算机视觉。
软件开发工程师
python后端开发、java后端、大数据开发方向;docker、k8s、自动化运维方向。
前端开发工程师
开发公司官网、移动端产品,实现业务功能和交互效果,向全栈工程师发展。
AI行业研究员
对相关行业和上市公司进行持续地跟踪和深入研究,把握行业走向和周期运行趋势。
产品经理(B端)
需求收集、产品设计、文档撰写、竞品分析,持续优化产品的用户体验,推进产品市场化。

三 培养计划

大牛带教

1V1导师制,入职不孤单,搬砖不迷茫
学无止境

达观大讲堂(内部达人、外部大咖每周分享,干货满满or趣味与脑洞向topic,工作生活两不误)
神秘组织

达模院(季度之星、最佳新人、最佳成长等季度奖项,等你来pick)
打怪升级

每年两次公开透明的晋升机会,9级职级体系,不断进阶
生活保障走心的生日礼物和节日福利,实用派or文艺派,兼容个性化需求;跨组团建基金、聚餐经费,每季度请花完预算,随你到处浪;补充医疗保险、年终多薪、项目奖金、出差补贴、兴趣club、人生大事红包
一夜暴富

优秀达人的股票期权计划

达观风采

四 招聘流程

空中宣讲        10月最后一周简历投递  2018.10-2018.12笔试面试  2018.10-2019.01

录用通知  2018.11-2019.02

实习阶段  2019.01-毕业日期

正式入职      以毕业时间为准

2018年10月,空中宣讲会将登陆直播平台,关注达观数据官网、微信公众号、知乎专栏,获取具体时间与直播链接,

参与互动,

更有干货满满的人工智能礼包相送~

五 投递渠道

快来51job、智联招聘、BOSS直聘、实习僧、大街网搜索 达观数据 投递校招类岗位或直接发送简历至hr@datagrand.com

邮件标题:姓名-投递岗位-学校-专业-毕业年月

加入官方校招qq群:931328675

HR小姐姐们会尽快联系大家~

一步步教你轻松学主成分分析PCA降维算法

摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。常常应用在文本处理、人脸识别、图片识别、自然语言处理等领域。可以做在数据预处理阶段非常重要的一环,本文首先对基本概念进行介绍,然后给出PCA算法思想、流程、优缺点等等。最后通过一个综合案例去实现应用。(本文原创,转载必须注明出处.)

继续阅读

达观数据曾彦能:如何用深度学习做好长文本分类与法律文书智能化处理

在NLP领域中,文本分类舆情分析等任务相较于文本抽取,和摘要等任务更容易获得大量标注数据。因此在文本分类领域中深度学习相较于传统方法更容易获得比较好的效果。正是有了文本分类模型的快速演进,海量的法律文书可以通过智能化处理来极大地提高效率。我们今天就来分析一下当前state of art的文本分类模型以及他们在法律文书智能化中的应用。

文本分类领域走过路过不可错过的深度学习模型主要有FastText,TextCNN,HAN,DPCNN。本文试图在实践之后总结一下这些这些分类模型的理论框架,把这些模型相互联系起来,让大家在选择模型与调参的时候能有一些直觉与灵感。在深度学习这个实践为王的领域常有人质疑理论理论无用,我个人的感受是理论首先在根据数据特征筛选模型的时候非常有用,其次在调参的过程中也能大幅提升效率,更重要的是调不出结果的时候,往往脑海里的那一句“这个模型不应该是这样的结果”,以及“这不科学”提供了坚持方向信心。

一、文本分类模型详解

1. FastText

其中FastText结构特别简单,对于速度要求特别高场合适用,他把一篇文章中所有的词向量(还可以加上N-gram向量)直接相加求均值,然后过一个单层神经网络来得出最后的分类结果。很显然,这样的做法对于复杂的文本分类任务来说丢失了太多的信息。FastText的一种简单的增强模型是DAN,改变在于在词向量平均完成后多叠了几层全连接神经网络。对应地,FastText也可以看成是DAN全连接神经网络层数为1的的一种特例。

图1 2层DAN网络

需要特别注意的是,对于不加n-gram向量的FastText模型,他不可能去分辨否定词的位置,看下面的两句话:

我不喜欢这类电影,但是喜欢这一个。

我喜欢这类电影,但是不喜欢这一个。

这样的两句句子经过词向量平均以后已经送入单层神经网络的时候已经完全一模一样了,分类器不可能分辨出这两句话的区别,只有添加n-gram特征以后才可能有区别。因此,在实际应用的时候需要对你的数据有足够的了解。

2. TextCNN

TextCNN相较于fastText模型的结构会复杂一些,在2014年提出,他使用了卷积 + 最大池化这两个在图像领域非常成功的好基友组合。我们先看一下他的结构。如下图所示,示意图中第一层输入为7*5的词向量矩阵,其中词向量维度为5,句子长度为7,然后第二层使用了3组宽度分别为2、3、4的卷积核,图中每种宽度的卷积核使用了两个。

其中每个卷积核在整个句子长度上滑动,得到n个激活值,图中卷积核滑动的过程中没有使用padding,因此宽度为4的卷积核在长度为7的句子上滑动得到4个特征值。然后出场的就是卷积的好基友全局池化了,每一个卷积核输出的特征值列向量通过在整个句子长度上取最大值得到了6个特征值组成的feature map来供后级分类器作为分类的依据。

图2 TextCNN结构

我们知道图像处理中卷积的作用是在整幅图像中计算各个局部区域与卷积核的相似度,一般前几层的卷积核是可以很方便地做可视化的,可视化的结果是前几层的卷积核是在原始输入图像中寻找一些简单的线条。NLP中的卷积核没法做可视化,那么是不是就不能理解他在做什么了呢,其实可以通过模型的结构来来推断他的作用。因为TextCNN中卷积过后直接就是全局max pooling,那么它只能是在卷积的过程中计算与某些关键词的相似度,然后通过max pooling层来得出模型关注那些关键词是否在整个输入文本中出现,以及最相似的关键词与卷积核的相似度最大有多大。我们假设中文输出为字向量,理想情况下一个卷积核代表一个关键词,如下图所示:

图3 TextCNN卷积核的意义示意图

比如说一个2分类舆情分析任务中,如果把整个模型当成一个黑箱,那么去检测他的输出结果,会发现这个模型对于输入文本中是否含有“喜欢”,“热爱”这样的词特别敏感,那么他是怎么做到的呢?整个模型中能够做到遍历整个句子去计算关键词相似度的只有卷积的部分,因为后面直接是对整个句子长度的max pooling。但是因为模型面对的是字向量,并不是字,所以他一个卷积核可能是只学了半个关键词词向量,然后还有另外的卷积核学了另外半个关键词词向量,最后在分类器的地方这些特征值被累加得到了最终的结果。

TextCNN模型最大的问题也是这个全局的max pooling丢失了结构信息,因此很难去发现文本中的转折关系等复杂模式,TextCNN只能知道哪些关键词是否在文本中出现了,以及相似度强度分布,而不可能知道哪些关键词出现了几次以及出现这些关键词出现顺序。假想一下如果把这个中间结果给人来判断,人类也很难得到对于复杂文本的分类结果,所以机器显然也做不到。针对这个问题,可以尝试k-max pooling做一些优化,k-max pooling针对每个卷积核都不只保留最大的值,他保留前k个最大值,并且保留这些值出现的顺序,也即按照文本中的位置顺序来排列这k个最大值。在某些比较复杂的文本上相对于1-max pooling会有提升。

3. HAN(Hierarchy Attention Network)

相较于TextCNN,HAN最大的进步在于完全保留了文章的结构信息,并且特别难能可贵的是,基于attention结构有很强的解释性。

他的结构如下图所示:

图4 HAN结构

输入词向量序列后,通过词级别的Bi-GRU后,每个词都会有一个对应的Bi-GRU输出的隐向量h,再通过uw向量与每个时间步的h向量点积得到attention权重,然后把h序列做一个根据attention权重的加权和,得到句子summary向量s2,每个句子再通过同样的Bi-GRU结构再加attention得到最终输出的文档特征向量v向量,然后v向量通过后级dense层再加分类器得到最终的文本分类结果。模型结构非常符合人的从词->句子->再到篇章的理解过程。

最重要的是该模型在提供了更好的分类精度的情况下,可视化效果非常好。同时在调参过程中,我们发现attention部分对于模型的表达能力影响非常大,整个模型在所有位置调整L2-Loss对模型表达能力带来的影响远不如在两处attention的地方大,这同时也能解释为什么可视化效果比较好,因为attention对于模型的输出贡献很大,而attention又恰恰是可以可视化的。

下面我们来看一下他在法律领域罪名预测任务上的可视化效果。下面的可视化的结果并不是找了极少数效果好的,而是大部分情况下模型的可视化能够解释他的输出。需要注意的是,此处为了让不太重要句子中相对重要的词并不完全不可见,词的亮度=sqrt(句子权重)*词权重。

在非常长的文本中,HAN觉得中间那些完全是废话,不如那句“公诉机关认为”有用,就放弃了。

图5 HAN attention可视化1

如下图所示,模型虽然在文本第二行中看到了窃取的字样,但是他认为这个案件中主要的事件是抢劫,这就是保留文本结构的好处。

图6 HAN attention可视化2

可以看到并不是所有的深度学习模型都是不可以理解的,这种可解释性也会给实际应用带来很多帮助。

4 DPCNN

上面的几个模型,论神经网络的层数,都不深,大致就只有2~3层左右。大家都知道何凯明大神的ResNet是CV中的里程碑,15年参加ImageNet的时候top-5误差率相较于上一年的冠军GoogleNet直接降低了将近一半,证明了网络的深度是非常重要的。

图7 ImageNet历年冠军

那么问题来了,在文本分类领域网络深度提升会带来分类精度的大幅提升吗?我们在一些比较复杂的任务中,以及数据量比较大(百万级)的情况下有提升,但不是ResNet那种决定性的提升。

DPCNN的主要结构如下图所示:

图8 DPCNN结构

从词向量开始(本文的重点在于模型的大结构,因此不去详解文中的region embedding部分,直接将整个部分认为是一种词向量的输出。)先做了两次宽度为3,filter数量为250个的卷积,然后开始做两两相邻的max-pooling,假设输入句子长度padding到1024个词,那么在头两个卷积完成以后句子长度仍然为1024。在block 1的pooling位置,max pooling的width=3,stride=2,也即序列中相邻的3个时间步中每一维feature map取这三个位置中最大的一个留下,也即位置0,1,2中取一个最大值,然后,移动2个时间步,在2,3,4时间步中取一次max,那么pooling输出的序列长度就是511。

后面以此类推,序列长度是呈指数级下降的,这也是文章名字Deep Pyramid的由来。然后通过两个卷积的非线性变换,提取更深层次的特征,再在输出的地方叠加上未经过两次卷积的quick connection通路(ResNet中使得深层网络更容易训练的关键)。因为每个block中的max pooling只是相邻的两个位置做max-pooling,所以每次丢失的结构信息很少,后面的卷积层又能提取更加抽象的特征出来。所以最终模型可以在不丢失太多结构信息的情况下,同时又做了比较深层的非线性变换。

我们实际测试中在非线性度要求比较高的分类任务中DPCNN会比HAN精度高,并且由于他是基于CNN的,训练速度比基于GRU的HAN也要快很多。

二、法律文书智能化应用

达观数据在法律文书智能化处理中也应用了上面的几个模型,并在此基础上做法律行业针对性的优化。在刚刚结束的“法研杯”法律人工智能大赛中达观数据代表队取得了单项三等奖的成绩。

以裁判文书智能化处理为例,达观数据可以通过上述的文本分类器根据一段犯罪事实来向法律工作者推荐与描述的犯罪事实相关的罪名,法律条文,甚至是刑期的预测等。

下面以裁判文书网的一篇裁判文书为例,我们截取其中的犯罪事实部分文字,输入模型。模型会根据输入的文字判断此段分类事实对应的罪名,并且高亮出犯罪事实中的关键内容。

截取裁判文书网中的犯罪事实部分:

图9 裁判文书样例

输入模型:

“公诉机关指控:2017年6月30日22时左右,被告人耿艳峰醉酒驾驶冀T×××××号比亚迪小型轿车沿东孙庄村东水泥路由西向东行驶,行至事发处,与对向被告人孙汉斌无证醉酒驾驶无牌二轮摩托车发生碰撞。造成两车不同程度损坏,孙汉斌受伤的道路交通事故。经衡水市公安局物证鉴定所检验:耿艳峰血液酒精含量为283.11mg/lOOmL;孙汉斌血液酒精含量为95.75mg/mL。经武强县交通警察大队认定:耿艳峰、孙汉斌均负此事故的同等责任。”

得到结果:

图10 模型输出结果

模型会输出预测的罪名以及相关法条的推荐结果,能够极大地提高律师的效率。并且模型还能将关键的句子以及词高亮出来给律师进一步仔细审阅提供方便。

目前在刑法相关的大量样本上罪名预测与相关法条推荐的准确率在90%左右。刑期由于存在不同年代不同地区存在一些差异,目前模型的输出结果还不能特别直观地给出评估。

三、总结

目前state of the art的深度学习文本发分类模型在十万~百万级以上的数据上已经能取得相当不错的效果,并且也有一些可解释性非常强的模型可用。要在实际业务中把文本分类模型用好,除了像文中深入分析理论以外,在大量的业务实践中总结经验也是必不可少的。达观在裁判文书处理等实际任务上实测输出结果也非常不错,并且达观的深度学习文本分类技术也会在各个业务应用中不断优化升级,希望能为法律行业的智能化以及效率优化作出一些贡献。

参考文献:

1.Joulin, Armand, et al. "Bag of Tricks forEfficient Text Classification." Proceedings of the 15th Conferenceof the European Chapter of the Association for Computational Linguistics:Volume 2, Short Papers. Vol. 2. 2017.

2.Iyyer, Mohit, et al. "Deep unorderedcomposition rivals syntactic methods for text classification." Proceedingsof the 53rd Annual Meeting of the Association for Computational Linguistics andthe 7th International Joint Conference on Natural Language Processing (Volume1: Long Papers). Vol. 1. 2015.

3.Kim, Yoon. "Convolutional Neural Networksfor Sentence Classification." Proceedings of the 2014 Conferenceon Empirical Methods in Natural Language Processing (EMNLP). 2014.

4.Yang, Zichao, et al. "Hierarchicalattention networks for document classification." Proceedings of the2016 Conference of the North American Chapter of the Association forComputational Linguistics: Human Language Technologies. 2016.

5.Johnson, Rie, and Tong Zhang. "Deeppyramid convolutional neural networks for text categorization." Proceedingsof the 55th Annual Meeting of the Association for Computational Linguistics(Volume 1: Long Papers). Vol. 1. 2017.

关于作者

曾彦能:达观数据NLP算法工程师,负责达观数据NLP深度学习算法的研究、优化,以及在文本挖掘系统中的具体应用。对文本分类,序列标注模型有深入的研究。曾作为主要成员之一代表达观数据参加2018中国"法研杯" 法律智能挑战赛获得单项三等奖。

受限玻尔兹曼机原理及在推荐系统中的应用(达观数据于敬)

深度学习相关技术近年来在工程界可谓是风生水起,在自然语言处理、图像和视频识别等领域得到极其广泛的应用,并且在效果上更是碾压传统的机器学习。一方面相对传统的机器学习,深度学习使用更多的数据可以进行更好的扩展,并且具有非常优异的自动提取抽象特征的能力。

另外得益于GPU、SSD存储、大容量RAM以及大数据分布式计算平台等的快速发展,海量数据的处理能力大幅度提升。同时,“千人千面”的个性化推荐系统已经融入到我们的日常生活的方方面面,并且给企业带来了巨大的收益。智能推荐系统本质上是对原始的用户行为数据进行深入地分析和挖掘,得到用户的兴趣偏好,进行精准推荐。所以,将深度学习和推荐系统相结合也成为了工业界的研究热点,Google、Facebook、Netflix等公司很早就开始研究基于深度学习的推荐系统,并且取得了显著的效果提升。(达观数据 于敬)

达观数据目前服务的公司有几百家,所提供的个性化推荐服务,不仅给企业带来了巨大的经济收益,同时大大提升了用户的粘性和活跃度,为企业的长远发展提供持续且高质量的技术支撑。当然这背后离不开达观数据多年来在个性化推荐算法上的持续打磨和对技术的精益求精,离不开在推荐效果优化上积累的丰富宝贵经验。本文选取了达观推荐系统众多推荐算法的其中之一:受限玻尔兹曼机(Restricted Boltzmann Machine,RBM),进行详细介绍。主要包括三部分:RBM介绍、RBM的数学原理、RBM在推荐系统中的应用。

一、RBM介绍

RBM和Netflix

提到基于RBM的推荐系统,不得不提Netflix竞赛。2006年,Netflix公司为了提升推荐效果,悬赏百万美元组织了一场竞赛,让大家穷尽所能以使其推荐算法的效果能够提升10%以上。在竞赛的后半程,RBM异军突起。当时以SVD++为核心的各种模型几乎已经陷入了僵局,很多人在此基础上加了pLSA、LDA、神经元网络算法、马尔可夫链、决策树等等,但效果提升并不明显,各个参赛队伍基本上进入到了比拼trick与融合模型数据的体力活阶段了。

但是,RBM的出现,把整个竞赛推进到了一个新的台阶。最终在2009年,“鸡尾酒”团队将上百个模型进行融合以10.05%的结果获得了此次竞赛的终极大奖。但是Netflix后来的线上系统并没有采用如此复杂的全套算法,而是仅仅应用了最核心的两个算法,其中就有受限玻尔兹曼机,另外一个就是耳熟能详的奇异值分解。

RBM的层次结构

RBM是一种可用随机神经网络来解释的概率图模型,主要用于协同过滤、降维、分类、回归、特征学习和主题建模。RBM包括两层,第一个层称为可见层,第二个层称为隐藏层。

图 1 RBM两层结构

如图1所示,每个圆圈称为节点,代表一个与神经元相似的单元,而运算就在这些节点中进行。每一个神经元是一个二值单元,也就是每一个神经元的取值只能等于0或1。节点之间的连接具有如下特点:层内无连接,层间全连接。

RBM和BM的不同之处就在于:BM允许层内节点连接,而RBM不允许。这就是受限玻尔兹曼机中受限二字的本意。每一个节点对输入数据进行处理,同时随机地决定是否继续传输输入数据,这里的“随机”是指改变输入数据的系数是随机初始化的。每个可见层的节点表示有待学习数据集合中一个物品的一个低层次特征。

图 2 输入数据通过节点的过程

接下来看一下单个输入x是如何通过这个两层网络的,如图2所示。在隐藏层的节点中,x和一个权重w相乘,再和所谓的偏差b相加。这两步的结果输入到一个激活函数中,进而得到节点的输出,也就是对于给定输入x,最终通过节点后的信号强度。如果用公式表示的话,即:

sigmoid函数是神经网络中常用的激活函数之一,其定义为:

接下来看看多项输入节点是如何整合到隐藏节点中的,如图4所示。每个输入x分别与各自的权重w相乘,再将结果求和后与偏差b想加,得到结果后输入到激活函数中,最后得到节点的输出值a。

图 4 多个输入通过一个隐藏节点的过程

由于可见层的所有节点的输入都会被传送到隐藏层中的每个节点,所以RBM可以被定义成一种对称二分图。如图5所示,当多个输入通过多个隐藏节点时,在隐藏层的每个节点中,都会有 x和权重w相乘,有4个输入,而每个输入x会有三个权重,最终就有12个权重,从而可以形成一个行数等于输入节点数、列数等于输出节点数的权重矩阵。隐藏层的每个节点接收4个可见层的输入与各自权重相乘后的输入值,乘积之和与偏差值b相加,再经过激活运算后得到隐藏层每个节点的输出a。

图 5 多个输入通过多个隐藏节点的过程

图 5 多个输入通过多个隐藏节点的过程

再进一步,如果是想构建一个二层的深度神经网络,如6所示,将第一隐藏层的输出作为第二隐藏层的输入,然后再通过不定数量的隐藏层,最终就可以到达分类层。(达观数据 于敬)

图 6 多隐藏层的处理过程

图 6 多隐藏层的处理过程

RBM的重构

这里介绍下RBM在无监督情况下如何重构数据的,其实就是在可见层和第一隐藏层之间多次进行正向和反向传递,但并不涉及更深的网络结构。在重构阶段,第一隐藏层的激活值作为反向传递的输入。这些输入值和相应的权重相乘,然后对这些乘积求和后再与偏差相加,得到的结果就是重构值,也就是原始输入x的近似值。

图 7 RBM重构过程

由于RBM的初始权重是随机初始化的,所以重构值与原始输入之间的差别往往很大。r值与输入值之差定义为重构误差,经由反向传递来不断修正RBM的权重,经过不断迭代,可以使得重构误差达到最小。

RBM在正向传递过程中根据输入值来计算节点的激活值,也就是对输入x进行加权后得到输出为a的概率p(a|x;w)。 而在反向传递时,激活值则变成输入,输出值变成了原始数据的重构值,也就是RBM在估计激活值为a时而输入值为x的概率p(x|a;w),激活值的权重w和正向传递中的一样。最终两个过程相结合,得到输入 为x 和激活值为 a 的联合概率分布p(x, a)。

重构不同于平时所说的回归、分类。重构是在预测原始输入数据的概率分布,同时预测许多不同点的值,这就是生成学习。RBM用KL(Kullback Leibler)散度来衡量预测的概率分布与基准分布之间的距离。

KL散度衡量的是两条曲线下方不重叠区域的面积,RBM的优化算法就是要最小化这个面积,从而使得权重在与第一隐藏层的激活值相乘后,可以得到与原始输入尽可能近似的结果。如图7所示,左半边是一组原始输入的概率分布曲线p,另外一个是重构值的概率分布曲线q,右半边的图则显示了两条曲线之间的差异。

图 8 RBM重构过程中误差表示

在整个重构过程中,RBM会根据重构误差反复的迭代计算,以尽可能准确地学习出原始值,最终看上去两条概率分布曲线会尽可能地逼近,如图8所示。

图 9 RBM概率密度曲线的逼近

利用RBM的堆叠可以构造出深层的神经网络模型——深度置信网络(Deep Belief Net, DBN),感兴趣的话可以查阅相关资料深入了解。在处理无监督学习问题时,使用一定的数据集合来训练网络,设置下可见层节点的值匹配下数据集合中的值。然后使用训练好的网络,对未知数据进行计算就可以进行分类。(达观数据 于敬)

二、RBM的数学原理

在RBM中,有如下性质:当给定可见层节点的状态时,隐藏层各节点之间是否激活是条件独立的;反之当给定隐藏层节点的状态时,可见层各节点之间是否激活也是条件成立的。

图 10 RBM的网络结构

图10是一个RBM的网络结构示意图,其中:

:分别表示可见层和隐藏层的神经元数量;

:可见层的状态向量,表示可见层中第个神经元的状态;

:可见层的状态向量,表示隐藏层中第个神经元的状态;

:可见层的偏置向量,表示可见层中第个神经元的偏置;

隐藏层的偏置向量,表示隐藏层中第个神经元的偏置;

:隐藏层和可见层之间的权重矩阵,表示隐藏层中第个神经元与可见层中第个神经元之间的连接权重

对于RBM,其参数主要是可见层和隐藏层之间的权重、可见层的偏置和隐藏层的偏置,记为,可将其看作是W、a、b中所有分量拼接起来的到的长向量。

RBM是一个基于能量的模型,对于给定的状态(v, h),可以定义能量函数

进而可以的到(v, h)的联合概率分布

其中

为归一化因子

于是,可以定义边缘概率分布

结合联合概率分布、边缘概率分布和sigmoid函数,可以得到:

在给定可见层状态时,隐藏层上某个神经元被激活的概率

给定隐藏层状态时,可见层上某个神经元被激活的概率

给定训练样本后,训练RBM也就是调整参数,使得RBM表示的概率分布尽可能与训练数据保持一致。

给定训练集:

是训练样本的数量,,则训练RBM的目标就是最大化似然函数:

进一步取log函数:

使用梯度上升法进行上述最优化问题的求解,梯度上升法的形式是:

为学习率,最终可以得到:

Hinton给出了高效寻来呢RBM的算法——对比散度(Contrastive Divergence,简称CD)算法。

,取初始值:,然后执行k步Gibbs抽样,其中第t步先后执行:

  • 利用采样出
  • 利用采样出

最后,关于RBM的评估方法,由于本身算法的限制,一般采用近似方法进行评估,重构误差就是其中之一。重构误差以训练样本作为初始状态,经过RBM的分布进行一次Gibbs转移后与原数据的差异量。重构误差在一定程度上反映了RBM对训练样本的似然度,虽然不完全可靠,但计算简单,在实践中非常有用。(达观数据 于敬)

三、如何将RBM应用到推荐系统中

本质上来说,RBM是一个编码解码器:将原始输入数据从可见层映射到隐藏层,并且得到原始输入数据的隐含因子,对应的是编码过程;然后利用得到的隐藏层向量在映射回可见层,得到新的可见层数据,对应的是解码过程。而优化目标是希望让解码后的数据和原始输入数据尽可能的接近。在推荐场景中,可以获取到用户对物品的评分矩阵,进过RBM的编码-解码过程处理后,不仅得到了已有评分对应的新评分,同时对未评分的物品进行预测,并将预测分数从高到低排序就可以生成推荐列表。换句话说,就是将RBM应用到协同过滤中。

但是这个推荐过程需要解决两个问题:

1)RBM中的节点都是二元变量, 如果用这些二元变量来对用户评分进行建模?

2)实际业务场景中,用户只会对很少的物品评分,用户评分行为矩阵都是非常稀疏的,那么如何处理这些缺失的评分?

Ruslan Salakhutdinov等人首次提出了使用RBM求解Netflix竞赛中的协同过滤问题。对传统的RBM进行改进:可见层使用Softmax神经元;用户只对部分物品评分,而对于没有评分的物品使用一种特殊的神经元表示,这种神经元不与任何隐藏层神经元连接。具体结构如图11所示。

图 11 RBM处理推荐问题

从图11中可以看到,Softmax神经元是一个长度为K的向量(图中K为5),并且这个向量每次只有一个分量为1,而且第i个单元为1仅当用户对该物品打分为i是才会置为1,其余为0。从而可以得到可见层单元和隐藏层单元被激活的概率:

使用前面提到的CD算法,各个参数的学习过程如下:

RBM经过学习以后,可以得到整个网络的全部参数。给定一个用户u和一个物品i,预测评分R(u, i)过程如下:

1)  将用户u的所有评分作为RBM的softmax单元的输入

2)  对于所有的隐藏单元j计算激活概率

3)对于所有的k=1,2,…,K, 计算

4)取期望值作为预测结果,比如

以上RBM只用到用户对物品的评分,忽略了很重要的信息:用户浏览过哪些物品,但是并没有评的情况。条件RBM (Conditional Restricted Boltzmann Machine)对这种信息可以进行建模。

图 12 条件RBM处理推荐过程

 

其中r是m维的向量,为1的话,表示用户对浏览过第i个电影,加入r之后的条件概率:

权重D的学习过程:

经过前面的分析,对RBM的内部算法原理、编码和解码过程以及在推荐中的应用等有了基本的了解。在推荐业务场景中,一般有两种使用方式:

一是进行离线计算,也就是对大量用户都批量计算推荐结果,当然计算量往往很乏;二是将训练号的模型保存下来,然后实时生成推荐结果,也就是排序的过程。在达观推荐架构中,RBM是以第二种方式进行应用中。这种方式避免了大量复杂的离线计算,可以对多种单一离线结果进行融合排序,应用上更加灵活。

图 13 达观推荐架构图

其实深度学习的很多模型都可以应用于推荐系统,方式也非常多。达观数据精于技术,对于推荐系统和深度学习相结合以持续优化推荐效果的探索也从未停止,后续也会不断地分享相关成果,敬请期待。

关于作者

于敬:达观数据联合创始人,中国计算机学会(CCF)会员,第23届ACM CIKM Competition竞赛国际冠军,达观数据个性化推荐组总负责人,负责达观数据智能推荐系统的架构设计和开发、推荐效果优化等。同济大学计算机应用技术专业硕士,曾先后在盛大创新院、盛大文学和腾讯文学数据中心从事用户行为建模、个性化推荐、大数据处理、数据挖掘和机器学习相关工作,对智能推荐、机器学习、大数据技术和分布式系统有较深入的理解和多年实践经验。

AI Challenger 2018 细粒度用户评论情感分析 fastText Baseline

上一篇《AI Challenger 2018 进行时》文尾我们提到 AI Challenger 官方已经在 GitHub 上提供了多个赛道的 Baseline: AI Challenger 2018 Baseline ,其中文本挖掘相关的3个主赛道均有提供,非常适合用来学习:英中文本机器翻译的 baseline 就直接用了Google官方基于Tensorflow实现的Tensor2Tensor跑神经网络机器翻译Transformer模型,这个思路是我在去年《AI Challenger 2017 奇遇记》里的终极方案,今年已成标配;细粒度用户评论情感分析提供了一个基于支持向量机(SVM)的多分类模型 baseline;观点型问题阅读理解提供一个深度学习模型 baseline , 基于pytorch实现论文《Multiway Attention Networks for Modeling Sentence Pairs》里的思路。

本次 AI Challenger 2018, 除了英中文本机器翻译,另一个我比较关注的赛道是: 细粒度用户评论情感分析。情感分析是自然语言处理里面的一个经典任务,估计很多同学入门NLP的时候都玩过 IMDB Movie Reviews Dataset , 这个可以定义为一个二分类的情感分类问题。不过这次 AI Challenger 的细粒度用户评论情感分析问题,并不是这么简单:
继续阅读

AI Challenger 2018 进行时

之前写过一篇《AI Challenger 2017 奇遇记》,记录了去年参加 AI Challenger 英中机器文本翻译比赛和英中机器同声传译比赛的过程,得到了一些反馈,特别是一些同学私下留言希望共享语料做科研用,但是限于去年比赛AI Challenger官方的约定,无法私下分享。不过好消息是,AI Challenger 2018 新赛季已经于8月29号启动,总奖金高达300万人民币,单个赛道冠军奖金最高到40万人民币。新赛季英中机器翻译文本大赛继续,提供了一批新的语料,中英双语句对规模大致到了1千3百万句对的水平,真的很赞。

我之前没有参加这类数据竞赛的经验,去年因为做 AIpatent专利机器翻译 产品的缘故,参加了 AI Challenger 2017 两个与机器翻译相关的赛道,并且侥幸进了英中机器同声传译比赛的 Top 5,过程中最大的收获其实是 follow 了一轮最新的神经网络机器翻译模型和试用了一些相关的NMT开源工具,另外也跟踪了机器翻译相关的论文,了解了当前机器翻译的进展情况,这些对于我的工作还是有相当帮助的。

10年前读研的时候,没有MOOC,没有Kaggle,也没有这么多开源的深度学习平台和工具,有时候不得不感慨,对于搞数据挖掘的同学来说,这是最好的时代。对于还在校学习的同学,如果实验室的任务不重,强烈建议参加类似 AI Challenger, Kaggle 这样的比赛,这可能是除了实习之外,又一个很好的积累实战经验的方法之一。在 NLPJob ,我们已经发现有一些招聘方加了一条加分项,例如:有Kaggle比赛获奖或者其他竞赛获奖的优先。而类似的,我们也发现很多同学的简历中参加Kaggle, 天池大数据等竞赛的经历逐渐成了标配。面向校招,在校同学缺乏实战经验,如果又没有一些很好的实验室项目或者实习经历作为筹码,那么参加这类比赛不失为一个很好的简历补充方式。

以下选自 AI Challenger 2018 的相关官方介绍,其中五大主赛道有三个与自然语言处理相关,可见NLP是多么的难。

继续阅读