Embedding和One_hot将词变成向量的例子:
词嵌入(Word Embedding)
Word embedding 是NLP中一组语言模型(language modeling)和特征学习技术(feature learning techniques)的总称,这些技术会把词汇表中的单词或者短语(words or phrases)映射成由实数构成的向量上。
最简单的一种Word Embedding方法,就是基于词袋(BOW)的One-Hot表示。这种方法,把词汇表中的词排成一列,对于某个单词 A,如果它出现在上述词汇序列中的位置为 k,那么它的向量表示就是“第 k 位为1,其他位置都为0 ”的一个向量。
例如,有语料库如下:
John likes to watch movies. Mary likes movies too.
John also likes to watch football games.
把上述语料中的词汇表整理出来并排序(具体的排序原则可以有很多,例如可以根据字母表顺序,也可以根据出现在语料库中的先后顺序)
假设我们的词汇表排序结果如下:
{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also":6, "football": 7, "games": 8, "Mary": 9, "too": 10}
那么则有如下word的向量表示:
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
……
此时,你也可以进一步地把文档也表示成向量。方法就是直接将各词的词向量表示加和,于是则有原来的两句话的向量表示如下:
[1, 2, 1, 1, 2, 0, 0, 0, 1, 1]
[1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
One-hot方法很简单,但是它的问题也很明显:
1)它没有考虑单词之间相对位置的关系;
2)词向量可能非常非常长!
针对第一个问题,你可能会想到n-gram方法,这确实是一个策略,但是它可能会导致计算量的急剧增长。因为n-gram已经在之前的文章中解释过了,下面我们来看另外一个方法:共现矩阵 (Cocurrence matrix)。
一个非常重要的思想是,我们认为某个词的意思跟它临近的单词是紧密相关的。这是我们可以设定一个窗口(大小一般是5~10),如下窗口大小是2,那么在这个窗口内,与rests 共同出现的单词就有life、he、in、peace。然后我们就利用这种共现关系来生成词向量。
例如,现在我们的语料库包括下面三份文档资料:
I like deep learning.
I like NLP.
I enjoy flying.
作为示例,我们设定的窗口大小为1,也就是只看某个单词周围紧邻着的那个单词。此时,将得到一个对称矩阵——共现矩阵。因为在我们的语料库中,I 和 like做为邻居同时出现在窗口中的次数是2,所以下表中I 和like相交的位置其值就是2。这样我们也实现了将word变成向量的设想,在共现矩阵每一行(或每一列)都是对应单词的一个向量表示。
虽然Cocurrence matrix一定程度上解决了单词间相对位置也应予以重视这个问题。但是它仍然面对维度灾难。也即是说一个word的向量表示长度太长了。这时,很自然地会想到SVD或者PCA等一些常用的降维方法。当然,这也会带来其他的一些问题,例如,我们的词汇表中有新词加入,那么就很难为他分配一个新的向量。
语言模型——N-gram
Word2Vec
Word2Vec之所以现在这么流行,不同于之前的一些Word Embedding方法,它能够自动实现:1)单词语义相似性的度量;2)词汇的语义的类比。此处,语义的类比,反应的是类似下面这种关系:
“国王” – “王后” ≈ “男” – “女”
“英国”–“伦敦”≈ “法国”– “巴黎”≈ “首都”
用模型去做用户画像。而不是人工的去打标签。
什么是用户画像?
用户画像是对现实世界中用户的数学建模,它包括两方面:
一方面是描述用户,没有说人,是说明它跟业务密切相关,它是从业务中抽象出来的,因此来源于现实,高于现实。
第二个是用户画像它是一种模型,是通过分析挖掘用户尽可能多的数据信息得到的,它是从数据中来,但对数据做过了抽象,比数据要高,后面所有用户画像的内容都是基于这个展开的。比如刚刚说的月光族,这个肯定是挖掘分析出来的,不是说原来的数据中包含月光族这个标签,所以说这是它的两层含义。
然后就是刚刚说的,用户画像是现实生活中的数学建模,但是我们如何描述这样一个模型,核心是要有一套标准的知识体系,描述用户画像。
另外一个方面,就是要有一套数据化、符号化、形式化的方式去描述这套知识体系,什么叫形式化?就是机器要能够理解这套知识体系,如果只有人理解的话,这个东西是没有办法使用的,所谓形式化就是这个含义。
关于标签的介绍
从整个业界来看,整体模型也差不太多,能拉开差距的基本还是对数据的理解和数据的处理上。
标签:对某一类特定群体或对象的某项特征进行的抽象分类和概括,其值(标签值)具备可分类性。
对于“人”这类群体,可将“男”、“女”这类特征进行抽象概括,统称为“性别”,“性别”即一个标签;
对于“手机”这类对象,可将“骁龙835”、“骁龙845”这类特征进行抽象概括,统称为“手机处理器”,“手机处理器”即一个标签。
标签值: 标签的实例,指某一标签所包含的具体内容,其特点是符合MECE原则(相互独立、完全穷尽)。
对于标签“性别”,其标签值根据MECE原则可分为“男”、“女”、“未知”;
对于标签“年龄”,其标签值可分为“0-18”、“18-35”、“35-60”、“60-100”等。
用户画像:由某一特定群体或对象的多项特征构成,输出结果通常是对特征的具体描述。(也可理解为用户画像是由多个标签组合而成,其实例是由多个标签值构成)。
例:小明是用户画像的一个实例,小明的输出结果为“男“、“20”、“iPhone”、“北京”、“足球”,是由多个标签中的具体标签值构成。
标签系统:标签和用户画像的整合应用中心,通常由标签、标签树、画像中心构成,该体系类似于一个目录字典,以文档的形式存在。
用户画像的基本流程
1)构建标签体系,标签体系一般是分几个层级,有一级类目、二级类目、三级类目,这几个只是类目或者称之为父标签,不是最终的标签。如果三级类目下面不再进行类目分级了,就到了具体的标签层。比如用户基本信息是一级类目,下面又有社会属性二级类目,最后到婚姻标签。标签体系类似于业务分层的一个字典,以文档的形式存在。
2)抽取或者衍生标签,收集用户所有可能的、重要的、缺失率比较低的原始特征数据,作为可存储的、细粒度的用户画像表特征,也称为基础标签。除了原始数据,也可以在原始数据基础上融合衍生出新的特征标签,都作为基础标签存储在用户画像表里面。用户画像表是用户画像的基础,一般包含身份信息、行为偏好、征信数据、社交关系等几大层面。
3)物理存储,利用hive生成一张用户画像表,并做定时更新。
4)应用层
客群分析,在用户画像表的基础上可以进行客群分析。首先根据需求从用户画像表里将客群提取出来,然后对这部分客群进行统计分析,或者说数据分析,最终凝练出一些可描述的、抽象层次较高的标签,作为最终的客群分析报告标签,展示在报告里面。
单个用户分析,比较类似于客群分析,最终也需要提炼总结出几个可描述的、便于常人理解的大标签,可以放到一个类似于人形状的图形上进行展示。
其它应用,利用营销推荐,多维角度分析等
三、数值型字段如何衍生出区间或者等级型标签呢?
如果是数值型字段,比如离散类型的,可以根据分箱机制进行分段;也可以利用聚类算法,对一元数据进行区间划分,充分挖掘数据内在的分布状态,划分为几个等级,而不是平均分段或者拍脑门分段。
构建用户画像的流程
利用算法对所有用户打标签。并且给用户打上标签和指数,标签代表用户对改内容有兴趣、偏好、需求等,指数代表用户的兴趣程度、需求程度、购买概率。
推荐算法中用户画像构建
没办法做到数字化的东西是不能计算也不能比较的。