构建名词解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建名词解释相关的知识,希望对你有一定的参考价值。

参考技术A 构建就是把我们在开发环境写的代码,转换成生产环境的代码。 参考技术B 构建就是把我们在开发环境写的代码,转换成生产环境的代码。
补充
构建过程
开发环境的代码
我们可能会用到es6、sass、jsx等,从而需要预编译
我们可能忘记写</div>,从而需要语法检查,各种lint,如htmllint Csslint eslit
我们可能用了react,他们有一些依赖,从而需要依赖管理
我们会更新代码,从而需要对文件进行版本管理
生产环境的代码
我们希望内容能正确的呈现,从而希望生产环境代码生成之前能有单元测试
希望资源少且小,从而能更快的完成页面的渲染
综上,构建过程应该包括 预编译、语法检查、词法检查、依赖处理、文件合并、文件压缩、单元测试、版本管理等 。

构建工具
比较流行的构建工具用gulp和grunt,具体使用请参考gulp、 grunt。
比较流行打包工具webpack和parcel-bundler,具体使用请参考webpack、parcel-bundler。

TEM:基于树模型构建可解释性推荐系统

本文论文的题目为:《TEM: Tree-enhanced Embedding Model for Explainable Recommendation

 

论文下载地址为:https://www.comp.nus.edu.sg/~xiangnan/papers/www18-tem.pdf

推荐系统的方法,无论是协同过滤还是一些embedding-based方法,在可解释性上都有一定的欠缺,而本文提出了一种基于GBDT的可解释的推荐模型,我们一起来看一下是怎么做的。

1、背景

现有的推荐方法,如协同过滤和embedding-based的方法,在可解释性上都有一定的欠缺。对于协同过滤模型来说,推荐的理由无非就是你的朋友也喜欢这个或者这个物品和你之前喜欢的某某物品相似;对于一些embedding-based的方法,最简单的如矩阵分解方法,这种方法只能得到一个简单的评分,但感觉无法解释评分的含义,再比如因子分解机FMNFMWide & DeepDCN等等,这些方法可以充分利用辅助信息side-information,来捕捉一些特征之间的交叉关系,但这种关系一旦使用了神经网络,就感觉是一个黑盒,推荐结果也是相当难以解释的(其实我感觉FM还是具有一定的解释性的)。

因此,本文想要实现一种推荐方法,同时满足以下两个要求:结果准确性accurate推荐结果可解释性explainable

对于准确性,我们希望能够得到与embedding-based的方法相近的性能,对于可解释性,举个简单的例子,比如我们给用户推荐了一个玫瑰金的iphone7,给出的推荐理由类似于20-25岁,收入过万的女性都喜欢粉丝的iphone,而非简单的xxx购买了或者是与你浏览过的xxx物品相似。也就是说,能够准确的识别起关键作用的交叉特征。

那么如何实现上面的两个目标呢?文章提出了Tree-enhanced Embedding Method (TEM)模型。下面我们一起来看一下是如何做的。

2、模型介绍

TEM模型的整体架构如下:

TEM模型中,对于给定的用户u和物品i,打分结果由下面的公式确定:

其中,x=[xu,xi]分别是用户和物品的特征向量,主要包含一些辅助信息side-information。公式中最重要的是f(u,i,x),我们一步步展开这一部分如何得到。

2.1 构建交叉特征

为了让交叉特征具有良好的可解释性,工业界一种广泛的做法是使用如逻辑回归这样的模型。如果让特征两两的交叉,随着特征增多,计算复杂度呈指数级增长。如果使用人工去选择一些比较靠谱的交叉特征,这需要比较丰富的领域知识,需要对业务特别熟悉。所以像逻辑回归这样的方法同样面临着一些问题。

因此本文提出使用GBDT来进行特征的交叉,GBDT包含一系列的决策树Q=Q1,Q2,...,QS,对于每一颗决策树,都会得到一个one-hot的向量,最终拼接起来就得到一个multi-hot向量。如下图中,有两棵决策树,假设特征x经过两棵树之后分别落在了第一颗树的第三个叶子结点和第二颗树的第二个叶子结点,那么得到的向量如下为[0,0,1,0,0,0,1,0]:

这里我们记最终得到的multi-hot向量为q

2.2 通过交叉特征进行预测

这里,你是不是想到了我们之间介绍过的FaceBook提出的GBDT+LR的推荐方法。作者这里指出了该模型的一点不足。尽管GBDT+LR的方法可以捕捉一些重要的特征,但是模型一但确定,交叉特征的权重也就确定了,这在一定程度上对模型的准确性是有一定限制的。

论文这里举了一个简单的例子,假设有两个正样本(u,i,x)(u',i',x'),如果xx'相同的话,那么GBDT+LR方法得到的top的交叉特征是相同的,也就是说,向u推荐i和向u'推荐i'的理由也是相同的,但实际中可能并不是这样的。因此,对于不同的用户-物品对,不同的交叉特征的权重应该是不同的。计算不同的权重,我们自然而然想到了attention机制。没错,这里也使用attention机制。

首先对于GBDT得到的multi-hot特征q,其中为1的位置数量是确定的,即GBDT中决策树的个数,假设为t。这里对GBDT中所有的叶子结点赋予一个对应的embedding向量,那么我们一共可以得到tembedding向量。假设得到的embedding向量集合为V=vl(ql<>0),而用户和物品对应的embedding分别为puqi。那么交叉特征的权重计算公式图示和公式如下:

在得到权重之后,作者这里提出了两种方式,一种是avg-pooling,一种是max-pooling,公式分别如下:

采用不同的pooling方式,对于结果的解释是不同的,咱们在后面详细讨论。

因此最终的预测公式表示如下:

2.3 模型学习

这里使用logloss来指导模型学习:

值得一提的是,TEM模型包含两个级联的模型,这两个模型使用的是同样的logloss。在实际中,我们同样先训练GBDT,在训练好GBDT之后,通过其得到每个样本的交叉特征,再通过batch梯度下降Adagrad来优化剩余部分的模型参数。而每个batch中有正样本和负采样得到的一批负样本。

3、可解释性分析

前面在得到attention的权重后,使用两种不同的方式对embedding进行处理。一种是avg-pooling,一种是max-pooling,我们分别记作TEM-avgTEM-max。这两种方式对结果的解释是不同的。

对于TEM-avg,我们可以直接使用得到的权重wuil来得到重要性最高的几个交叉特征。对于TEM-max,得到的最终向量的每一维可能来自不同的特征,假设embeddingK维,那么max-pooling后的向量最多可能来自k个不同的embedding向量,如下图所示:

上图中,每一行是乘上权重后的embedding,即wuil * vl,共有14个交叉特征,此时选择重要程度最高的特征,就不能单单看权重wuil了,还要看其对max-pooling后结果的贡献。

4、实验分析

这里作者提出了三个问题

1TEM模型可以达到与目前state-of-the-art的推荐模型相同的预测效果么?
2TEM模型得到的推荐结果能够方便地通过交叉特征和attention来进行解释么?
3)超参数的设定是如何影响TEM模型的呢?

4.1 性能分析

作者在两个数据集上进行了对比试验,结果如下:

可以看到TEM-max的效果最好,其次是TEM-avg

4.2 可解释性案例分析

其实我在看论文的时候一直有个疑问,模型最后得到预测输出的时候,还接了一层可以说是全连接的神经网络,那么是否是可以直接用attention得到的权重wuil来对结果进行解释。比如使用TEM-avg的时候,第l个交叉特征对模型预测结果贡献的最终结果是wuil * rT* vl,而并非wuil,二者需要具有一定的一致性,我们才可以近似用wuil来代表特征的重要程度。作者通过case studay验证了这一点:

而对于TEM-max方式,其预测性能是最好的,但是作者这里没有给出相应的case study。感觉TEM-max可以通过交叉特征对max-pooling结果的贡献来确定其重要性,因为最后再乘上 rT,这个并不影响max-pooling结果的每一维来自于哪一个交叉特征。

因为 rT * max-pooling(wuil * vl) = sum(max-pooling(wuil * multiplyvl)

可能我说的比较晦涩,通过下面可以理解下,假设我们把 r放在max-pooling之前,先和vl对位相乘,并不改变最终结果的每一维来自哪一个交叉特征对应的embedding

而两边最终结果也验证了我们公式的正确性。

4.3 超参数学习

这里主要验证了下树的数量Sembeddingsize对模型结果的影响,结果如下:

以上是关于构建名词解释的主要内容,如果未能解决你的问题,请参考以下文章

R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释一个iris数据样本的预测结果LIME解释器进行模型预测结果解释并可视化

R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释一个测试语料的预测结果并可视化

R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理构建词袋模型构建xgboost文本分类模型基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化

R语言将数据转化为DALEX包期望的格式使用DALEX包的explain函数对多个h2o算法模型构建解释器进行解释分析使用验证集数据构建模型解释器

R语言将数据转化为DALEX包期望的格式使用DALEX包的explain函数对多个h2o算法模型构建解释器进行解释分析使用验证集数据构建模型解释器

R语言构建决策树(decision trees)模型并进行调优和解释