加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 大数据 > 正文

推荐系统技术 --- 文本相似性计算(二)

发布时间:2021-03-07 01:16:32 所属栏目:大数据 来源:网络整理
导读:第一篇地址:http://www.voidcn.com/article/p-vwrvnxub-c.html 上一篇中我们的小明已经中学毕业了,今天这一篇继续文本相似性的计算。 首先前一篇不能解决的问题是因为我们只是机械的计算了词的向量,并没有任何上下文的关系,所以思想还停留在机器层面,还
副标题[/!--empirenews.page--]

第一篇地址:http://www.voidcn.com/article/p-vwrvnxub-c.html
上一篇中我们的小明已经中学毕业了,今天这一篇继续文本相似性的计算。
首先前一篇不能解决的问题是因为我们只是机械的计算了词的向量,并没有任何上下文的关系,所以思想还停留在机器层面,还没有到更高的层次上来,正因为这样才有了自然语言处理这门课程了。

今天我们稍微说说这个吧,后台留言很多朋友对这方面感兴趣,因为自然语言处理实在不是一篇文章就能说清的,而且我水平也非常有限,我本身是个工程人员,比较在行的是系统设计和架构,我14年10月左右的时候我老大要我补一下这方面的理论才开始看这方面的东西,后来由于换工作的原因也断了一截,不是时时刻刻都在学这个,还有很多其他工作要做,但也还算比较连续吧,而且有一些朋友同事可以请教,不是一个人瞎搞,这已经比很多人好了。但即使是这样只能说还没有入门,或者说刚刚看到门,还没找到钥匙。

下面我说说我尝试过的模型吧,其他更高深的东西我也没用过,要写也能喷一下,但我觉得那就没意义了。

1. 主题模型(Topic Model)

主题模型是目前也比较流行的文本分类的方法了,他主要解决的是文章的分类问题,就是这篇文章属于哪个类别。

如何来对文章进行分类呢?如果按照之前的算法,我们可以把每篇文章的关键词都提取出来,然后按照关键词进行分类,把文章分到每个类别中,但是,那样显得不太高端,我们来想想这么一个情况,就是你是如何写这篇文章的?

比如我目前写的这篇文章文本相似性的计算,一般的思路是这样的。

  • 首先,你想好题目以后会想一些提纲,比如我想我会写一下主题模型,然后写词向量,这两个就是我的主题了。

  • 然后,我开始写了,写主题模型的时候,我的一些词语都是和主题模型相关的,比如LDA分类主题概率啊等等,然后写词向量的时候也会有这么一些词,这些就是主题下的词语。

  • 最后,我就是按照上面的两条规则把文章写完了。

如何让以计算机的思维来按这个规则写作呢?

  • 首先,定两个主题,然后把每个词都分到某一个主题下

  • 开始写作的时候就是先找个主题,然后在主题下找个词,然后写出来

  • 循环到上一步,就是这样么一直写,然后一篇文章就写好了

这样每个词都属于两个主题中的一个。

这样当然写不出东西来,但是我们现在需要的分类,如果反过来想想,我已经有一篇文章了,如果我知道这篇文章的每个词都属于哪个分类,那么我其实就知道了这篇文章都属于哪些个主题了,那么有相似主题的文章,很可能是比较相似的。

于是,现在的关键问题就是找到主题主题下的词了,把这两个东西当成一个模型,新来一篇文章就在这个模型里面过一遍,然后就知道这篇文章的主题了。

主题主题下的词怎么找呢?最简单的就是靠人拍啊,人为的设定一些主题和这个主题下的词以及词出现的概率,那不就行了,人怎么拍呢?靠经验啊,我今年30多了,看了二十多年的书,少说有1000本吧,我知道哪些词应该在哪些分类下啊。OK,靠经验估计出来的,我靠,是不是有种似曾相识的赶脚啊?这不是机器学习最喜欢干的事情么?给一堆文章给他『看』,然后自己估算出一个主题模型出来。

好吧,其实主题模型就是这么干的。LDA模型的数学表达比较复杂,涉及到好几个分布函数,还有采样函数等,这篇文章必然讲不清楚,如果感兴趣的,我后面列了几篇文章,可以看看他的数学原理是什么。这个东西我理解了很久很久才算明白,我现在用说人话的方式来说说整个过程,作为一个抛砖引玉吧,当然,和实际的算法还是有比较大出入的,如果真感兴趣可以看后面的推荐文章。

我们先定义下一个场景,有3篇文档,每个文档有2个词,设定有2个主题,这三篇文档和词分别是:

1 :你好 世界
2 :你好 中国
3 :搜索 你好

那么词就是:你好,世界,中国,搜索 四个
主题定义为:T1,T2

下方这些人话是重点了。

因为我们认为写文章的时候是是按照两步来做的(先确定主题,然后确定词,最后把词写出来),那么在数学上可以变成两个概率的乘积了,所以,这个词为什么会出现在这篇文章呢?是因为

这个词在这篇文章出现的概率=这个主题在这篇文章的概率*这个词在这个主题下出现的概率,也就是
P(W(词)|D(文章))=P(W(词)|T(主题))*P(T(主题)|D(文章)),这个 公式非常重要。

P(W(词)|D(文章)) 这个其实是可以直接统计出来的。

P(W(词)|T(主题)) 这个是模型的一部分,是要求出来的。

P(T(主题)|D(文章)) 这个是最后分类的结果

有新来的文章我们要对这篇文章进行分类的话,先统计出P(W(词)|D(文章)),然后用P(W(词)|D(文章))去除以P(W(词)|T(主题)) ,就得到了这篇文章所属的每个主题的概率了。

人话说完了,我们看看机器怎么来求出这个P(W(词)|T(主题))

  • 首先随机指定每个词属于某个主题,那么假设设定完了以后P(W|T)的矩阵就是

  • 然后随机的指定每个主题对应的文档概率,P(T|D)的矩阵就是

  • 然后拿第一篇文章的第一个词出来,统计出来他在这篇文章出现的概率,也就是0.5,再给他随机拍一个主题,比如T1

  • 用上述的计算出来的话0.0*0.5=0.0,而我们统计出来是0.5啊,这不对,我们再试试别的主题,比如T2,这么算出来0.33*0.5=0.165,也不对啊,但比T1好像要靠谱一点,那我们按照这个调整一下上面两个表格的数字吧,比如把那个0.0改成0.2之类的(具体怎么调?呵呵呵,靠说人话我说不出来了,看后面的链接吧)。

  • (编辑:辽源站长网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读