前言
在上篇博文 【NLP】入门(二):搜索引擎是怎么工作的 中,博主简单地介绍了搜索引擎的工作原理,并且在文末提到了处理匹配排序最有名的算法之一 TF-IDF。
接下来,跟随博主来了解一下 TF-IDF 算法;
什么是 TF-IDF ?
TF-IDF (term frequency–inverse document frequency) 是一种用于信息检索与数据挖掘的常用加权技术,常用于挖掘文章中的关键词,而且算法简单高效,常被工业用于最开始的文本数据清洗。 TF-IDF 有两层意思,一层是 "词频"(Term Frequency,缩写为 TF),另一层是 "逆文档频率"(Inverse Document Frequency,缩写为 IDF)。
如果直接解释 TF (词频), IDF (逆文本频率指数),对于从来没接触过这些说法的人,肯定是感觉是云里雾里的。
这里我们接着沿用上一篇博文里提到的关于咨询公司的事件。假如你是个新手房产中介,当客户来咨询楼盘相关信息时,你需要快速的从所有楼盘资料中,定位到某几篇需要的文档中,那应该怎么做呢?
这时就想起了上篇博文 【NLP】入门(二):搜索引擎是怎么工作的 中提到的倒排索引,将资料进行归类,我们将去寻找每篇文档的关键词,那些在某篇文档中出现频率很高的词,比如每篇文档中基本都会有谈论 “租房”,“新房” 或 “二手房” 这样的字眼,这些高频的字眼其实就代表着这篇文档的属性, 我们大概也能通过这些字眼判断这是不是客户关心的问题。
但是有一个问题,很多语气词,没有代表意义的词在一篇文档中同样频率很高,比如 “我”,“中介”,“和” 这种词,几乎每篇文档中都会存在,而且提及很多次。 它们很明显,虽然词频高,但是不具有区分力,用上面的方法,这些词也会被误认为很重要。
因此引入了一个全局参数(IDF),来判断这个词在所有文档中,是不是垃圾信息,而不是光看局部信息(某篇文档中的词频 TF),以至于带来统计偏差;
很明显,“我”,“中介”,“和” 这种词在全量文档中就是这样的垃圾信息, 而 “租房”,“新房” 或 “二手房”是在全局下有区分力的词。所以如果我们把局部(TF)和全局(IDF)的信息都整合起来一起看的时候,我们就能快速定位到具体的文档了。
具体解析
接下来我们将上面的内容用数字来进行表示,这样会更加生动形象。
TFTFTF
| 我 | 中介 | 租房 | 买房 |
---|---|---|---|---|
文档1 | 0 | 9 | 4 | 1 |
文档2 | 5 | 21 | 1 | 15 |
文档3 | 2 | 3 | 1 | 0 |
IDFIDFIDF
| 我 | 中介 | 租房 | 买房 |
---|---|---|---|---|
区分力 | 0.1 | 1.9 | 21.1 | 15.6 |
TF×IDFTF times IDFTF×IDF
| 我 | 中介 | 租房 | 买房 |
---|---|---|---|---|
文档1 | 0 | 17.1 | 84.4 | 15.6 |
文档2 | 0.5 | 39.9 | 21.1 | 234 |
文档3 | 0.2 | 5.7 | 21.1 | 0 |
TF-IDF 两者结合其实就是两者相乘的意思,这样的结果意味着所有的文档,都能用一串集合所有词的分数来表示。通过分数的高低,我们也能大概看出这篇文档的关键内容是什么。比如第一篇,虽然 TF 告诉我们文档中 “中介” 这个词最多,但是 IDF 却告诉我们 “租房” 在文档中更具有代表性,所以根据 TF-IDF 的结合,这篇文档更具有 “租房” 属性。
那我们在搜索时又都经历了什么呢?
假设我们搜索关键词 “中介租房”,机器会利用词表的模式计算 “中介租房” 这个问题的 TF-IDF 值,然后会计算问句和每篇文档的 cos 距离,这个例子中的计算过程,简单来说,就是将文档按照词的维度放到一个四维空间中,然后把问句同样也放到这个空间里,最后看空间中这个问题离哪一个文档的距离最近,越近则相似度越高。通过这样的方式呢,我们就能找到搜索问题的最佳匹配文档了。
说到这里,不得不提到一个在 NLP 问题中非常重要的东西,那就是向量。我们刚刚把问句或者是文档,用数字的模式,投射到空间中,都是将问句或文档转变成向量,然后按照向量的模式指向空间中的某个位置。
举个例子,第一串数字就是文档1的向量表达,第二串是文档2的向量表达,第三串是问题的向量表达。他们都是空间中的点。
| 我 | 中介 | 租房 | 买房 |
---|---|---|---|---|
文档1 | 0 | 17.1 | 84.4 | 15.6 |
文档2 | 0.5 | 39.9 | 21.1 | 234 |
问题 | 0 | 1×times×1.9 | 1×times×21.1 | 0 |
这里使用三维空间代替四维空间:
所以,TF-IDF 是一种向量表达形式,以后在接触 NLP 模型的过程中,还会不断听到词向量,句向量,文章向量等等不同的向量表达形式。
后记
以上就是 【NLP】入门(三):TF-IDF(理论篇) 的全部内容了。
本文简单地从理论上介绍了 TF-IDF,下一篇博文 【NLP】入门(四):TF-IDF(代码篇) 将从代码的角度来诠释 TF-IDF,敬请期待,希望本篇博文对大家有所帮助!