矢量语义与嵌入之 TF-IDF 检索

0x00 Abstract

自然语言处理就是研究如何让计算机理解人类语言的一门技术。将计算机不能理解的人类语言编码成可以理解的向量化表示,是 NLP 工作的开始与基础。TF-IDF 是 NLP 入门的基础知识。通过对这种编码方式的学习,可以使我们更加容易理解 NLP 工作的本质。

这块内容第一次学的时候比较难理解,后来看到莫烦老师讲的才算是彻底明白。补充一下这块内容。

NLP 的首要任务:Vector Semantics and Embedding,也可以说是文本向量化,或着文本特征提取。想要表达的就是,NLP 首先要做的是,将文本语言变成计算机可以理解的语言——向量,否则后面的工作自然是无法开展的。

在文本向量化的问题中,词袋模型(Bag-of-Words Model)和词嵌入(Word Embedding)是两种最常用的模型。更准确地说,词向量只能表征单个词,如果要表示文本,需要做一些额外的处理。本篇笔记首先学习词袋模型与 TF-IDF。

0x01 TF-IDF 的使用场景

以搜索引擎为例,有了批量性地召回相对合适的内容后,比如我已经从 1 亿个网页中召回了 100 万个,但 100 万对于我来说,已经够让我看上好几年了。怎么能再继续提升一下精确度,找到我更在乎的内容呢?

所以需要对召回的这 100 万个内容,做一个【问题与内容】的相似度排序,只返回那些头部内容(问题指的是用户搜索的词条,内容就是我们召回的网页)。

因此简单来说,TF-IDF 要做的就是相似度排序,我们取相似度最高的内容返回给用户。从本质上来说,TF-IDF 是一种 向量表达 把语言 向量化,将词语,句子,文章转为词向量,句向量,文章向量。因为计算机只能理解数字,所以把我们要 把计算机不能理解的文本转为向量。等看完后面的内容就会深刻理解为什么 TF-IDF向量表达

0x02 TF-IDF 的原理

TF :词频(Term Frequency) IDF :逆文本频率指数(Inverse Document Frequency)

  • 词频 TF :反应文章的 局部信息
    • 在一篇文章中,越重要的内容,出现(强调)的次数越多,那么词频 TF 就会越高。所以这些高词频的词,就可以代表这篇文章。
    • 但伴随而来的问题是,文章中许多的语气词或者“你我他”这种词或者标点符号,同样也会出现很多次,但这些词往往也是高频词,但是没有意义。如何解决这种情况?那就需要 IDF
  • 逆文本频率指数 IDF :反应系统的 全局信息
    • IDF 可以帮助我们判断词语在系统中的 区分力 大小。
      • 比如,如果 每篇文章 中都有“我”,那么它在所有文章中的 区分力都不强
      • 如果你搜索的关键词是“莫烦”,全网都没有几个 叫“莫烦”的,那么“莫烦” IDF 就会很大,即“莫烦”的 区分力更强
    • 既然 TF 是以单篇文章为中心的局部词信息,但并不知道如果放到全局(所有文章),哪些 TF 高频词是全局垃圾词(中性词),是搜索时没有意义的词; IDF 是统计所有文章的全局词信息,可以分辨 TF 中的哪些高频词是全局垃圾词,但并不知道每个单篇文章中的高频关键词。那么为什么不把两种指标结合,发挥各自的优势?因此通过 TF-IDF 来表达一篇文章。
  • TF-IDF : TF × IDF
    • 将两种指数相乘,得到 TF-IDF 表达一篇文章。
    • 降低没有意义的词的重要性,突出文章中真正具有关键意义的内容(词语)。

举个例子:比如有以下三篇文章,我们选取图中的四个词来表达这三篇文章。

|700

计算出这四个词的 TFIDF 之后,将两者相乘,得到 TF-IDF

通过这些词的分数高低,可以判断每篇文章的关键词是什么。比如文章 1,即使“爱”的词频最高,是文章 1 中出现最多的词,但是通过 IDF 判断得知是全局垃圾词,反而“莫烦”的全局区分力更强(即使词频不高),所以根据综合评分 TF-IDF 得知——在文章 1 中,“莫烦” 的权值更重,更能代表这篇文章。

至此,我们得到了三篇文章的向量化表示,那么如何在搜索中应用这三个文章向量呢?

0x03 TF-IDF 的应用

假设我们搜索“莫烦 Python”,计算机首先通过词表的模式,计算这个搜索问句(“莫烦 Python”)的 TF-IDF 值。然后计算搜索问句与每篇文章的 TF-IDF 值的 cosine 距离。简单来说就是将所有文章,按照词向量的维度放入四维空间(对应四个词),然后将搜索问句向量也放进去,最后查找哪一篇文章离这个搜索问句最近,越近说明相似度越高。由此找到与搜索问句最匹配的文章。图中是用三维空间来说明,一样的意思。

动手实操一下吧: models.tfidfmodel – TF-IDF model — gensim

0x04 向量化表达

向量化是 NLP 工作的基础。将问句,词语,句子或者文章,通过数字的形式投射到空间中,也就是将这些语言转为计算机可以理解的向量,然后按照向量的模式指向空间中的某个位置。

如图,比如 0,23,116.5,21 就是文章 1 的向量表达,下面是文章 2 与搜索问题的向量表达。所以 TF-IDF 本质上是一种向量表达。NLP 中还有许多其他的向量表达与应用,TF-IDF 是其中一种比较基础且好用的一种方式。

在实际应用中,一般不存在的词是不放入每条数据的词袋的,通过这样的方式来节约内存。这种技术叫稀疏矩阵(Sparse Matrix):只存储有内容的值,而忽略无内容的值。因此词袋模型的文本表征,其实是一种稀疏向量表达,因为向量里面的元素大部分都是 0,只有出现在当前文本的词语才有词频的赋值。

拓展: TF-IDF 就是一张将 词语重要程度 转换成 向量 的文档展示方式,那么在这些向量中,必定会有主导型元素,而这些元素其实就是这篇文档中很重要的关键词了。因此除了搜索匹配之外,TF-IDF 还有很多的应用,比如将挑选文档中的关键词(将主导元素提取出来)。 另外,由于 IDF 是所有文档的全局信息,那么带有不同属性的文档集群可能拥有不同性质的 IDF 分布。比如金融领域的 IDF 与生物领域的 IDF ,如果我要搜索金融相关的信息,却是在生物领域的 IDF 下搜索,那么得到的结果必然是不准确的。因此我需要一个带有金融属性的 IDF 表来优化对金融子领域的搜索。这也是 IDF 比较重要的应用方式之一。

0x05 词袋模型与 TF-IDF

词袋(BoW)模型是数字文本表示的最简单形式。像单词本身一样,我们可以将一个句子表示为一个词向量包(一个数字串)。初入 NLP 可能会对这些概念产生困惑,比如什么是词袋模型,TF-IDF 就是词袋模型吗,下面来解释一下。

词集与词袋模型

词袋模型将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。这个模型的主要作用也就是对文本做单词切分,有点从一篇文章里提取关键词这种意思,旨在 用向量来描述文本的主要内容,其中包含了词集与词袋两种。

词集模型:单词构成的集合,集合中每个元素只有一个,即词集中的每个元素为一个单词,词集中的每个单词只出现一次,不重复。

词袋模型:在词集的基础上加入了频率这个维度,即统计单词在文档中出现的次数(令牌化和出现频数统计),通常我们在应用中都选用词袋模型。或者说,在词集的基础上,如果一个单词在文档中出现不止一次,统计其出现的次数。说人话就是,将每篇文章看成一袋子词,并忽略每个词出现的顺序。

词袋模型与 TF-IDF 联合使用

词袋创建一组向量,其中包含文档中的单词出现次数,而 TF-IDF 编码可以识别其中每个单词的区分力,然后赋予权重。因此通过词袋模型是一种基础模型, TF-IDF 是一种编码方式,基于词袋模型,我们可以采用 TF-IDF 编码,也可以使用 One-Hot 编码或者其他的编码方式。

我理解就是,恰好词袋模型实现了词频统计,恰好这正是 TF 要做的事情,所以再加上 IDF 联合起来,基于词袋模型实现了我们要做的 TF-IDF 编码。

0x06 文本向量化

刚入门 NLP 想必会对这些专业名词头晕眼花,下面简单列举一下关系:

  • 文本向量化(文本表征 Word Representation)
    • 词袋模型及其编码方法(BoW)
      • One-Hot 编码
      • TF 编码
      • TF-IDF 编码
      • N-gram 编码
    • 词嵌入模型(Word Embedding)
      • Word2Vec
        • Skip-Gram 模型
        • CBOW 模型
      • GloVe
    • 主题模型(Topic Model)
      • LSA 模型
      • PLSA 模型
      • LDA 模型

Conclusion

Bag-of-Words Model(BoW)和 TF-IDF 编码都是帮助我们将文本句子转换为向量的技术,是使得机器理解文本的技术。

但是 BoW 这样的技术会有一些弊端,比如语序关系丢失(忽略上下文),异常依赖于优秀的词汇库,缺乏相似词之间的表达,并且向量稀疏。为了解决这些问题,下一篇笔记学习另一类向量化的方法——Word Embedding 词嵌入。即自然语言中的词语转化为稠密的向量,相似的词会有相似的向量表示,这样的转化方便挖掘文字中词语和句子之间的特征。

References

TF-IDF: 自然语言处理(NLP)之使用 TF-IDF 模型计算文本相似度 你天天用的搜索引擎是怎么工作的 - 自然语言处理 | 莫烦 Python 统计学让搜索速度起飞 - 自然语言处理 | 莫烦 Python

词袋模型与 TF-IDF: 词袋模型与 TF-IDF 词袋模型和 TF-IDF 词袋模型与 TF-IDF 模型 词袋模型 | 机器之心

词袋模型与词嵌入: 词袋模型和词向量模型概念介绍 从词袋模型 TF-IDF 到词嵌入 Word Embedding

斯坦福经典 NLP 教材: https://web.stanford.edu/~jurafsky/slp3/6.pdf