7

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

我想使用马尔可夫模型(查看哪些单词/字母跟在哪些单词后面)来计算有多少人使用了这个论坛,以及哪些帖子是由同一个人写的。为了大大简化,也许一个人倾向于说“他是”,而另一个人倾向于说“他是”——我说的是使用这种基本逻辑的模型。

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

人们可能会怀疑,一个人很少会连续发帖,或者人们更有可能在他们已经发过帖的线程中发帖。利用这一点是可选的。

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

我想获得所有文本的距离矩阵,T_i即文本和文本由同一作者撰写D_ij的概率,基于单词/字符模式。我打算使用这个距离矩阵对文本进行聚类,并提出诸如“撰写此文本的人还撰写了哪些其他文本?”之类的问题。T_iT_j

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

4

3 回答 3

2

我的建议是将距离矩阵的业务放在一边,首先考虑概率模型 P(text | author)。构建该模型是您工作中最困难的部分;一旦有了它,您就可以通过贝叶斯规则计算 P(author | text)。不要本末倒置:模型可能涉及也可能不涉及距离度量或各种矩阵,但不要担心,让它脱离模型。

于 2014-04-03T16:06:27.580 回答
1

您可能想看看Hierarchical Clustering。使用此算法,您可以定义自己的距离函数,它会根据它为您提供集群。如果您定义了一个良好的距离函数,则生成的集群将分别对应一位作者。

不过,这可能很难做到,您可能需要大量帖子才能真正获得有趣的结果。尽管如此,我还是祝你好运!

于 2014-04-24T18:53:01.980 回答
1

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

如果您想使用概率方法,您可能需要使用不同类型的统计模型,该模型不是基于序列,而是基于袋子或单词或特征集。

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

此外,您可以使用单个单词作为特征,以便帖子将帖子中的所有单词作为特征(在这里您可以忽略常用词并仅使用稀有词 - 相同的作者可能对相同的主题感兴趣或使用相同的词或做同样的拼写错误)。

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

总而言之:尽管序列对于捕捉短语肯定很重要,但您肯定想要的不仅仅是序列模型。

于 2014-04-26T14:56:06.137 回答