深度学习word embedding猜测性别初探
根据用户的一些特征数据,如果能推测出用户的性别借此提高产品的服务质量、广告的精准性等都是极好的。
机器学习方法有很多,而且一般都可以达到不错的效果,比如svm或神经网络等。
本文使用的代码参考——《TensorFlow练习18: 根据姓名判断性别》
但原文代码已经无法直接跑起来,对于最新的TensorFlow需要酌情调整部分参数和函数名等,根据报错调整即可比较容易,文末我也可以考虑放出自己的代码,看心情吧 O(∩_∩)O~
下面我们开始一步步剖析原文中用到的word embedding方法:
虽然word embedding通常是用于自然语言处理的,但其实用于分析用户性别也不错,通过训练word embedding可将一句话分为积极、消极或高兴、生气等态度,所以把用户特征当做一句话,分析出男女(相当于这句话的态度)自然是可行的。
word embedding中用到了卷积神经网络,关于什么是卷积神经网络,可参考这篇知乎回答——《CNN(卷积神经网络)是什么?有入门简介或文章吗?》,讲解的深入浅出,非常适合入门理解。
而对于《TensorFlow练习18》中的代码只有一类特征就是姓名,先将名字中每个字向量化(前57行代码)并用于embedding计算和卷积计算等,实际情况下可能不会知道姓名而且也会做数据脱敏,当然这都是后话,通常的特征数据类型有设备类型、安装的软件等,这些特征也要先经过向量化处理,比如设备A,软件x、软件y、软件z,把其中每项当成原文中一个字来做向量化即可,转换之后就变成了4个数值(下文简称向量值),向量值才是计算机可以理解的信息。
接下来就到了最关键的embedding层了,至于这个embedding到底是怎么回事,可以参考这篇文章《TensorFlow学习笔记3:词向量》,核心就是上述向量值太简单了,没有相关性,无法直接用于计算卷积神经网络,所以在训练模型过程中用embedding算法得出每个向量值在多个维度的语义和相关性数据。原文中embedding_size=128,所以就会为每个向量值计算128维的数据,当然对于实际的应用场景可能维度太多反倒会适得其反,可以调整embedding_size多训练几个模型来确定最适合的值,比如我最终确定embedding_size=16准确率最高。
在embedding层之后就是卷积层和池化层了,还有dropout层,这些在《CNN(卷积神经网络)是什么?有入门简介或文章吗?》也有详细介绍,就不赘述了。原文中filter_sizes = [3,4,5]一共三项,所以一共三层卷积,而每层卷积的感受野分别为3、4、5,至于num_filters=128即每层卷积有128个卷积核(可以认为是128种滤镜)。另外其中的filter_sizes也是可以根据应用场景适当调整的,num_filters也可以调下试试,不过我感觉调整num_filters对于我的场景帮助不大。
未完待续
最新文章
- 《HelloGitHub》之GitHub Bot
- 黑客入门之IP地址及常用命令
- Phonegap学习点滴(2) -- 网络状态检测
- [Gauss]HDOJ3364 Lanterns
- Socket服务端口长连接最多能支持多少?
- dede 删除栏目文章后, 让ID从1开始
- PHP无法获取Referer问题排查
- Jquery progressbar通过Ajax请求获取后台进度演示
- object 插入元素,插入HTML页面
- Go语言协程
- oracle数据库访问形式
- Codeforces960G Bandit Blues 【斯特林数】【FFT】
- 通过Cloudera Manager部署CDH5.15.1的webUI界面详解
- Redis学习笔记之Redis的对象
- tomcat 启动 关闭 重启脚本
- Unity3D笔记 英保通八 关节、 布料、粒子系统
- 爬楼梯 · Climbing Stairs
- RabbitMQ 初探
- [PLC]ST语言七:MOV_SMOV_CML_BMOV_FMOV_XCH_BCD_BIN
- jmeter 常用内置变量