1

我正在对文本分析进行一些个人研究,并提出了近 70 个指标(代词使用频率、阅读水平、元音频率、项目符号的使用等)来“评分”一段文本。

理想情况下,来自同一作者的单独文本将具有相似的分数。最终目标是索引大量作者,并使用分数来猜测谁写了一段单独的匿名文本。

我希望分数从 0 到 100 标准化,并代表两段文本在写作风格中“相似”程度的百分比。诸如如何决定权重之类的问题?以及如何计算分数?描述评分指标背后的数学以及如何标准化,但假设每个指标的权重相同。

我的问题是:如何确定在对每个指标进行评分时使用的适当权重,以确保每个用户的累积分数最准确地描述了该特定用户的写作?

此外,可以为每个用户分配权重。如果每个单词的音节最恰当地描述了谁为 Alice 写了一篇文章,而两个字母单词的频率对 Bob 来说是最好的,我希望 Alice 最重的重量是每个单词的音节,而 Bob 的频率是两个-字母词。

4

2 回答 2

2

如果您想使用加权分数,请查看http://en.wikipedia.org/wiki/Principal_component_analysis - 您可以绘制不同作者的第一(最大)几个主成分的值,看看您是否找到一个聚类。您还可以绘制最小的几个主成分图,看看是否有任何突出的地方——如果有,它可能是由于故障或错误造成的——它倾向于从一般规则中挑选出例外情况。

另一种选择是http://en.wikipedia.org/wiki/Linear_discriminant_analysis

如果您为分类 Alice vs not-Alice 以及分类 Bob vs not-Bob 构建权重,我想您可以构建每个作者的权重。

尝试识别作者的另一种方法是为每个作者构建一个http://en.wikipedia.org/wiki/Language_model

我突然想到,如果您准备声称您的不同措施是独立的,那么您可以将它们与http://en.wikipedia.org/wiki/Naive_Bayes_classifier结合起来。然后,最终贝叶斯因子的对数将是各个贝叶斯因子对数的总和,从而为您提供加权分数的总和。

于 2012-03-24T05:18:11.303 回答
1

似乎您正在尝试将一堆不同的写作风格属性组合成一个数字,然后以某种方式用于确定用户写作风格之间的相似性。这将如何解决?Bob 是 100,Alice 是 50,等等?

您真正想要的是使用(某些子集)度量来为每种写作风格形成一个特征向量。然后您可以说某个文档由 表示(60% pronoun usage, 10th grade "reading level", 40% vowels, ...),另一个由表示(40% pronouns, 12th grade "reading level", 50% vowels, ...),其中每个属性都是一个实数,向量中的位置告诉您您正在谈论哪个属性。

然后,您可以按真实作者标记这些向量中的每一个,以便您拥有为每个作者标记的特征向量集合。然后,您可以通过多种方式计算相似度。


如果你有一个新文档,并且想猜测它是谁写的,这是一个标准的监督学习问题。一个简单的方法是k最近邻方法,在该方法中,您可以k在某个距离度量下找到离您的测试点最近的向量,并使用它们的标签来投票给您认为这是哪个作者。如果您不知道哪些特征最有用,您可以使用马氏距离,如果您将向量的每个分量缩放为具有单位方差((((x - y) / all_data_stacked.std(axis=0))**2).sum()以 numpy 表示法),则该距离等效于标准欧几里得距离。

但是还有很多很多其他的分类方法,其中许多基于在特征空间中找到将一位作者与另一位作者分开的分离表面。要对许多作者进行此操作,您可以在所有作者对之间找到这些决策面,将这些num_authors * (num_authors - 1) / 2分类器中的每一个应用于测试点,并在这些标签之间进行投票。另一种方法是为每个作者训练一个分类器,该作者与其他任何人相比,然后选择最自信的一个。

大多数问题的最佳开箱即用监督分类算法称为支持向量机(SVM)LibSVM是一个很好的实现。不过,还有很多很多很多其他的。


但是,如果您实际上并没有尝试对测试点进行分类,而只是想衡量“Alice 和 Bob 的写作风格有多相似?”,那么还有其他方法可以采用。在这种情况下,在我在这里处理的框架中,您要尝试做的是获取两组向量并询问“它们有多相似”?

人们可以使用一些简单的度量来解决此类问题,例如集合元素之间的最小或平均距离,诸如此类。但这不一定很有帮助。

一种临时措施是:将 Alice 的写作与 Bob 的写作混淆起来有多容易?要对此进行测试,请使用交叉验证训练 Alice-vs-Bob 分类器,并查看分类器混淆 Alice 与 Bob 的测试点的频率。也就是说,使用除了kAlice 或 Bob 的所有文档来训练两者之间的分类器,然后在那些k. 重复,以便对每个文档进行分类。如果错误率高,那么他们的写作风格相似;如果不是,它们不相似。最好在这里使用k = 1,如果你能负担得起的话。

我们也可以通过更正式的方法来解决这个问题。我碰巧参与的一个研究项目涉及将这些特征向量集视为来自未知概率分布的样本,该概率分布代表单个作者的写作风格。所以当爱丽丝写一篇文档时,它的特征是根据代表她写作方式的概率分布来选择的;Bob 的文档是从 Bob 的分布中选择的。然后,您可以估计这两个分布之间的Rényi-α 散度,这是衡量它们“相似”程度的一种方法。(如果您选择接近 1 的 α,它近似于重要的Kullback-Leibler (KL) 散度。)这里有一些介绍该技术的论文,给出关于估计器的所有数学细节,以及描述如何将此估计器与 SVM 结合以在计算机视觉问题上击败最先进技术的预印本。我在这里有一个 C++ 实现;如果你最终使用它,请告诉我!

人们使用的另一种类似方法称为最大平均差异

不幸的是,所有这些技术(分类器除外)都依赖于您手动适当地缩放原始特征。(例如,用于分类的 SVM 并非如此;它们可以处理确定某些特征对于给定用户是否比其他特征更重要,尽管您可能应该将它们全部缩放为具有零均值和单位方差作为第一步。)这是一个特征选择问题,这是一个难题,不幸的是仍然需要进行一些调整。基于互信息等(与散度估计密切相关)的方法在那里可能会有所帮助。正如mcdowella 所建议的,PCA 也可以是一个不错的起点。

于 2012-03-24T05:29:45.790 回答