文本数据处理方法
什么是特征工程?
简单来说是对数据进行处理,为模型提供有效的输入表示
目的:将文本、图像等原始数据转成数字化、结构化的形式供模型使用,在 nlp 任务则主要针对文本数据
传统基于统计的方法
BOW
非常经典且简单的文本特征表示方法
基本思想:
- 忽略词语的顺序和语法结构,只关注词语的频率特征
- 将文本转为固定长度的向量
步骤: 1. 统计并去重训练文本中所有单词,构成词汇表 2. 针对单一文本,统计每个词的出现次数形成文本特征向量
最终形成的向量长度等于词汇表的大小,对应位置表示对应单词的出现次数 ##### 评价 优点:简单高效易实现
缺点:忽略单词顺序和语法结构、无法处理训练数据中未出现的词,最终向量高维稀疏
TF-IDF
实际上是一种加权技术, 评估一字词对于整个语料库的重要程度
基本思想是:如果只在某一篇文章中词频高,而在其余文章中很少出现,则可以认为其具有很好的类区分能力,适合用来分类
两个指标:TF是词频(Term Frequenc),IDF是逆向文件频率(Inverse Document Frequency)
通过计算公式可以看出,TF表示词语在当前文档的重要性,而 IDF 衡量了词语在整个文档/语料库的重要性
主要应用:搜索引擎、关键词提取、文本相似性、文本摘要
基于推理/预测的方法
词向量
定义:将单词映射到低维连续向量空间的方式,通过训练模型来获得每个单词的向量表示
作用:将原本稀疏且高维的矩阵转变为低维且连续的矩阵,一般为100~300维
特点:词向量内积或余弦表示单词间的相似性。也就是说如果两个词的语义很相近,那么它们的空间位置越近
注意:在实际运用中可以选择使用在大型语料库中预训练的词向量,但这对于一些垂直领域的任务可能不太适用,因为预训练的词向量可能无法很好地捕捉特定领域的语义信息

迁移学习
根据向量空间位置分布的特点,词向量或者说单词的分布式表示可以用来查找近似单词,但其使用场景还远不止此,其中一个非常重要的作用就是迁移学习——指在某个领域学习到的知识可以被应用于其它领域。
在上述提供的传统的基于统计的方法,更多的关注词频等信息,对任务的耦合程度极高,可以说脱离了原有训练数据就毫无意义。但是,在几乎所有类型的自然语言处理任务(分类、聚类、标注和情感分析等),单词的分布式表示都有很好的效果。
正因如此,虽然后面会花费大篇幅介绍词向量的训练过程,但是大多数时候我们可以直接使用在大型语料库中学习好的词向量。
Word2Vec
一种学习词向量的方法 有以下两种训练方法,利用神经网络,通过最大化预测内容的正确性来学习到词向量表示。

CBOW
连续词袋模型,通过上下文来预测中间词,下图可以简单描述这一过程。在自然语言处理领域,理解单词的含义通常需要考虑上下文,因为上下文提供单词用法和语义的重要线索。
损失函数
为了简单起见,我们先只考虑上下文窗口为1的情况,即只取前后1个单词
概率建模:
套用交叉熵误差函数,得到如下公式
学习的任务就是让上式表示的损失函数尽可能小
skip-gram
跳元模型,与CBOW 完全相反,通过单词来预测上下文
损失函数
为了简单起见,我们依然只考虑上下文窗口为1的情况,即预测结果为前后1个词
由于输出层不止一个,因此损失函数要计算各输出层的总和
概率建模:
同样使用交叉熵误差函数,如果只考虑上述情况
推广到整个语料库
两种方法的比较
从CBOW和skip-gram预测过程上看:CBOW通过中间词对周围词进行调整,预测次数跟整个文本的次数基本是相等。而在skip-gram中,每个词作为输入时,都会受到周围词的影响,相当于比CBOW多进行了K次,K为上下文窗口大小。
所以,skip-gram训练出的词向量往往会有更好的表现,但是计算成本较高。
Word2Vec 高速化
word2vec的实现原理和训练过程都比较简单。但是在实际的使用场景中,词表往往有成千上万的单词,词汇量增大所带来的的计算效率问题是当前我们研究的问题。
实际上,效率问题主要是sfotmax层计算带来的,观察softmax计算公式,分母要进行V次exp计算
因此我们需要可以替代softmax的轻量计算
负采样
最初被用于加速skip-gram模型训练,后来被广泛用于自然语言处理,计算机视觉和推荐系统中。
核心思想
在训练时,不是对所有可能的样本进行训练,而是只针对正样本和少量随机选出来的负样本来训练
- 正样本:真实的上下文词,模型希望预测正确的配对
- 负样本:随机的无关词,模型希望预测错误的配对
这样一来,模型训练的目的不只是最大化正确的概率,还要最小化负样本正确的概率。
从任务上来看,我们用二分类来拟合多分类效果,从”是什么”到”是什么吗”的转变
带来两个主要好处
- 大大减少训练的计算量
- 同时关注正确的搭配和错误的搭配
损失函数
在多分类问题中,通常使用softmax将得分转化为概率。而对于二分类问题,并不需要归一化操作,输出层仅使用简单的sigmod函数即可
层次 softmax
核心思想
将词表组织成一棵二叉树
- 词表中的每个词放置在叶子节点
- 每个中间节点都有自己的词向量
- 每经过一个节点,都在做一次二分类
类似于在二叉搜索树上找到指定元素的过程,将复杂度从
损失函数
每个节点向下做出决策时依然是二分类,依然使用sigmod函数来表示概率
训练的目标是最大化正确路径上所有节点决策的概率
Glove
遍历整个语料库来构建共现矩阵,优化目标函数
Word2Vec 更关注局部上下文信息,而Glove 语义捕捉更全面
共现矩阵
在word2vec中,通过滑动窗口选取输入样本
在Glove中,直接对窗口内的每对词进行词频统计,遍历整个语料库,从而得到共现矩阵
平滑损失函数
其中,
随着文本表示方法的不断演进,我们对语言的建模方式也在不断提升。从早期基于词频、共现统计的方法,到如今依赖上下文语义、深度学习的技术路径,文本处理与语言建模之间的界限越来越模糊。特别是在引入神经网络和预训练模型之后,文本处理不再只是简单的特征抽取,而是成为了语言理解与生成的基础能力。
可以参考我另一篇博文:语言模型的技术演进综陈述:从N-gram到BERT,其中详细梳理了语言模型的技术路线与核心思想的转变过程。

