推荐系统技术之文本相似性计算(一)
副标题[/!--empirenews.page--]
1. 前言推荐系统分为两种,一种是基于用户的,根据某个用户的特性推荐一些东西,还有一种是根据内容,推荐一些相似的内容,或者是两种的结合,任何推荐系统,仔细分析下来,都属于这两种情况的组合。 今天我们说一下基于内容推荐中的一个分支,也是使用得比较多的内容推荐方式,那就是基于文本相似性的推荐,我们说文本相似性的计算,文本相似性应用范围是比较广的:
本系列我们会写三篇。
2. 直观理解假如我们有以下这么些篇文档
上面的三个阶段,实际上也是文本相似性计算发展的三个阶段,从最开始的字面的匹配相似,到第二阶段的词汇的匹配相似,再到第三阶段的语义的相似,我们一个一个来说说每个阶段使用的数学方法和原理,每个阶段都会有数学原理,但我们对数学公式不做深入讨论,感兴趣的可以自己查阅具体的数学原理。 下面,我们再用计算机和数学的思想来看看计算机如何在上述三个阶段中进行文本相似性的计算的。 3. 前期准备在开始三个阶段之前,我们先准备一些必要的知识。 3.1 分词分词也叫切词,因为文档的最小单位是词,所以我们默认都是讨论分词过的情况,为了方便,我们把每个词都分配一个唯一id,我们叫这个词的token。后面出现token这个概念,就是表示切词后的唯一id 3.2 词袋模型维基百科解释 :Bag-of-words model是个在自然语言处理和信息检索下被简化的表达模型。此模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。 通俗的说就是把一个文档分词得到的一堆token放到一个袋子里,用这个袋子来表示这个文档,这是一种简化的文本描述方法。 4. 学前班阶段学前班阶段也叫直接计算相似的阶段,我们其实不关心这篇文章到底讲什么,用计算机的理解就是,分词完成以后,我们找到一种方法,来计算各个token集合之间的相似性就行了。 4.1 JaccardSimilarity方法分词以后,我们得到的一堆token,按照学前班的小明的思想,找到两两之间相似性即可,JaccardSimilarity方法可以满足这个条件,JaccardSimilarity说起来非常简单,容易实现,实际上就是两个集合的交集除以两个集合的并集,所得的就是两个集合的相似度,直观的看就是下面这个图。 数学表达式是: 很明显,我们可以很容易的把上面的那几个文档两两进行上述计算,然后得到每两个文档的相似性,再一排,就知道每个文档和其他每个文档的相似性了。 即便新来一个文档,按照上面的公式计算一下,就知道它和每个文档的相似性了,完全没有难度,当然,你会发现算出来真的就像个学前班的学生弄出来的,完全没有可用性。 5. 初中阶段学前班阶段实在是太Low了,我们看看初中阶段都出现了一些什么新东西? 6.1 数学化要将表达意思的文本变成可计算相似度的东西,首先,必须将文本数字化,并且数字化以后还能保留文本的一些基本信息,只有数字化以后才有可计算性,只有保留了基本信息,这个可计算性才有可信度。 线性代数给我们提供了一个数学工具叫向量,向量看上去特别简单,就是一串数字,别看它看上去非常简单,但却是非常强大的数学工具,有多强大呢?我们从侧面来说说,我们知道无论哪个编程语言,都有一个最基本的数据结构,是内嵌在语言中的,那就是数组,而数组就是向量,数组有多强大不用我说了吧?谁敢说他没用过?它都已经强大到我们感觉不到他的强大了,就像空气一样,重要到我们不觉得他重要了(北京除外,呵呵)。 如果我们能将一个文本变成一个向量,那么我们就将一篇复杂的文章变成了一个可以用数组描述的数学概念了。 啰嗦了这么多,如果有一个向量了会怎么样?再往上一步,线性代数还给了我们一个概念,就是空间,任何向量都可以表示为某一个空间上的一个点。 所以说,先有了文本,文本变成了向量,再有了空间,向量变成了空间的点,那么我们通过求两个点之间的距离,就求得了两个文档的相似性。 至此,数学化完成了,文本相似性的计算就变成了空间中两个点的距离的计算,就像下图一样。 5.2 向量化(编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |