如何实现一个简单的马尔可夫模型来为作者分配匿名文本?

时间:2014-04-03 00:33:51

标签: language-agnostic statistics text-mining markov-models

我们说我已从论坛收获了这些帖子。然后我删除了所有的用户名和签名,所以现在我只知道哪个帖子在哪个帖子中但不是谁发布了什么,甚至有多少作者(尽管作者的数量显然不能大于文本的数量)

我想使用Markov模型(查看哪些单词/字母跟随哪些)来弄清楚有多少人使用过这个论坛,哪些帖子是由同一个人写的。为了大大简化,也许一个人倾向于说"他是"而另一个人倾向于说"他是" - 我正在谈论适用于这种基本逻辑的模型。

请注意数据存在一些明显的问题:某些帖子可能非常短(一个单词的答案)。它们可能是重复的(引用彼此或使用流行的论坛流行语)。个别文本不是很长。

有人可能怀疑一个人连续发帖很少,或者很可能人们更有可能在他们已发布的帖子中发帖。利用这个是可选的。

让我们假设帖子是明文,没有标记,论坛上的每个人都使用英语。

我想获取所有文字T_i的距离矩阵,以便D_ij是同一作者撰写文字T_i和文字T_j的概率,基于单词/字符模式。我打算使用这个距离矩阵来聚类文本,并提出问题,例如"撰写本文的人撰写了哪些其他文本?"

我将如何实际执行此操作?我需要隐藏的MM吗?如果是这样,隐藏的状态是什么?我理解如何训练文本上的MM然后生成类似的文本(例如,在仙境中生成爱丽丝)但是在我训练频率树之后,我如何用它来检查文本以获得它生成的概率那棵树?在构建树时,我应该看一下字母或单词吗?

3 个答案:

答案 0 :(得分:2)

我的建议是放弃关于距离矩阵的业务,首先考虑概率模型P(文本|作者)。构建该模型是您工作中最难的部分;一旦你拥有它,你可以通过贝叶斯规则计算P(作者|文本)。不要把车放在马前面:模型可能会或可能不会涉及各种距离指标或矩阵,但不要担心,只要让它脱离模型。

答案 1 :(得分:1)

您可能需要查看Hierarchical Clustering。使用此算法,您可以定义自己的距离函数,它将根据它为您提供聚类。如果您定义了一个良好的距离函数,则生成的聚类将对应于每个作者。

这可能很难做到,你可能需要很多帖子来真正得到一个有趣的结果。不过,祝你好运!

答案 2 :(得分:1)

你在问题​​中提到马尔可夫模型。马尔可夫模型是关于令牌的序列以及一个令牌如何依赖于先前的令牌和可能的内部状态。

如果你想使用概率方法,你可能想要使用一种不同类型的统计模型,这种统计模型不是基于序列而是基于袋子或单词或特征组。

例如,您可以使用文本中最常用的K个单词,并在每个帖子中创建所有M-gram标记,其中非常常单词由空占位符替换。这可以让您学习不同作者常用的短语。

此外,您可以使用单个单词作为功能,以便帖子获取帖子中所有单词的功能(此处您可以忽略常用单词并仅使用罕见单词 - 相同作者可能对相同主题感兴趣或使用相同的单词或做同样的拼写错误)。

此外,您可以尝试捕捉作者的特征风格:有多少段落,句子多长,每个句子有多少逗号,作者是否使用大小写,是否拼写了数字等等......这些所有功能都不是您在HMM中使用的序列,而是分配给每个帖子的功能。

总结:尽管序列对于捕捉短语非常重要,但你肯定不仅仅需要一个序列模型。