如何实现一个简单的马尔可夫模型来指定作者匿名文本?
假设我已经从论坛收集了帖子。 然后我删除了所有的用户名和签名,所以现在我只知道帖子是在哪个帖子中发布的,但是没有发布什么帖子,甚至没有发布多少作者(尽管显然作者的数量不能超过文本的数量) 。
我想用一个马尔可夫模型(看看哪个单词/字母跟随哪个模型)来找出有多少人使用这个论坛,哪些帖子是由同一个人写的。 为了大大简化,或许一个人倾向于说“他是”,而另一个人则倾向于说“他是” - 我正在谈论与这种基本逻辑合作的模型。
请注意数据中存在一些明显的问题:有些帖子可能非常短(一个字的答案)。 它们可能是重复的(引用对方或使用流行的论坛标语)。 单个文本不是很长。
人们可能会怀疑,一个人连续发布帖子很少,或者很可能人们更可能发布他们已经发布的帖子。利用这是可选的。
假设帖子是纯文本且没有标记,论坛上的所有人都使用英文。
我想获得所有文本T_i
的距离矩阵,使得D_ij
是文本T_i
和文本T_j
由同一作者根据单词/字符模式写入的概率。 我打算使用这个距离矩阵来聚集文本,并提出问题,例如“撰写本文的人撰写了哪些其他文章?”。
我将如何去实施这个? 我需要隐藏的MM吗? 如果是这样,隐藏状态是什么? 我知道如何在文本上训练一个MM,然后生成一个类似的文本(例如,在Wonderland中生成Alice),但是在我训练一个频率树后,我如何检查一个文本以获得它生成的概率那棵树? 我应该在制作树时看字母还是文字?
我的建议是放弃关于距离矩阵的业务,并首先考虑一个概率模型P(文本|作者)。 构建这个模型是你工作的难点, 一旦你拥有它,你可以通过贝叶斯规则计算P(作者|文本)。 不要把车放在马前面:这个模型可能包含或不包含各种距离度量或矩阵,但不要担心,只是让它脱离模型。
你可能想看看Hierarchical Clustering。 使用这个算法,你可以定义你自己的距离函数,它会根据它给你一些簇。 如果你定义了一个好的距离函数,那么结果集群将分别对应一个作者。
这可能很难做到,你可能需要大量的帖子才能真正得到一个有趣的结果。 不过,我祝你好运!
你在你的问题中提到一个马尔可夫模型。 马尔可夫模型是关于令牌序列以及一个令牌如何依赖于先前的令牌和可能的内部状态。
如果你想使用概率方法,你可能想要使用一种不同于统计模型的统计模型,它不是基于序列,而是基于行李或一组单词或特征。
例如,您可以使用文本中最常见的K个单词,并在每个帖子中创建所有M-gram标记,其中非空白字由空占位符替换。 这可以让你学习不同作者常用的短语。
此外,您可以使用单个单词作为功能,以便帖子可以获取帖子中的所有单词(这里您可以忽略常用单词并仅使用罕见单词 - 同一作者可能对相同主题感兴趣或使用相同单词或者执行相同的拼写错误)。
此外,您可以尝试捕捉作者的特征风格:多少段落,多少句子,每句话多少逗号,作者是否使用大小写,是否拼写等等......这些都是特征这不是像在HMM中使用的序列,而是分配给每个帖子的功能。
总之:即使序列对于捕捉短语来说当然很重要,但您绝对不仅仅需要序列模型。
链接地址: http://www.djcxy.com/p/78511.html上一篇: How to implement a simple Markov model to assign authors to anonymous texts?
下一篇: Weird behavior when downloading html using HttpURLConnection