确定哪些单词使短语受欢迎的算法

3
假设我有一组口号(短语),人们已经投票选择了他们最喜欢的口号,并且我想评估哪些单词使一些口号比其他口号更受欢迎。如何才能实现这一点呢?我的第一个想法是找到所有唯一的单词并对每个单词进行评分,评分为包含该单词的所有口号的平均得票数,但我认为频率也应以某种方式起作用,因此以下情况应成立:
- 如果单词A仅出现在获得最多投票的口号中,而单词B仅出现在获得第二多投票的口号中,则单词A更具“流行度”; - 但是,如果单词A仅出现在排名第一的口号中,而单词B出现在第二和第三名的口号中,则单词B应该获胜,因为它将更多的口号推向了前面; - 然而,单词A在排名最高的口号中出现一次仍然应该优于单词B在其他口号中出现三次,例如在排名靠后的口号中(也就是说,在评分中需要平衡得票率和频率)。
我还想消除通常很常见的单词(例如,“the”或“of”)。这与过去提出的有关识别趋势单词的问题有点相关,但不同之处在于时间上的变化不是一个因素。如果涉及到文献方面的指导,我很高兴被指引正确的方向,但我不确定要寻找什么。其他人是否也会处理这类问题?

在http://metaoptimize.com/qa上的人会更了解这个。 - Frank
3个回答

2
这是一个机器学习问题。您正在尝试从监督数据中学习模型。为此,您可以运行类似感知器或SampleRank(pdf)的简单算法:
首先,您定义适用于口号中单词的特征。特征可以在单词之间共享,例如,“和平”一词的特征可能包括:
  • “和平”,
  • “名词”,
  • “抽象名词”,
  • “短名词”,
  • “以p开头”,
  • “以's'音结尾”,
  • ...
第一个特征“和平”是仅在“和平”上触发的唯一特征,而其他特征也可以在其他单词上触发。
每个特征都有一个权重(较高的权重更好)。因此,您有一个特征向量和一个权重向量。这将使您能够为任何口号分配权重(得分)(仅是在口号中触发的所有加权特征的总和)。所有权重都初始化为0.0。
现在开始训练:
您循环遍历所有口号对。对于每个对,您知道真实的排名(根据您已经拥有的投票)。然后,您根据特征及其当前权重计算排名。如果真实排名和根据当前特征权重(即根据当前模型)的排名相同,则直接移动到下一个对。如果您的模型分配了错误的排名,则会更正特征权重:您将1.0添加到在更好的口号上触发的特征的权重(根据人们的投票更好的那个),并从在更差的口号上触发的特征的权重中减去1.0(它的得分显然太高,所以现在降低它)。这些权重更新将影响您的模型分配给下一对的得分,依此类推。
您可以运行此循环多次,直到您的模型正确预测了大部分对(或其他收敛标准为止)。
通常,您不会真正添加或减去1.0,而是乘以eta的1.0,其中eta是学习率,您可以通过实验设置。通常在训练开始时它较高,并且在训练过程中逐渐降低,因为您的权重正在朝着正确的方向移动。(也请参见随机梯度下降。)为了开始,您可以将其设置为0.1作为常量。
该过程将处理停用词(“the”、“of”等),因为它们在好的口号和糟糕的口号中应该同样经常出现(如果它们确实不是这样,你也会发现)。
训练后,您可以根据学习到的特征权重计算每个单词的分数。

这太棒了,让我有更多的阅读内容。谢谢! - Andrew Pendleton

0

我的印象是贝叶斯推断主要涉及特定证据是否确认或否认假设。我的问题不是特别二元,也就是说,它不是那么简单的“这个词是否有助于提高流行度?”而是“这些词语促进流行度的程度排名是什么?”您仍然认为在这种情况下可以应用贝叶斯分析吗? - Andrew Pendleton
嗯,现在听起来像是你在研究类似于Google使用(或者曾经使用)的PageRank。它基本上创建了一个由相关性连接的术语图表。实质上,连接最多的术语是有关联的。我同意,Bayesian在这种情况下无法给出术语的相关性。但是,你可以使用它推断你不知道的关系。 - SRM

0

这很接近了。停用词的消除有点棘手,因为(我应该在这里更清楚)我想要消除的可能不仅仅是停用词,而更可能是任何在这个数据集中出现频率不比一般情况高的单词。这只是一个猜测,但我认为如果我专注于那些在统计上不太可能出现的单词,结果会更有趣。也许我可以将这个数据集与某个参考语料库进行比较,并按照您的方法进行处理? - Andrew Pendleton
如果你有一个反映你短语主题或足够大而普遍的语料库,我认为它会起作用。你需要进行一些实验并观察结果。 - Nicolas Bottarini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接