机器学习/深度学习:文本表示实例
写在前面的话:不要被技术吓到哦 ,本文尽量写的白话,致力为从事大数据的运营、咨询规划、需求以及想学习大数据的入门者提供知识分享@……@
词向量表示作为机器学习、特别是深度学 习的输入和表示空间,可以分为离散表示和连续表示。
一、离散表示
1、one-hot
one-hot又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。one-hot在特征提取上属于词袋模型(bag of words)。下面以一个例子说明one-hot如何提取文本特征向量。
假设语料库中有三段话:“我爱中国”、 “爸爸妈妈爱我”、 “爸爸妈妈爱中国”。 首先对语料库进行分离并获取其中所有的词,然后对每个词进行编码: “我”编号为1,“爱”编号为2,“爸爸”编号为3,“妈妈”编号为4,“中国”编号为5。然后使用one-hot对每段话提取特征向量,如图1所示:
图1
因此我们得到了最终的特征向量:我爱中国的向量表示为{1,1,0,0,1}, 爸爸妈妈爱我的向量表示为{1,1,1,1,0} 爸爸妈妈爱中国的向量表示为{0,1,1,1,1}。 one-hot的优点是解决了分类器不好处理离散数据的问题,且在一定程度上起到了扩充特征的作用。其缺点是在文本特征表示上有些缺点非常突出: 首先,它是一个词袋模型,不考虑词与词之间的顺序; 其次,它假设词与词之间相互独立;最后,它得到的特征是离散稀疏的。
2、Bag of Words (词袋表示)
TF-IDF(Term Frequency-Inverse Document Frequency)tf = n, n表示某词在当前文档中出现的次数。IDF权重是log(1 + N/Nt), N指所有的文档数,Nt指含有词t的文档数 。例如:
John likes to watch movies. Mary likes too. 就可以表示为: [0.693,1.386,0.693,0.693,1.099,0,0,0,0.693,0.693]
虽然FT-IDF能够体现出各个词在文档中的重要程度(一般用于关键词提取,主题分类),但是基于one-hot的模型的基础,它是没有考虑文档中词之间的顺序问题,句子中词之间没有联系,会丢失很重要的信息。
3、Bi-gram和N-gram
N-gram是基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关。Bi-gram就是假设第n个词只与它前面的一个词有关。
下面来看下面两句用Bi-gram怎么实现:
John likes to watch movies. Mary likes too. John also likes to watch football games.
首先,和one-hot表示方法相似,这里为Bi-gram建立索引:
{"John likes":1"likes to":2,"to watch":3,"watch movies":4,"Mary likes":5,"likes too":6,"John also":7,"also likes":8"watch football":9,"football games":10}
然后,根据索引,建立句子的向量表示:
John also编码是7,向量的第7位为1;also likes编码是8,向量的第8位为1;likes too编码为2,向量的第2位为1;to watch编码是3,向量的第3位为1;watch football编码是9,向量的第9位为1;football games编码是10,向量的第10位为1。其他位(1,4,5,6)为0。
所以,”John also likes to watch football games“向量表示为 [0,1,1,0,0,0,1,1,1,1]。
同样的,可以得出“John likes to watch movies. Mary likes too.”的向量表示如图2.
二、分布式连续表示 Co-currence矩阵的SVD降维的低维词向量表示Word2Vec: CBOWWord2Vec: Skip-Gram Model
具体例子后续介绍。