推荐系统技术之文本类似性计算(一)

推荐系统技术 --- 文本类似性计算(模型化 上)

1. 前言

推荐系统分为两种,一种是基于用户的,根据某个用户的特性推荐一些东西,还有一种是根据内容,推荐一些类似的内容,或者是两种的结合,任何推荐系统,仔细分析下来,都属于这两种状况的组合。算法

今天咱们说一下基于内容推荐中的一个分支,也是使用得比较多的内容推荐方式,那就是基于文本类似性的推荐,咱们说文本类似性的计算,文本类似性应用范围是比较广的:编程

  • 普通的阅读文章,底下的相关文章推荐能够用数组

  • 论文查重也能够用微信

  • 过滤类似度很高的新闻,或者网页去重数据结构

本系列咱们会写三篇。编程语言

  • 前两篇是模型化,分为上和下,这两篇是重点,开篇会用说人话的方式说说计算文本类似性的一些思想和套路,对文本类似性有个感性的了解,而后会把人话变成数学化的东西,只有数学化了才能计算,才有计算机能作的文本类似性,固然不会出现大量数学公式,只会有一些数学概念。工具

  • 第三篇是工程化,这篇是非重点,会介绍一下相关的工程的工具包或者代码片断,至关于局部实战吧,没有理解第一篇说的直接看这篇没什么含义。搜索引擎

2. 直观理解

假如咱们有如下这么些篇文档spa

  • 用Golang写一个搜索引擎3d

  • 搜索引擎的实现

  • 推荐系统的技术要点

  • 经常使用的推荐算法总结

  • 广告系统是一个搜索引擎和推荐引擎的组合

  • 计算广告中都有哪些数学原理

有个一个小朋友,他叫小明,可是他还在上学前班,你让他来讲这些文章中哪几篇比较类似,他如今字都认不全,更别说理解这些文章中的概念了,若是他特别聪明,那么他极可能说1和5比较类似,由于都有个长得同样的东西一个搜索引擎

又过了一些年,小明已经读初中了,你再让他来看哪几篇比较类似,他可能会告诉你1和2比较类似,而后和5也比较类似,由于他如今已经学会了主谓宾定状补的语法,知道第一条的主要表述的是搜索引擎,第二篇主要表述的也是搜索引擎,第五篇虽然主要不是说的搜索引擎,但宾语的定语也是搜索引擎,也是相关的。因此会给出1和2类似,5和他们也比较类似。

再过一些年,小明已经大学毕业了,学的就是计算机专业,这时候你再来看,他会给出6个都比较类似,由于他已经知道了搜索,推荐,广告三个领域的基础技术都差很少,若是对一个感兴趣,那么对另外的主题也会比较感兴趣,只不过类似性有高有低而已。

上面的三个阶段,实际上也是文本类似性计算发展的三个阶段,从最开始的字面的匹配类似,到第二阶段的词汇的匹配类似,再到第三阶段的语义的类似,咱们一个一个来讲说每一个阶段使用的数学方法和原理,每一个阶段都会有数学原理,但咱们对数学公式不作深刻讨论,感兴趣的能够本身查阅具体的数学原理。

下面,咱们再用计算机和数学的思想来看看计算机如何在上述三个阶段中进行文本类似性的计算的。

4. 前期准备

在开始三个阶段以前,咱们先准备一些必要的知识。

4.1 分词

分词也叫切词,由于文档的最小单位是词,因此咱们默认都是讨论分词过的状况,为了方便,咱们把每一个词都分配一个惟一id,咱们叫这个词的token。后面出现token这个概念,就是表示切词后的惟一id

4.2 词袋模型

维基百科解释 :Bag-of-words model是个在天然语言处理和信息检索下被简化的表达模型。此模型下,像是句子或是文件这样的文字能够用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。

通俗的说就是把一个文档分词获得的一堆token放到一个袋子里,用这个袋子来表示这个文档,这是一种简化的文本描述方法。

5. 学前班阶段

学前班阶段也叫直接计算类似的阶段,咱们其实不关心这篇文章到底讲什么,用计算机的理解就是,分词完成之后,咱们找到一种方法,来计算各个token集合之间的类似性就好了。

5.1 JaccardSimilarity方法

分词之后,咱们获得的一堆token,按照学前班的小明的思想,找到两两之间类似性便可,JaccardSimilarity方法能够知足这个条件,JaccardSimilarity提及来很是简单,容易实现,实际上就是两个集合的交集除以两个集合的并集,所得的就是两个集合的类似度,直观的看就是下面这个图。
图片描述

数学表达式是:
图片描述

很明显,咱们能够很容易的把上面的那几个文档两两进行上述计算,而后获得每两个文档的类似性,再一排,就知道每一个文档和其余每一个文档的类似性了。

即使新来一个文档,按照上面的公式计算一下,就知道它和每一个文档的类似性了,彻底没有难度,固然,你会发现算出来真的就像个学前班的学生弄出来的,彻底没有可用性。

6. 初中阶段

学前班阶段实在是太Low了,咱们看看初中阶段都出现了一些什么新东西?

6.1 数学化

要将表达意思的文本变成可计算类似度的东西,首先,必须将文本数字化,而且数字化之后还能保留文本的一些基本信息,只有数字化之后才有可计算性,只有保留了基本信息,这个可计算性才有可信度。

线性代数给咱们提供了一个数学工具叫向量,向量看上去特别简单,就是一串数字,别看它看上去很是简单,但倒是很是强大的数学工具,有多强大呢?咱们从侧面来讲说,咱们知道不管哪一个编程语言,都有一个最基本的数据结构,是内嵌在语言中的,那就是数组,而数组就是向量,数组有多强大不用我说了吧?谁敢说他没用过?它都已经强大到咱们感受不到他的强大了,就像空气同样,重要到咱们不以为他重要了(北京除外,呵呵)。

若是咱们能将一个文本变成一个向量,那么咱们就将一篇复杂的文章变成了一个能够用数组描述的数学概念了。

啰嗦了这么多,若是有一个向量了会怎么样?再往上一步,线性代数还给了咱们一个概念,就是空间,任何向量均可以表示为某一个空间上的一个点。

因此说,先有了文本,文本变成了向量,再有了空间,向量变成了空间的点,那么咱们经过求两个点之间的距离,就求得了两个文档的类似性。

至此,数学化完成了,文本类似性的计算就变成了空间中两个点的距离的计算,就像下图同样。

6.2 向量化

6.2.1 最简单的向量化

咱们先来看看如何进行向量化,前期准备部分咱们已经说了,每一个词均可以表示为一个惟一的token,那么最简单的向量化,咱们拿这个token来向量化,好比下面两个文档,每一个词用一个id表示(搜索引擎这个词重复出现了,因此id同样,都是5)

文档内容 token集合
用/Golang/写/一个/搜索引擎/ 1,2,3,4,5
搜索引擎/的/实现/ 5,6,7

这两个向量不同长,很差映射到同一个空间中,因而咱们这么处理一下,编号1到7为全部的token,用数组的下标表示,若是这个编号上有词,那么设为1,不然设为0,这样一来,两个文档向量化之后就变成了

用Golang写一个搜索引擎  ===>  [1,1,1,1,1,0,0]
搜索引擎的实现          ===>  [0,0,0,0,1,1,1]

这样,两个文档就都向量化了,虽然这种向量化是最简单的,但无论怎样,咱们至少把文本变成了数学符号了。

6.2.2 TF-IDF向量化

文本处理中,还有一种很是常见的向量化方法,就是TF-IDF方法,关于TF-IDF方法,能够参见我以前的一篇文章,已经说得比较清楚了,这里就不赘述了,能够点击连接打开看。

总之,经过TF-IDF的向量化方法,咱们能够将每一个词向量化成一个表示权重的小数,而不是上面的0,1向量了,它已经带有了文本的信息了,经过TF-IDF计算,两个文档向量化之后就变成了下面这样

用Golang写一个搜索引擎  ===>  [0.5, 0.8, 0.2, 0.15, 0.9, 0,   0]
搜索引擎的实现          ===>  [0,   0,   0,   0,    0.8, 0.4, 0.3]

这样向量化之后,每一个词都带上了TF-IDF信息了,而TF-IDF的做用就是保留词在文档中的权重信息,这就至关于保留了文本的信息,因而咱们经过token的概念和TF-IDF方法,就把一个文本向量化了,而且向量化完了之后还保留了文本自己的信息,每个向量就是一个前面提到的词袋。

6.3 向量空间模型

向量化完了之后,须要提供一个空间来进行计算,咱们把这个叫作向量空间(VSM),这没啥好说的,好比向量是一个二维向量,那么空间就是一个平面,若是是个三维向量,那么空间就是一个立体空间,上文中的向量是一个7维向量,那么空间就是一个七维空间了。

这样,每一篇文档向量化之后都是一个7维向量,均可以表述为这个向量空间中的一个点了。

6.4 向量类似度计算

有了向量空间和向量自己了,计算两个向量的类似度就简单了,通常有两种方法

6.4.1 欧式距离

不是说每一个向量就是这个空间中的一个点么?那么类似性就是直接计算这两个点的欧式距离,欧式距离公式初中就学了哦

图片描述

把上面那两个向量用这个距离公式一带入,就求出两篇文档的类似度了。

6.4.2 余弦类似度距离

除了欧式距离,还有一种方法求类似度,就是求两个向量之间的夹角,这个叫余弦类似性,这也是初中数学的内容,不过初中咱们学的是二维向量,若是是N维呢?是同样的,假设两个向量是A和B,那么公式是,n表示维度

图片描述

照样带入,就能求出两个文档类似度了。

7. 中学毕业

至此,文本类似性计算的最基本的概念和模型都介绍完了,中学已经毕业了,你能够按照上面的方法本身试着计算计算文档的类似性,应该不会太离谱,后面一篇会介绍一些更加高级的东西,可是总体的思想不会有太大的变化,仍是向量化文档,而后计算向量间的类似度来表述为文本之间的类似度。

这篇咱们看到的东西都仍是浅层的文本类似性计算,可是其实一个TF-IDF向量化模型,一个余弦类似性夹角计算已经能够处理一大部分的文本类似性计算了,并且效果还凑合吧,但后面出来的各类语义模型才是文本推荐的将来。


欢迎关注个人公众号,主要聊聊搜索,推荐,广告技术,还有瞎扯。。文章会在这里首先发出来:)扫描或者搜索微信号XJJ267或者搜索西加加语言就行

图片描述

相关文章
相关标签/搜索