【摘要】 本文介绍了针对序列特征采用的处理方法之二:基于卷积神经网络方法,并分析了为何卷积神经网络擅长对于局部特征的提取。

前言

上一篇文章介绍了基本的基于注意力机制方法对序列特征的处理,这篇主要介绍一下基本的基于卷积神经网络方法对序列特征的处理,也就是TextCNN方法。序列特征的介绍,背景以及应用可以参考上一篇的详细介绍,这里简单回顾一下定义,用户在使用APP或网站的时候,用户会产生一些针对物品的行为,比如点击感兴趣的物品,收藏或购买物品等,而这些行为往往代表着用户对这些物品是感兴趣的,而将这些交互过的物品放在时间轴来看,就形成了用户感兴趣的物品序列,我们要处理的数据对象类似如图 1 所示具有时序关系的序列特征,这里拿用户感兴趣的物品序列为例作为处理对象。

▲ 图1. 用户感兴趣的物品序列

我们都知道用户的历史行为中可能存在着一些局部的连续行为,比如最近新型冠状病毒疫情严重,可能用户在过去几天内连续买了口罩和酒精这种消毒和防护用品,那么在推荐中可以根据这种局部信息来推荐一些跟防护和消毒相关的商品。而浅层的卷积神经网络由于其卷积感受野比较小,善于捕获局部信息,因此可以利用浅层卷积神经网络来对序列特征中的局部行为模式进行建模。鉴于针对句子序列建模的卷积神经网络TextCNN也是针对embedding matrix做处理,因此选用TextCNN来对用户感兴趣的物品序列进行处理。

TextCNN原理

如图 2 所示为TextCNN对句子序列建模并进行分类的示意图:

▲ 图 2. TextCNN示意图[1]

1. Embedding:每个单词包括标点都被处理成5维的embedding vector,句长为7,因此处理之后为7×5的矩阵,为图 2 的第一列所示。

2. Convolution:经过 kernel_sizes分别为2,3,4的一维卷积层,每个kernel_size 都有2个卷积核,因此经过卷积之后输出6个卷积结果,其中卷积核的示意图为图 2 第二列所示,卷积后的结果为图 2 第三列所示。需要说明的一点是,从图 2 可以看出卷积核的高分别有2,3和4,而卷积核的宽都是都和embedding vector的维度一致,这是因为每一个向量代表一个词,在抽取特征的过程中,词做为文本的最小粒度,应该保证其信息的完整性。

3. MaxPooling:对卷积后得到的6个结果进行MaxPooling,然后进行concact,最终得到一个6维的特征向量,如图 2 第四列所示。

4. Fully Connect and Softmax:在6维的特征向量后加上一个神经元为2的全连接层,并进行softmax归一化得到分类概率值,如图 2 第五列所示。

应用在序列特征上

我们主要借鉴的是上面介绍的TextCNN提取特征的方法,也就是上面介绍的如何把embedding matrix变为最终的6维特征向量的方法。如图 3 所示:

▲ 图 3. TextCNN的序列特征处理

一般在把TextCNN应用在序列特征的处理上时一维卷积的kernel_sizes设置为2或3,或者同时都用,每个kernel_sizes的卷积核个数一般都为1。一维卷积核大小分别设置为2和3时可以提取不同范围大小的局部信息,保证了特征的多样性。

除此之外,为了弥补有关全局信息提取的不足之处,还可以结合max/mean/sum pooling提取全局特征的方法,使得提取的特征既有全局信息又有局部信息[2],如图 4 所示,其中全局pooling和textCNN共享序列特征的embedding matrix。

▲ 图 4. 结合TextCNN和全局pooling的序列特征处理

总结

卷积神经网络因其滑动卷积的计算方式对局部特征的提取有天然的优势,因此成为提取局部信息的首选建模方法。除此之外,还可以结合全局pooling的方法提取全局特征,弥补对全局特征提取的不足,提高特征的多样性。与此同时,之前介绍过多值类别特征的处理方法,同样可以采用textCNN进行局部特征的提取。

参考文献

[1] Convolutional Neural Networks for Sentence Classification

[2] Convolutional Sequence Embedding Recommendation Model

作者:wanderist

【华为云技术分享】序列特征的处理方法之二:基于卷积神经网络方法相关推荐

  1. 【华为云技术分享】文字识别服务(OCR)基于对抗样本的模型可信安全威胁分析初析

    [摘要] 文字识别作为计算机视觉的重要分支之一,面临着视觉方向同样的安全威胁分析.随着人工智能的普及和文字识别服务大规模的商业落地,解决好相关的模型安全威胁问题已经刻不容缓. OCR处理流程融合了多种 ...

  2. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  3. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  4. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  5. 【华为云技术分享】干货!!卷积神经网络之LeNet-5迁移实践案例

    摘要:LeNet-5是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一.可以说 ...

  6. 一维卷积神经网络_序列特征的处理方法之二:基于卷积神经网络方法

    前言 上一篇文章介绍了基本的基于注意力机制方法对序列特征的处理,这篇主要介绍一下基本的基于卷积神经网络方法对序列特征的处理,也就是TextCNN方法.序列特征的介绍,背景以及应用可以参考上一篇的详细介 ...

  7. 【华为云技术分享】序列特征的处理方法之一:基于注意力机制方法

    [摘要] 本文介绍了针对序列特征采用的处理方法之一:基于注意力机制方法,并总结了一下相似性度量的方法. ▌前言 之前两篇讲过稠密特征和多值类别特征加入CTR预估模型的常用处理方法,这篇介绍一下针对序列 ...

  8. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  9. 【华为云技术分享】Volcano火山:容器与批量计算的碰撞

    摘要: Volcano是基于Kubernetes构建的一个通用批量计算系统,它弥补了Kubernetes在"高性能应用"方面的不足,支持TensorFlow.Spark.MindS ...

最新文章

  1. UGUI全面实践教程
  2. Zencart 给DHL运费模块增加一个分区的方法
  3. Essential MSBuild: .NET 工具生成引擎概述
  4. react常用知识点总结
  5. 计算机将取代老师吗 英语作文,大学英语作文五篇
  6. java工具类专利申请文档_Java工具类 (3)------WordUtils------利用Poi根据模板生成新的word文档...
  7. 爬虫自动定时获取查重结果并将结果发送至指定邮箱
  8. 【26】Superscalar和VLIW:如何让CPU的吞吐率超过1?
  9. 【自学】张量、维度、多维矩阵、dim、torch.argmax()
  10. linux中man命令的基本用法,linux中的man命令的详细解释
  11. linux的pv原语
  12. PlaySound函数以及sndPlaySound函数用法总结
  13. 国外访问学者申请政策解析
  14. 化学计算机模拟计算,计算机化工辅助计算
  15. 计算机网络英文习题(中文及答案解析)
  16. 如何选择适合自己的树莓派产品
  17. guava之限流RateLimiter
  18. 如何利用家里的闲置电脑搭建自己的博客
  19. 华光昱能针对工程光纤布线的痛点?常见问题及解决方案
  20. Python爬虫实战——下载小说

热门文章

  1. linux 分段路由怎么添加,一种IPv6实现分段路由的方法及装置与流程
  2. oracle有时慢连接不上,Oracle 连接有时候慢,应用稍微一忙,偶尔出现连接失败 的故障解决过程...
  3. mysql 存储过程 输出table_mysql 存储过程 没有结果输出。
  4. [CF1095F]Make It Connected
  5. java中数据成员的初始化问题
  6. leetcode 111
  7. OC中property的有关属性
  8. 变量使用self.foo还是_foo
  9. 2014年自动化的个人感想
  10. linux自动输入sudo密码_用大写字母输入 Linux 命令,实现以 sudo 用户权限运行