文章目录
- 前言
- 文本表示
- 1文本特征概念介绍
- 2 文本特征选择方法
- 3 文本表示方法 text expressing
- 3.1 One Hot(独热)编码
- 3.2 TF-IDF 模型
- 3.3 Word2Vec
- 参考链接:
前言
文本是一种非结构化的数据信息,是不可以直接被计算的。
文本表示的作用就是将这些非结构化的信息转化为计算机可以理解的结构化的信息 ,这样就可以针对文本信息做计算,来完成后面的任务。
文本表示
1文本特征概念介绍
在向量空间模型中,文本可以选择字、词组、短语、甚至“概念”等多种元素表示。
这些元素用来表征文本的性质,区别文本的属性,因此这些元素可以被称为文本的特征。
在文本数据集上一般含有数万甚至数十万个不同的词组,如此庞大的词组构成的向量规模惊人,计算机运算非常困难。进行特征选择,对文本分类具有重要的意义。
特征选择就是要选择那些最能表征文本含义的词组元素。特征选择不仅可以降低问题的规模,还有助于分类性能的改善。
2 文本特征选择方法
选取不同的特征对文本分类系统的性能有不同程度的影响。
已提出的文本分类特征选择方法比较多,常用的方法有:
文档频率(Document Frequency,DF)、
信息增益(Information Gain,IG)、
校验(CHI)和互信息(Mutual Information,MI)等方法。
3 文本表示方法 text expressing
常见的文本表征的模型有:
1)传统的: one-hot(问题:维度高)、tf-idf(词频统计)
2)基于词向量的: Word2vec、doc2vec、glove、festext(基于特定任务、结构简单)
3)基于语言模型: ELMO、GPT、BERT (基于文本特征的,需要大量数据集)
3.1 One Hot(独热)编码
one-hot在特征提取上属于词袋模型
(1)概念介绍
One-Hot表示是把语料库中的所有文本进行分词,把所有单词(词汇)收集起来,并对单词进行编号,构建一个词汇表(vocabulary),词汇表是一个字典结构,key是单词,value是单词的索引。
如果词汇表有n个单词构成,那么单词的索引从0开始,到n-1结束。
词汇向量有n列,但是只有一列的值为1,把值为1的列的索引带入到词汇表(vocabulary)中,就可以查找到该词向量表示的词汇,也就是说,对于某个单词 term,如果它出现在词汇序列中的位置为 k,那么它的向量表示就是“第 k 位为1,其他位置都为0 ”,这就是One-Hot(独热)名称的由来。
举个例子来说:假设现有分词后的语料库如下
我 爱 学习 学习 爱 我
学习 很 重要
我 努力 学习
把上述语料中的词汇整理出来并进行排序(排序原则另说,可以有很多),假设我们的词汇表排序结果如下:
{“我”:3,“爱”:2,“学习”:4,“很”:1,“重要”:1,“努力”:1}
(2)单词的词向量:
得出如下词向量表示:
“我”:[1,0,0,0,0,0]
“爱”:[0,1,0,0,0,0]
(3)文档向量:
文档向量的表示方法是直接把各词的词向量表示加和,即文档向量中,列的值表示词在文档中出现的次数。
那么原来的三句话的向量表示如下:
[2,2,2,0,0,0]
[0,0,1,1,1,0]
[1,0,1,0,0,1]
One-Hot方法很简单,
优点:
解决了分类器处理离散数据困难的问题
一定程度上起到了扩展特征的作用
缺点:
没有考虑单词之间的相对位置(文本中词的顺序信息也是很重要的);
任意两个词之间都是孤立的(在大多数情况下,词与词是相互影响的);
如果文档中有很多词,词向量会有很多列,但是只有一个列的值是1(它得到的特征是离散稀疏的);
3.2 TF-IDF 模型
这种模型主要是用词汇的统计特征来作为特征集,TF-IDF 由两部分组成:TF(Term frequency,词频),**IDF(Inverse document frequency,逆文档频率)两部分组成,利用 TF 和 IDF 两个参数来表示词语在文本中的重要程度。
TF 称为词频, 用于计算该词描述文档内容的能力; IDF 称为逆文档频率, 用于计算该词区分文档的能力。
TF*IDF 的指导思想建立在这样一条基本假设之上,在一个文本中出现很多次的单词, 在另一个同类文本中出现次数也会很多, 反之亦然
假设要统计一篇文档中的前10个关键词.首先想到的是统计一下文档中每个词出现的频率(TF),词频越高,这个词就越重要。但是统计完你可能会发现你得到的关键词基本都是“的”、“是”、“为”这样没有实际意义的词(停用词),这个问题怎么解决呢?你可能会想到为每个词都加一个权重,像这种”停用词“就加一个很小的权重(甚至是置为0),这个权重就是IDF。公式如下:
TF应该很容易理解就是计算词频,IDF衡量词的常见程度。为了计算IDF我们需要事先准备一个语料库用来模拟语言的使用环境,如果一个词越是常见,那么式子中分母就越大,逆文档频率就越小越接近于0。这里的分母+1是为了避免分母为0的情况出现。TF-IDF的计算公式如下:
根据公式很容易看出,TF-IDF的值与该词在文章中出现的频率成正比,与该词在整个语料库中出现的频率成反比,因此可以很好的实现提取文章中关键词的目的。
其实,TF-IDF方法是将One-hot中为1的列改成了权值TF-IDF。
3.3 Word2Vec
传统的(基于计数的)文本数据特征工程策略包括了一大类的模型,这些模型通常称为词袋模型:包括词频、TF-IDF(词频逆文档频率)、N-grams等等。
虽然它们是从文本中提取特征的有效方法,但是由于模型本身就是一袋非结构化的单词,我们丢失了额外的信息,比如每个文本文档中围绕邻近单词的语义、结构、序列和上下文。
1、概念
Word2vec 使用的词向量不是我们上述提到的One-hot Representation那种词向量,而是 Distributed representation 的词向量表示方式。
其基本思想是 通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度。
word2vector有两种形式——CBOW 和 Skip-gram。
两种训练加速方法:
负采样
层次softmax。
2、Continuous Bag of Words(CBOW) 连续词袋模型
CBOW模型体系结构试图基于上下文单词(周围单词)预测当前目标单词(中心单词)。
考虑一个简单的句子,“the quick brown fox jumps over the lazy dog”,这可以是(context_window, target_word)对,如果我们考虑一个大小为2的上下文窗口,我们有([quick, fox], brown)、([the, brown], quick)、([the, dog], lazy)等例子。因此,该模型试图基于context_window单词预测target_word。
我们将在没有任何辅助信息的情况下,从语料库本身来做。可以将CBOW结构建模为一个深度学习分类模型,这样我们就可以将上下文单词作为输入X,并尝试预测目标单词Y。
工作原理实现将集中于以下几个部分:
构建语料库词汇表
建立一个CBOW(上下文,目标)生成器
构建CBOW模型架构
训练模型
获取Word Embeddings
3、Skip-gram 跳字模型
Skip-gram模型体系结构实现与CBOW模型相反的功能。它预测给定目标单词(中心单词)的源上下文单词(周围单词)。
考虑到我们前面简单的句子,“the quick brown fox jumps over the lazy dog”。如果我们使用CBOW模型,就会得到一对(context_window, target_word),其中如果我们考虑一个大小为2的上下文窗口,就会得到([quick, fox], brown), ([the, brown], quick), ([the, dog], lazy),等等。
现在考虑到Skip-gram模型的目标是根据目标单词预测上下文,该模型通常将上下文和目标颠倒过来,并尝试根据目标单词预测每个上下文单词。因此,任务变成了给定目标单词’quick’,预测上下文[the, brown],以此类推。因此,该模型是基于target_word预测context_window单词。
正如我们在CBOW模型中所讨论的,我们现在需要将这个Skip-gram架构建模为一个深度学习分类模型,这样我们就可以将目标单词作为输入并预测上下文单词。这变得有点复杂,因为我们在上下文中有多个单词。比如句子:“the quick brown fox jumps over the lazy dog”
我们将每个(target, context_words)对分解为多个(target, context)对,这样每个上下文只包含一个单词,从而进一步简化了这个过程。因此,我们前面的数据集被转换成成对的,比如(brown,quick),(brown,fox), (quick, the), (quick, brown)等等。但是,如何监督或训练模型,使其知道什么是上下文相关的,什么不是?
为此,我们对Skip-gram模型输入(X, Y),其中X是我们的输入,Y是我们的标签。我们使用[(target, context), 1]对作为输入正样本,其中target是我们感兴趣的单词,context是发生在目标单词附近的上下文单词,正样本标签1表示这是上下文相关的一对。我们还输入[(target, random), 0]对作为输入负样本,其中target仍然是我们感兴趣的单词,但是random只是从我们的词汇表中随机选择的一个单词,它与我们的目标单词没有上下文关系。因此,负样本标签0表示这是上下文无关的一对。我们这样做是为了让模型能够了解哪些词对与上下文相关,哪些不相关,并为语义相似的词生成类似的嵌入。
实现Skip-gram模型工作将集中于五个部分:
构建语料库词汇表
构建skip-gram[(target, context), relevancy]生成器
构建skip-gram模型结构
训练模型
得到词嵌入
参考链接:
1、https://blog.csdn.net/qq_38293297/article/details/104850025
2、https://zhuanlan.zhihu.com/p/422220941