什么是特征工程?

简单来说是对数据进行处理,为模型提供有效的输入表示

目的:将文本、图像等原始数据转成数字化、结构化的形式供模型使用,在 nlp 任务则主要针对文本数据

传统基于统计的方法

BOW

非常经典且简单的文本特征表示方法

基本思想:

  1. 忽略词语的顺序和语法结构,只关注词语的频率特征
  2. 将文本转为固定长度的向量

步骤: 1. 统计并去重训练文本中所有单词,构成词汇表 2. 针对单一文本,统计每个词的出现次数形成文本特征向量

最终形成的向量长度等于词汇表的大小,对应位置表示对应单词的出现次数 ##### 评价 优点:简单高效易实现

缺点:忽略单词顺序和语法结构、无法处理训练数据中未出现的词,最终向量高维稀疏

TF-IDF

实际上是一种加权技术, 评估一字词对于整个语料库的重要程度

基本思想是:如果只在某一篇文章中词频高,而在其余文章中很少出现,则可以认为其具有很好的类区分能力,适合用来分类

两个指标:TF是词频(Term Frequenc),IDF是逆向文件频率(Inverse Document Frequency)

通过计算公式可以看出,TF表示词语在当前文档的重要性,而 IDF 衡量了词语在整个文档/语料库的重要性

主要应用:搜索引擎、关键词提取、文本相似性、文本摘要

基于推理/预测的方法

词向量

定义:将单词映射到低维连续向量空间的方式,通过训练模型来获得每个单词的向量表示

作用:将原本稀疏且高维的矩阵转变为低维且连续的矩阵,一般为100~300维

特点:词向量内积或余弦表示单词间的相似性。也就是说如果两个词的语义很相近,那么它们的空间位置越近

注意:在实际运用中可以选择使用在大型语料库中预训练的词向量,但这对于一些垂直领域的任务可能不太适用,因为预训练的词向量可能无法很好地捕捉特定领域的语义信息

迁移学习

根据向量空间位置分布的特点,词向量或者说单词的分布式表示可以用来查找近似单词,但其使用场景还远不止此,其中一个非常重要的作用就是迁移学习——指在某个领域学习到的知识可以被应用于其它领域。

在上述提供的传统的基于统计的方法,更多的关注词频等信息,对任务的耦合程度极高,可以说脱离了原有训练数据就毫无意义。但是,在几乎所有类型的自然语言处理任务(分类、聚类、标注和情感分析等),单词的分布式表示都有很好的效果。

正因如此,虽然后面会花费大篇幅介绍词向量的训练过程,但是大多数时候我们可以直接使用在大型语料库中学习好的词向量。

Word2Vec

一种学习词向量的方法 有以下两种训练方法,利用神经网络,通过最大化预测内容的正确性来学习到词向量表示。

680e123707cb8.png

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函数来表示概率

为跟节点到单词为w的叶子节点的路径上的节点集合,为概率

训练的目标是最大化正确路径上所有节点决策的概率

Glove

遍历整个语料库来构建共现矩阵,优化目标函数

Word2Vec 更关注局部上下文信息,而Glove 语义捕捉更全面

共现矩阵

在word2vec中,通过滑动窗口选取输入样本

在Glove中,直接对窗口内的每对词进行词频统计,遍历整个语料库,从而得到共现矩阵

平滑损失函数

其中, 为特定大小窗口的共现次数, 表示学习到的词向量

为加权函数,用来调整每个词对损失的贡献,减对于高频词语的过分关注,更好的处理停用词等 ### 后续发展

随着文本表示方法的不断演进,我们对语言的建模方式也在不断提升。从早期基于词频、共现统计的方法,到如今依赖上下文语义、深度学习的技术路径,文本处理与语言建模之间的界限越来越模糊。特别是在引入神经网络和预训练模型之后,文本处理不再只是简单的特征抽取,而是成为了语言理解与生成的基础能力。

可以参考我另一篇博文:语言模型的技术演进综陈述:从N-gram到BERT,其中详细梳理了语言模型的技术路线与核心思想的转变过程。