本文是由参考1和参考2整合而来。

本文主要介绍项目中用于商业兴趣建模的DSSM双塔模型。作为推荐领域中大火的双塔模型,因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中召回阶段。

通过构建user和item两个独立的子网络,将训练好的两个“塔”中的user embedding 和item embedding各自缓存到内存数据库中。线上预测的时候只需要在内存中计算相似度运算即可。DSSM双塔模型是推荐领域中不得不会的重要模型。

1 为什么要学习DSSM双塔模型

我们标签组主要的服务对象是广告主,服务目标是为广告主提供更好的广告转换效果。这里涉及到两种建模:

  • 一种是自然兴趣建模,根据用户操作终端行为获得user-item关联,给不同的数据源打标获得item-tag关联,最后将上面两种关联进行join操作得到user-tag的关联实现给用户打上兴趣标签,这里相当于是从标签维度为广告主推荐人群;

  • 另一种就是商业兴趣建模,在自然兴趣建模的基础上,从广告维度为广告主推荐人群,那么就需要目前大火的DSSM双塔模型了。

拿YouTube视频推荐系统举例,一般推荐系统中有两个流程:

  • 第一步是召回模型,主要是进行初筛操作,从海量视频资源池中初步选择一部分用户可能感兴趣的视频数据子集,从数量上看可能是从千万级别筛选出百级别;

  • 第二步是精排模型,主要作用是对上面找到的百级别的视频子集进一步精筛,从数量上看可能是从百级别筛选出几十级别。然后根据得分高低排序,生成一个排序列表作为用户的候选播放列表从而完成视频推荐任务。

广告推荐领域中使用的DSSM双塔模型是从广告维度为广告主推荐一定数量的人群,从数量上看是从百亿级别人群中找出百万级人群用于投放广告,所以是召回模型。

更简洁的说,较早期的语义匹配模型都是基于关键词的匹配,例如LSA等,无法匹配语义层面的信息。基于此,DSSM(Deep Structured Semantic Models)提出深度语义匹配模型,期望能够在语义层面匹配query之间的相似性。

【相关论文】

YouTube推荐经典论文:Covington P , Adams J , Sargin E . Deep Neural Networks for YouTube Recommendations[C]// Acm Conference on Recommender Systems. ACM, 2016:191-198.

2 DSSM模型理论知识

2.1 DSSM简介

DSSM(Deep Structured Semantic Models)也叫深度语义匹配模型,最早是2013年微软发表的一篇应用于NLP领域中计算语义相似度任务的文章,其论文全称为:Learning Deep Structured Semantic Models for Web Search using Clickthrough Dara(https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/cikm2013_DSSM_fullversion.pdf )。其发表的本意是用来语义相似度计算。通过对用户的Query历史和Document进行embedding编码,使用余弦相似度计算用户query的embedding和document的相似度,继而达到语义相似度计算的目的。

论文首先介绍了已有的语义分析模型,比如:

  • LSA、PLSA、LDA,但是因为他们采用的都是无监督的学习方法,因此在实际的场景中表现的并不好。

  • 通过用户查询和点击序列进行建模的BLTMs和DPMs,BLTMs不仅要求共享主题分布,而且还给每个主题分配相似的词组;DPMs则使用S2Net算法并结合LTR中的piarwise方法。在实验中他们的效果表现要比LSA、PLSA、LDA效果好。然后虽然BLTMs使用了点击数据进行训练,但其使用的是最大似然方法优化目标,该方法对于排序来讲并不是最优的。DPMs则会产生一个巨大的稀疏矩阵,虽然可以通过删除词汇减小维度,但相应的效果也会减弱

  • 结合深度自编码的方法,虽然表现较传统的LSA效果好,但由于其采用的是无监督的学习方法,模型参数的优化是基于重建文档,而不是区分相关性,因此基于深度自编码的方法在效果上并没有显著优于关键词匹配。

因此作者们提出了深层结构化语义模型(Deep Structured Semantic Model,DSSM)。相比之前的提到几个模型DSSM的主要区别在于:

  • 有监督,使用最大似然函数进行优化

  • 使用word-hashing方法解决大规模且稀疏的词典问题

  • 将用户的Query行为和Document映射到同一语义空间中,通过余弦相似度计算相似性

2.2 DSSM模型的原理

DSSM深度语义匹配模型原理很简单:获取搜索引擎中的用户搜索query和doc的海量曝光和点击日志数据,训练阶段分别用复杂的深度学习网络构建query侧特征的query embedding和doc侧特征的doc embedding,线上infer时通过计算两个语义向量的cos距离来表示语义相似度,最终获得语义相似模型。这个模型既可以获得语句的低维语义向量表达sentence embedding,还可以预测两句话的语义相似度。

【相关论文】

微软发表的DSSM论文:Huang P S , He X , Gao J , et al. Learning deep structured semantic models for web search using clickthrough data[C]// Proceedings of the 22nd ACM international conference on Conference on information & knowledge management. ACM, 2013.

2.3 DSSM深度语义匹配模型整体结构

DSSM模型总的来说可以分成三层结构,分别是输入层、表示层和匹配层。结构如下图所示:

2.3.1 输入层

输入层主要的作用就是把文本映射到低维向量空间转化成向量提供给深度学习网络。NLP领域里中英文有比较大的差异,在输入层处理方式不同。

(1) 英文场景

英文的输入层通过Word Hashing方式处理,该方法基于字母的n-gram,主要作用是减少输入向量的维度。举例说明,假如现在有个词boy,开始和结束字符分别用#表示,那么输入就是(#boy#)。将词转化为字母n-gram的形式,如果设置n为3,那么就能得到(#bo,boy,oy#)三组数据,将这三组数据用n-gram的向量来表示。

使用Word Hashing方法存在的问题是可能造成冲突,即两个不同的词可能有相同的n-gram向量表示。但是论文作者也提到了这种概率很小,冲突的概率在0.0044%。下图是在不同的英语词典中分别使用2-gram和3-gram进行Word Hashing时的向量空间以及词语碰撞统计:

可以看出在50W词的词典中如果使用2-gram,也就是两个字母的粒度来切分词,向量空间压缩到1600维,产生冲突的词有1192个(这里的冲突是指两个词的向量表示完全相同,因为单词储量实在有限,本来想找几个例子说明下,结果没找到)。如果使用3-gram向量空间压缩到3W维,产生冲突的词只有22个。综合下来论文中使用3-gram切分词。

(2) 中文场景

中文输入层和英文有很大差别,首先要面临的是分词问题。如果要分词推荐jieba或者北大pkuseg,不过现在很多模型已经不进行分词了,比如BERT中文的预训练模型就直接使用单字作为最小粒度了。

2.3.2 表示层

DSSM模型表示层使用的是BOW(bag of words)词袋模型,没有考虑词序的信息。不考虑词序其实存在明显的问题,因为一句话可能词相同,但是语义则相差十万八千里,比如“我爱女朋友”和“女朋友爱我”可能差距蛮大的(这个小伙伴们自己体会)。

下图是DSSM表示层的结构:

最下面的Term Vector到Word Hashing将词映射到3W维的向量空间中。然后分别经过两层300维度的隐藏层,最后统一输出128维度的向量。

其中:W_{N}表示第N层的权重矩阵,b_{N}表示第N层的偏置,特别的第一层的偏置为0。

最终输出的结果为y。这里采用的激活函数为tanh,即上图中的f(x)。

2.3.3 匹配层

现在我们把query和doc统一转换成了两个128维的语义向量,接下来如何计算它们的语义相似度呢?通过cos函数计算这两个向量的余弦相似度就可以了,公式如下:

其中,y_{Q}、y_{D}分别表示用户查询低维向量和文档低维向量。

概括来说,DSSM就是假设在用户的一次查询中,用户点击的doc是和query相关的,这样就可以使用有监督的方法进行模型的训练,这里采用的是最大似然函数(maximize the conditional likelihood),其中要学习的参数是权重矩阵W_{i}和偏置b_{i}。

这里通过softmax函数计算用户query doc之后被点击的后验概率,表达式如下:

其中:表示的是平滑因子,D表示的整个候选文档库(其中用户在一次查询中点击的结果用D表示,未点击的结果用表示,这里对未点击的进行负采样,比例为1:4)

注:论文中特意提到采用不同的采样比例对结果影响不大。

模型训练采用最大似然函数,优化目标是最小化下列损失函数:

其中:表示神经网络的参数W_{i}和b_{i}。

2.4 DSSM模型的优缺点

先说说DSSM模型的优点:

  • 解决了LSA、LDA、Autoencoder等方法存在的字典爆炸问题,从而降低了计算复杂度。因为英文中词的数量要远远高于字母n-gram的数量;

  • 中文方面使用字作为最细切分粒度,可以复用每个字表达的语义,减少分词的依赖,从而提高模型的泛化能力;

  • 字母的n-gram可以更好的处理新词,具有较强的鲁棒性;

  • 使用有监督的方法,优化语义embedding的映射问题;

  • 省去了人工特征工程;

  • 采用有监督训练,精度较高。传统的输入层使用embedding的方式(比如Word2vec的词向量)或者主题模型的方式(比如LDA的主题向量)做词映射,再把各个词的向量拼接或者累加起来。由于Word2vec和LDA都是无监督训练,会给模型引入误差。

再说说DSSM模型的缺点:

  • Word Hashing可能造成词语冲突;

  • 采用词袋模型,损失了上下文语序信息。这也是后面会有CNN-DSSM、LSTM-DSSM等DSSM模型变种的原因;

  • 搜索引擎的排序由多种因素决定,用户点击时doc排名越靠前越容易被点击,仅用点击来判断正负样本,产生的噪声较大,模型难以收敛;

  • 效果不可控。因为是端到端模型,好处是省去了人工特征工程,但是也带来了端到端模型效果不可控的问题。

3 实验

3.1 实验细节

  • 将准备好的数据集分为两部分(训练集和验证集),且没有交叉

  • DNN网络使用三个隐藏层结构,第一层是word hashing 层,大约30K个节点,第二、第三层有300个节点,输出层128个节点

  • 网络权重初始化使其最小值和最大值分别是的均匀分布,其中fanin、fanout分别表示输入和输出单元数

  • 实验对比,分层预训练并没有比直接训练效果好

  • 优化算法采用的是随机梯度下降(SGD)

  • 训练的批大小 batch-size=1024

  • 前向和反向传播过程中单个批样本迭代次数 epochs=20

  • 实验评估指标为NDCG,同时结合t-test和p-value,进行分析,使结果更严谨

3.2 实验结果

实验结果如下表所示,9-12 表示的是使用不同配置的DSSM

  • 9:DSSM但没有使用word hashing + 有监督训练

  • 10:DSSM + word hashing + 有监督训练 + 线性激活函数

  • 11:DSSM + word hashing + 有监督训练 + 非线性激活函数

  • 12:DSSM + word hashing + 有监督训练 + 非线性激活函数 + 细节上的一些优化

4 推荐领域中的DSSM双塔模型

4.1 从NLP领域跨界到推荐领域的DSSM

DSSM深度语义匹配模型最早是应用于NLP领域中计算语义相似度任务。因为语义匹配本身是一种排序问题,和推荐场景不谋而合,所以DSSM模型被自然的引入到推荐领域中。DSSM模型分别使用相对独立的两个复杂网络构建用户相关特征的user embedding和item相关特征的item embedding,所以称为双塔模型。

4.2 LSTM-DSSM,2014

主要思路是将DSSM换成了LSTM。

论文下载地址:https://arxiv.org/pdf/1412.6629.pdf

4.3 CNN-DSSM,2015

主要思路是将DSSM换成了CNN

论文下载地址:

http://www.iro.umontreal.ca/~lisa/pointeurs/ir0895-he-2.pdf

4.4 MV-DNN,2015

Multi-View-DNN联合了多个域的丰富特征,使用multi-view DNN模型构建推荐,包括app、新闻、电影和TV,相比于最好的算法,老用户提升49%,新用户提升110%。并且可以轻松的涵盖大量用户,很好的解决了冷启动问题。但其使用前提是统一个主体公司下有很多APP,不同APP之间的用户数据是可以互相使用的,从其设计思路上讲就很容易的将该算法的使用限定在了为数不多的公司里。

MV-DSSM的五点贡献:

  • 使用丰富的用户特征,建立了一个多用途的用户推荐系统

  • 针对基于内容的推荐,提出了一种深度学习方法。并学习不同的技术扩展推荐系统

  • 结合不同领域的数据,提出了Multi-View DNN模型建立推荐系统

  • Multi-View DNN模型可以解决用户冷启动问题

  • 在四个真实的大规模数据集,通过严格的实验证明所提出的推荐系统的有效性

训练模型使用的数据集:

  • User Features:用户在Bing搜索引擎中搜索的关键词和点击的链接数据(这里使用TF-IDF剔除掉不重要的词汇特征数据)

  • News Features:用户在Bing News中的新闻点击数据,每篇新闻选择了三部分特征(新闻的标题且使用letter tri-gram技术进行编码、新闻的类别数据编码为二进制的特征、新闻的命名实体词提取然后使用letter tri-gram技术进行编码)

  • App Features:用户在Windows AppStore中的下载历史数据,每个APP的的标题(通过letter tri-gram技术进行编码)和APP的类别数据(编码为二进制的特征)

  • Movie/TV Features:用户在XBOX上的浏览数据,主要利用的是标题、描述、流派

  • 在MV-DNN中,user features 被用来作为user view,其余的特征映射到不同的view中,训练时一个user features中的样本和一个其他的样本形成样本对,为了达到这个训练目的,使用微软公司的唯一用户ID进行关联,News Features、App Features、Movie/TV Features分别和User Features中的进行关联,能够关联上的数据条数如下表所示:

MV-DNN里面的MV为Multi-View,一般可以理解为多视角的DSSM,在原始DSSM中需要训练的有Query和Doc这两类的embedding,同时里面DNN的所有权重都是共享的,而MV-DSSM他可以训练不止两类的训练数据,同时里面的深度模型的参数是相互独立:

基于Multi-View的DSSM的参数变多了,由于是多视角的训练,输入的语料也变得不同,自由度更大,但是训练时也会变得更加困难。

训练目标为:

论文中提到的几种降低特征维度的方法:

  • 通过TF-IDF选取top K features

  • 使用KMeans将相似度的特征划分到一个cluster中,并结合最终的clusters生成新的特征

  • 局部敏感哈希:通过一个随机的矩阵将数据映射到低维向量空间中,并且保持原始空间上的pairwise cos距离在新的空间上仍然获得保留

假设原始维度为d,降维为k,那么映射矩阵,即A包含了k个映射,每个映射A_{i}都将X映射为Y_{i},输出为,计算Y_{i}的公式为:

计算X1、X2的cos相似度近似表示为:

其中H(Y1,Y2)表示汉明距离。更多更全的相似度计算方法请参考距离度量与相似度算法原理与实践

减小训练样本数:每个用户在每个域都有大量的日志数据,每个用户在每个域只选择一个对,具体为用户特征-用户在此域喜欢的所有item的平均分数。

论文下载地址:

https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/frp1159-songA.pdf

4.5 朴素的DSSM双塔模型,2015

双塔模型最大的特点是user和item是独立的两个子网络,对工业界十分友好。将两个塔各自缓存,线上预测的时候只需要在内存中进行相似度运算即可。下面是2015年提出的朴素的DSSM双塔模型结构:

4.6 百度的双塔模型

百度的双塔模型分别使用复杂的网络对用户相关的特征和广告相关的特征进行embedding,分别形成两个独立的塔,在最后的交叉层之前用户特征和广告特征之间没有任何交互。这种方案就是训练时引入更多的特征完成复杂网络离线训练,然后将得到的user embedding和item embedding存入redis这一类内存数据库中。线上预测时使用LR、浅层NN等轻量级模型或者更方便的相似距离计算方式。这也是业界很多大厂采用的推荐系统的构造方式。

百度|语义匹配中的技术实践:https://www.jiqizhixin.com/articles/2017-06-15-5

4.7 谷歌的双塔模型,2019

2019年谷歌推出自己的双塔模型,文章的核心思想是:在大规模的推荐系统中,利用双塔模型对user-item对的交互关系进行建模,从而学习【用户,上下文】向量和【item】向量的关联。针对大规模流数据,提出in-batch softmax损失函数与流数据频率估计方法更好的适应item的多种数据分布。利用双塔模型构建Youtube视频推荐系统,对于用户侧的塔根据用户观看视频特征构建user embedding,对于视频侧的塔根据视频特征构建video emebdding。两个塔分别是相互独立的网络。

【相关论文】

谷歌双塔模型:Yi X , Yang J , Hong L , et al. Sampling-bias-corrected neural modeling for large corpus item recommendations[C]// the 13th ACM Conference. ACM, 2019.

4.8 附

阿里|深度语义模型以及在淘宝搜索中的应用:https://developer.aliyun.com/article/422338

5 实战广告推荐的双塔模型

5.1 广告推荐业务场景

讲了上面一大堆,就是为了这一节构建咱们广告推荐的DSSM双塔模型。对应到广告业务就是构建DSSM双塔模型,用户侧输入用户对广告的历史行为特征(包括点击、下载、付费等)从而得到固定长度的user embedding,同理广告侧输入广告特征得到相同长度的ad embedding,分别存入redis内存数据库中。

线上infer时给定一个广告ad,然后分别和全量用户求相似度,找到“距离最近”的user子集,对这部分人群投放广告从而完成广告推荐任务。

5.2 广告推荐的DSSM双塔模型结构

模型整体结构如下图所示,也分成三层:输入层、表示层和匹配层。

5.2.1 输入层

模型训练分成两座不同的“塔”分别进行,其实也就是两个不同的神经网络。其中一座塔是用于生成user embedding。输入用户特征训练数据,用户特征包括用户稠密特征和用户稀疏特征,其中用户稠密特征进行one-hot编码操作,用户稀疏特征进行embedding降维到低维空间(64或者32维),然后进行特征拼接操作。广告侧和用户侧类似。

关于里面的特征,不在于你要什么,而在于你有什么。整个工程超级复杂的就是这块的特征工作。这里不再赘述。

5.2.2 表示层

得到拼接好的特征之后会提供给各自的深度学习网络模型。用户特征和广告特征经过各自的两个全连接层后转化成了固定长度的向量,这里得到了维度相同的user embedding和ad embedding。各塔内部的网络层数和维度可以不同,但是输出的维度必须是一样的,这样才能在匹配层进行运算。项目中user embedding和ad embedding 维度都是32。

5.2.3 匹配层

模型训练好了之后会分别得到user embedding和ad embedding,将它们存储到redis这一类内存数据库中。如果要为某个特定的广告推荐人群,则将该广告的ad embedding分别和所有人群的user embedding计算cos相似度。选择距离最近的N个人群子集作为广告投放人群,这样就完成了广告推荐任务。模型训练过程中将cos函数得到的结果进入sigmoid函数和真实标签计算logloss,查看网络是否收敛。模型评估主要使用auc指标。

小结下,本节讲了下我们使用DSSM双塔模型完成广告推荐任务。模型整体结构分成输入层、表示层和匹配层。首先在输入层处理数据获取特征;然后在表示层通过深度学习网络得到user embedding和ad embedding;最后在匹配层进行广告推荐。

5.3 一点思考

DSSM双塔模型有很多变种,比如CNN-DSSM、LSTM-DSSM等等。项目中表示层使用了两层全连接网络来作为特征抽取器。现在深度学习领域公认最强的特征抽取器是Transformer,后续是否可以加入Transformer。

5.4 附

以DSSM为例说明深度学习模型训练中的若干问题

https://mp.weixin.qq.com/s?__biz=MzI2MDU3OTgyOQ==&mid=2247491864&idx=1&sn=e83fc9d0ad16769e2eabd7ebbd16ed64&scene=21#wec

6 实践

参考github:

https://github.com/jpegbert/code_study/tree/master/DSSM

包含TensorFlow1.x和TensorFlow2的可执行代码。

7 总结

本篇主要介绍了项目中用于商业兴趣建模的DSSM双塔模型。作为推荐领域中大火的双塔模型,最大的特点是效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中。

通过构建user和item两个独立的子网络,将训练好的两个塔中的user embedding 和item embedding各自缓存到内存数据库中。线上预测的时候只需要在内存中进行相似度运算即可。

首先,讲了下DSSM语义匹配模型的理论知识,最早是应用于NLP领域中用于语义相似度任务;然后,因为都是排序问题,所以引入到推荐领域。从朴素的DSSM双塔模型到各大厂的双塔模型;最后,讲了下我们使用DSSM双塔模型实战到广告推荐场景。

参考

【1】https://mp.weixin.qq.com/s/JrvdQuN99xaikcSltOqz5Q

【2】https://mp.weixin.qq.com/s/-iVCC_X9aSQtRhwp7vJ1cg

【3】https://mp.weixin.qq.com/s?__biz=MzI2MDU3OTgyOQ==&mid=2247488050&idx=1&sn=5cbc4b48dc49f541d96a418769263d22&scene=21#we

双塔模型DSSM及各种变体塔相关推荐

  1. DINO 论文精度,并解析其模型结构 DETR 的变体

    截止2022年7月25日,DINO是目标检测的SOTA. 本人根据源码的复现感受和DINO论文的精读心得,撰写本篇博客,希望对你有所帮助. 目录 一.摘要 二.结论 三.解析DINO模型 (1)概述D ...

  2. DSSM双塔模型及pytorch实现

    本文介绍用于商业兴趣建模的 DSSM 双塔模型.作为推荐领域中大火的双塔模型,因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中. 通过构建 user 和 item 两个独立的子网络, ...

  3. 【CS224n】(lecture9)Transformer的变体

    学习总结 Transformer 的进一步改进可能在于以下几个方向: 0.1 理论分析 Transformer 的架构已被证明能够支持具有足够参数的大规模训练数据集.许多工作表明,Transforme ...

  4. boltzmann_推荐系统系列第7部分:用于协同过滤的Boltzmann机器的3个变体

    boltzmann RecSys系列 (RecSys Series) Update: This article is part of a series where I explore recommen ...

  5. 图神经网络(三)GCN的变体与框架(4)GNN的通用框架

    图神经网络(三)GCN的变体与框架(4)GNN的通用框架 3.4 GNN的通用框架 3.4.1 MPNN 3.4.2 NLNN 1.内积 2.全连接 3.高斯函数 3.4.3 GN 参考文献 3.4 ...

  6. 从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考

    ▼ 相关推荐 ▼ 1.基于DNN的推荐算法介绍 2.传统机器学习和前沿深度学习推荐模型演化关系 3.论文|AGREE-基于注意力机制的群组推荐(附代码) 4.论文|被"玩烂"了的协 ...

  7. 召回模型:DSSM双塔模型

    文章目录 DSSM(2013) DNN for Computing Semantic Features Word Hashing Youtube双塔模型(2019) Modeling Framewor ...

  8. 推荐系统(十七)双塔模型:微软DSSM模型(Deep Structured Semantic Models)

    推荐系统(十七)双塔模型:微软DSSM模型(Deep Structured Semantic Models) 推荐系统系列博客: 推荐系统(一)推荐系统整体概览 推荐系统(二)GBDT+LR模型 推荐 ...

  9. 谷歌提出「卷积+注意力」新模型,超越ResNet最强变体!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI Tran ...

最新文章

  1. RGB图像重建非刚性物体三维形状(CVPR)
  2. SqlServer sa 用户登录失败的解决方法
  3. 上传照片表单提交包括文本框下拉条等,如何取文本框的值
  4. 不说技术~我需要调整自己,最近整整两天状态不是很好
  5. 美国会不会禁用python_美国要是禁用Windows系统,该怎么办?国人会不会选择换系统呢?...
  6. 音频特效:Flanger 和 Chorus
  7. mysql中值换行显示为乱码_MySQL数据移植中的乱码问题
  8. Vcenter6.5 Administrator账户密码忘记或者过期无法登陆解决办法
  9. Ubuntu快速配置指南
  10. 2021年9月再次更新-日立电梯,艾默生变频器维修图纸,原理图
  11. 推荐国内外,安全好用的电子邮箱
  12. SecureCrt 连接服务器失败 key exchange failed 解决方案
  13. soul群聊派对显示服务器异常,Soul群聊派对玩法攻略
  14. 已解决KfcError: KFC Crazy Thursday WhoEver Gives me 50 CNY, I Will Thank Him.
  15. 四年Android面试遇到的问题整理,值得收藏!
  16. getWriter()
  17. 微博爬虫之:无需账号获取微博weibo的Cookie
  18. 光敏电阻5506主要参数_常用光敏电阻的规格参数
  19. 写给自己的话:是时候有个计划了,骚年
  20. 数学之美:数学究竟是如何深入我们的生活

热门文章

  1. win7 explorer.exe 服务器运行失败,Win7系统Explorer.exe错误问题的解决方法
  2. asf如何在linux运行,linux环境下使用mono运行asf挂卡
  3. 小白兔和小灰兔【爱情故事系列暖暖的很贴心】
  4. 低档计算机配置 新闻,一台电脑配置的高低,主要看这四方面
  5. 【原创】HSV和YCrCb色彩空间介绍
  6. 使用java代码实现扫码登录
  7. vue组件测试-Vue Test Utils 应用入门
  8. 对finalize的理解
  9. 【NodeJs-5天学习】第三天实战篇③ ——基于MQTT的环境温度检测
  10. 华为PIM-SM 动态RP实验配置