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

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

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

这么一个一个词下来,上面两个表格就在不断更新,然后我们一遍一遍的循环迭代,直到上面两个表格能满足所有文档所有词要求了就结束了。放心,不会死循环的。
这么一轮下来,就得到了两个表格了。这两个表格就是我们的LDA模型了。

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

  • 然后我们还可以把新文章也放进模型中继续训练,然后又得到一个更新了的表格,这样不断有文章进来,表格就不断变化了。

  • 好了,说完了,在没有一个公式的情况下我只能说到这了,实际的LDA还是有非常大的差距的,如果大家感兴趣,可以看看下面几篇文章:

    • http://www.52nlp.cn/%E8%BD%AC%E8%BD%BD-topic-modeling-made-just-simple-enough

    • http://emma.memect.com/t/9756da9a47744de993d8df13a26e04e38286c9bc1c5a0d2b259c4564c6613298/LDA 《LDA数学八卦》

    • http://yuedu.baidu.com/ebook/d0b441a8ccbff121dd36839a?pn=3&pa=3 《LDA漫游指南》

    如果你看了还是没有懂,或者你完全看不懂上面的文章,那么回头去看看高数,概率论吧,我只能帮到这了,但是不懂没关系,你也可以玩LDA,我后面的文章会有工程化的例子,不用懂也行。

    主题模型除了LDA还有很多其他的,比如LSI,虽然最后结果也比较靠谱,但是他的可解释性就不强了,我也没法用说人话的方式描述出来了。

    主题模型这种东西是基于大规模的语料的情况下才有效果,而且主题的设定个数也是个经验值,据传说300个主题是个比较合适的值,但是具体合适不合适需要根据你自己的情况是测试,然后找到一个你认为合适的主题数。

    2. 词向量

    最后简单的说一下目前也用得比较多的词向量,就是word2vector了,光有了主题模型很多人还是不满足,他们还想知道词与词之间的关系,人为的表示也就是近义词了,但是词向量能解决的可远远不是近义词同义词了,比如给一堆微博的语料丢给word2vec来训练,他可以找出来范冰冰李晨这两个词有关系,然后我们发挥一下,如果你有个推荐系统,按照文本相关性去推荐内容,发现没有太相关的推荐结果,这时候你就可以用word2vec扩展你的词了,然后用扩展的词去推荐东西了,比如用范冰冰的新闻推荐出李晨的新闻来,当然这只是举个例子啊,我暂时还没看到有地方这么来做推荐。

    词向量也就是用一个向量来表示一个词,比如一个词北京,还有三个维度分别是大学,北方,首都,我们把北京用向量表示成[0,9,0.5,1],那么这个词有3个维度,这三个维度的意义是什么呢?可以解释成北京这个词啊是大学的概率是0.6,他在北方的概率是0.5,他是首都的概率是1,是不是和上面的分类很相似啊,如果每个词都可以这么表示的话,那么两个词之间的相似度就是这两个向量之间的距离了,和上一篇的向量空间一样,那么如何来求一个词的向量呢?其实也可以按照上面的LDA的方式分类来求,呵呵,但我们不这么来。

    还是按照上面那个例子来看看,你看到范冰冰这个词,为什么你觉得他和李晨会相似呢?我们知道的是他们是夫妻所以才相似,为什么知道他们是夫妻呢?因为新闻的文章中这两个词老是出现在一起,要不就是在一句话中或者在一段话中,所以冥冥之中我们觉得他们是有相似性的,好吧,就是这个冥冥之中怎么让机器知道,有个东西叫神经网络,最会冥冥之中,因为他冥冥之中想出来的东西你解释不了,但又好像也能说得过去。好,那么我们来看看机器怎么弄的。

    • 假设有这么一句话我爱北京天安门,我们先给每个词编个号,我1,爱2,北京3,天安门4。

    • 然后,我们扫描这个句子的每个词,找和他相邻的两个词,分别是他前面一个和后面一个,那么一轮下来,我们得到一个这样的东西:1(2),2(1,3),3(2,4),4(3),这表示什么?表示每个词和他有两个相关的词,如果我们有大量的句子,那么可以得到非常多的上述关系表达式。

    • 然后呢?然后我们设定一个向量的维度,也就是每个词我们可以用几个维度来表示。

    • 再然后呢?再然后就上神经网络了,这东西啊,如果你知道逻辑回归这种机器学习的方法的话,再假设逻辑回归是物理电路中的一条回路的话,那神经网络就是把逻辑回归这种回路串联并联起来的东西。也就是逻辑回归的逻辑回归的逻辑回归【这句话不是我总结的,我忘了在哪看到过了,觉得挺形象】

    • 最后呢?最后每个词就成了一个向量了。

    有了向量了,那么就能比较了吧?

    总结

    好了,今天扯了这么多,我看下来有点耽误人的意思,因为用太通俗的话根本解释不了很多数学模型,而我数学也不好,要说清楚这些个数学模型我也很费劲,关键是一堆公式出来也没人看,自己心里默默的清楚就行了,大家也别想着通过一两篇文章能了解一个数学模型,自然语言处理这个本来就是个拼数学的领域,要深入还得自己去看书看论文,要了解这些数学模型也不是看一篇文章能了解的,真的感兴趣的,想做算法工程师的,自己专研吧。

    下一篇我会把这两篇的东西实战一下,看看最终是不是有效果,估计下一篇能有意思一点。


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

    (编辑:辽源站长网)

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

    推荐文章
      热点阅读