我正在对文本分析进行一些个人研究,并提出了接近70个指标(代词使用频率,阅读水平,元音频率,使用项目符号等)来评分"得分&# 34;一段文字。
理想情况下,来自同一作者的单独文本将具有相似的分数。最终目标是为大量作者编制索引,并使用分数来猜测谁写了一个单独的,匿名的文本。
我希望分数从0到100标准化,并表示如何"类似"两段文字都是写作风格。像How to decide on weights?和How to calculate scores?这样的问题描述了评分指标背后的数学以及如何规范化,但假设每个指标的权重相同。
我的问题是:如何确定在评估每个指标时使用的正确权重,以确保每个用户的累积得分最准确地描述该特定用户的写作?
此外,可以按用户分配权重。如果每个单词的音节最恰当地描述谁为Alice写了一篇文章,而双字母单词的频率对Bob来说是最好的,我喜欢Alice最重要的是每个单词的音节,Bob& #39; s是两个字母单词的频率。
答案 0 :(得分:2)
如果你想用加权分数来做,看看http://en.wikipedia.org/wiki/Principal_component_analysis - 你可以为不同的作者绘制第一个(最大的)主要成分的值,看看你是否找到了聚类。您还可以绘制最小的几个主要组件的图表,看看是否有任何突出的东西 - 如果有的话,可能是出现故障或错误 - 它往往会从一般规则中挑选出例外情况。
另一个选项是http://en.wikipedia.org/wiki/Linear_discriminant_analysis
我认为如果你为Alice和not-Alice分类建立权重,你可以建立每个作者的权重,以及分类Bob和非Bob的权重。
尝试识别作者的另一种方法是为每位作者构建http://en.wikipedia.org/wiki/Language_model。
如果您准备宣称您的不同措施是独立的,那么您可以将它们与http://en.wikipedia.org/wiki/Naive_Bayes_classifier结合起来。最终贝叶斯因子的对数将是各个贝叶斯因子的对数的总和,它给出了加权分数的总和。
答案 1 :(得分:1)
似乎你正试图将一堆不同的写作风格属性组合成一个数字,然后以某种方式用来确定用户写作风格之间的相似性。这怎么样? Bob是100,Alice是50,等等?
您真正想要的是使用(某些子集)指标为每种书写风格形成feature vector。然后,您可以说某个文档由(60% pronoun usage, 10th grade "reading level", 40% vowels, ...)
表示,另一个由(40% pronouns, 12th grade "reading level", 50% vowels, ...)
表示,其中每个属性都是一个实数,向量中的位置会告诉您正在谈论的属性。
然后,您可以通过真作者标记每个向量,以便为每个作者标记一组特征向量。然后,您可以通过多种方式计算相似度。
如果您有一个新文档并且想要猜猜是谁写的,那么这是一个标准的supervised learning问题。一个简单的方法是k
-nearest neighbor approach,您可以在其中找到k
最接近您的测试点的向量,并使用其标签投票选择您认为是哪个作者。如果您不知道哪些特征最有用,则可以使用Mahalanobis距离,如果您将向量的每个分量缩放以具有单位方差((((x - y) / all_data_stacked.std(axis=0))**2).sum()
为numpy表示法,则该距离等效于标准欧几里德距离)。
但是,有许多其他方法可以进行分类,其中许多方法基于在特征空间中找到将作者与另一个作者分开的分离表面。要与许多作者一起完成,您可以在所有作者对之间找到这些决策表面,将每个num_authors * (num_authors - 1) / 2
分类器应用于测试点,并在这些标签中进行投票。另一种方法是为每个作者和其他任何人创作一个分类器,然后选择一个最有信心的分类器。
针对大多数问题的最佳开箱即用监督分类算法称为support vector machines (SVMs); LibSVM是一个很好的实现。但是,有许多很多很多其他人。
如果你实际上并没有尝试对测试点进行分类,而你只想要一个“爱丽丝和鲍勃的写作风格有多相似?”的衡量标准,还有其他方法可以采用。在这种情况下你想要做的是,在我正在处理的框架中,采取两组向量并询问“它们有多相似”?
人们使用一些简单的措施来做这样的事情,例如:集合元素之间的最小或平均距离,类似的东西。但这不一定非常有用。
一个特别的措施是:将爱丽丝的写作与鲍勃的写作混淆是多么容易?为了对此进行测试,请使用交叉验证训练Alice-vs-Bob分类器,并查看分类器多长时间混淆Alice的vs与Bob的测试点。也就是说,使用除k
以外的所有文档,以便Alice或Bob在两者之间训练分类器,然后在k
上评估该分类器。重复以便对每个文档进行分类。如果错误率很高,那么他们的写作风格是相似的;如果没有,他们就不相似了。如果你负担得起,最好使用k = 1
。
我们也可以通过更正式的方法来实现这一目标。我碰巧参与的一个研究项目涉及将这些特征向量集合作为来自未知概率分布的样本来表示个体作者的写作风格。因此,当Alice编写文档时,根据表示编写方式的概率分布选择其特征;鲍勃的文件选自鲍勃的发行版。然后,您可以估算这两个分布之间的Rényi-α divergence,这是衡量它们“相似”程度的一种方法。 (如果您选择α接近1,它会接近重要的Kullback-Leibler (KL) divergence。)以下是一些论文introducing the technique,giving all the mathematical details on the estimator和预印本describing how to combine this estimator with SVMs to beat state of the art on computer vision problems。我有一个C ++实现here;如果你最终使用它,请告诉我!
人们使用的另一种类似方法称为maximum mean discrepancy。
遗憾的是,所有这些技术(分类器除外)都依赖于您手动适当缩放原始功能。 (对于例如用于分类的SVM,情况并非如此;它们可以处理某些特征是否比给定用户的其他特征更重要,尽管您可能应该将它们全部缩放为具有零均值和单位方差作为第一步。)这是feature selection的问题,这是一个难题,遗憾的是仍然需要进行相当多的调整。基于互信息等的方法(与分歧估计密切相关)可能对此有所帮助。作为mcdowella suggested,PCA也可以是一个不错的起点。