NLP降临在我身边 7

已经有点跟不上了,但是不想留坑,能写多少写多少。

文本写作的顺序与逆序

假设老师让写一篇作文《难忘的一件事》,我根据根据其他范文经验推断出四个高分主旨:坚强,奋斗,合作,坚持。为了尽可能拿高分,我整篇文章都离不开这四个主旨,每个选词也是根据主旨选的。为了统一用词,我们将主旨称为Topic。
假设我平时是一个好孩子,经常积累不同Topic的好词好句。不仅如此,我还奋发图强,把好词好句的使用频率都记下来了。这是我的好词好句本,为了统一用词,我们将好词好句称为Word。
然后就可以开始正式写文本了。为了保证自己的作文不能与其他人的雷同,我需要定下这篇文章的Topic结构,假设四个Topic各占25%,我现在丢个骰子,决定从“坚强”开始写。在坚强的Word里,{司马迁:0.4,王进喜:0.3,王宝强:0.3}。为了让文章更加多元化,我按照概率随机选了一个词,“司马迁”,然后写在卷子上。整篇文章1000多个字,除了没什么卵用的一些字词(停用词)以外,全部按照丢骰子选Topic→丢骰子选Word的方式得到。这就是文本写作的顺序。
将这一流程逆过来。假设我现在得到了同桌的范文,我要去分析他这篇文章。
假设同桌和我师出同门,也有一个关于不同Topic的Word的小本本,也按照同样的过程写作。我已经把他的小本本抄过来了。这样的话,他这篇作文最有价值的部分就是Topic的成分。我知道他肯定也选了四个高分主旨,我要推断出这篇文章到底给了每个Topic多大的权重。
我的方案是挨个推断Topic。首先丢骰子,随机选一个Topic开始分析,把这个Topic下的词的使用频率统计一下。然后再来一个Topic,如法炮制。再来一个Topic。如此反复,直到分析完四个主旨。因为我俩小本本是一样的,我推断出来的Topic的成分就是真实成分。假如同桌这篇文章里“坚强”占了近60%,他的分数比我高,我下次就可以考虑多写一点“坚强”。

pLSA原理

由于我不会用公式编辑器,又不想复制粘贴, 因此数学推导请去翻别人家的博文吧。
刚刚说过,因为我把同桌的小本本抄过来了,所以我推断的结果和真实值应该是完全相符的。但这种情况可能不成立。比如我的同桌是一个阅历广泛的人,上至姚明下至郭敬明都有涉猎,那么他的小本本可能比我的要更丰富,Word比例也可能不一样。而我又没能抄到他的小本本,只能拿到他的基友的小本本。他的基友和他兴趣爱好差不多,小本本的结构也很像,参高价值较高。
但这毕竟是别人的小本本,不一定和我的同桌的完全一样。我也只能拿来凑活了。
我对同桌的选主旨范围一无所知,但我大致能猜出来,他要想及格,Topic跟四个高分主旨肯定不能差太远。也就是说,四个高分主旨可以近似成Topic的可能性范围。
这样一来,我的推断方式就很简单了。流程与上面的文本写作逆序一模一样,摇骰子选Topic,然后逐个Word进行计算,最后推出Weight。可能这个Weight跟真实值有点差距,不过好歹是差不多的。

LDA原理

LDA是pLSA的升级版。如果想要讲明白LDA的原理,就必须从pLSA的局限性说起。
刚刚说到,我的同桌写作文都要看小本本,也就是说每个Word在每个Topic下出现的频率是固定的。他在写作之前要先确定Topic的成分,每篇文章的Topic成分也是固定的。虽然我不知道他的小本本什么样,但我有他身边的很多基友的小本本。
这些假设全都成立的时候,我才能保证pLSA具有较高的精准性,然而实际情况中,可能存在以下问题:

  1. Word频率可能是浮动的。小本本上可能并没有给出具体数值,而是“多用点”,“少用点”。
  2. Topic成分可能是浮动的。同桌写作文前可能并没有给出具体数值,而是“多写点”“少写点”。
  3. 训练样本可能较小。我可能没有那么多的基友小本本供参考,只有老师给的范文集。

在这种情况下,我希望得到的是一个具体的数字,而同桌却不追求量化写作。我们两个的写作方式出现了区别,违背了刚刚的前提:我和同桌的写作方式一样。如果在遇到这些问题的情况下,仍然使用pLSA,就可能引发相关的问题,例如过拟合。
但是在这个时候,班主任告诉了我一个重要消息:我的同桌虽然不追求量化写作,但他给出的浮动范围是有限的,他的决策大体符合 Dirichlet分布
我手头有同桌的五六篇已经被班主任赏析过的文章,班主任给了我从这五六篇总结出的Dirichlet分布参数。虽然班主任并不能保证这些分布参数都是完全精准的(甚至可能是主观化的),但我仍然非常感激班主任,因为我可以根据同桌的新作继续修正这些参数。我的同桌是一位写作dalao,他已经写了四五十篇文章,虽然这四五十篇文章不像班主任给的那五篇一样 进行过赏析,但同桌的写作方法不会变的。他是一个非常固执的人。
这是就可以引入LDA了。LDA其实就是在pLSA上增加了一个贝叶斯框架,同时将概率分布转化为概率分布的分布,也就是Dirichlet分布。班主任给了我Dirichlet分布的参数,我可以得到一个初始的 先验概率。通过我对同桌的剩下的四五十篇文章的不断赏析,最后我可以得到一个较为精准的 后验概率。在这个过程中,我不断修正Dirichlet分布的参数,从而使Dirichlet分布的方差变小,更能反映出最集中的值。
通过这种方式,我最终得到了一个非常接近同桌的小本本的语料库。并且我还赏析了四五十篇同桌的作文,以后可以拿给其他的同学分享。当然同桌可能打我就是了。

代码实现

对不起,基础太差,还不会。以后会慢慢补上的。

参考资料

深入理解LDA和pLSA - mishidemudong - CSDN -
https://blog.csdn.net/xbmatrix/article/details/64646323

既然 LDA 是一种比 PLSA 更高级的模型,为啥百度还在用 PLSA? - weizier的回答 - 知乎
https://www.zhihu.com/question/23642556/answer/38969800

猜你喜欢

转载自blog.csdn.net/weixin_44609088/article/details/89410674
7