4

假设我有一个口号列表(简短的多词短语),人们投票选出了他们最喜欢的口号,我想评估哪些词(如果有的话)使某些口号比其他口号更受欢迎。实现这一目标的最佳方法是什么?我的第一个想法是找到一组标语中所有唯一的单词,并将每个单词作为包含该单词的所有标语的平均投票数,但我认为频率也应该以某种方式发挥作用,所以以下应该是正确的:

  • 如果 A 字只出现在得票最多的标语中,而 B 字只出现在得票第二多的标语中,则 A 字更“流行”
  • 但是,如果单词 A 只出现在排名靠前的口号中,而单词 B 出现在排名第二和第三的口号中,那么单词 B 应该会获胜,因为它将更多的口号推到了顶部。
  • 但是,如果其他标语中出现单词 A 的一次出现,则仍应胜过出现在其他标语中的单词 B 的 3 次,例如,它们位于包装的中间或下半部分(也就是说,需要获得投票和得分频率的平衡)。

我还想删除通常很常见的词(例如,“the”或“of”)。这与识别过去被问过的趋势词的问题有点相关,但不同的是,随着时间的变化不是一个因素。就文学而言,我很高兴能指出正确的方向,但我不确定要寻找什么。这是其他人处理的一类问题吗?

4

3 回答 3

2

这是一个机器学习问题。您正在尝试从监督数据中学习模型。为此,您可以运行一个简单的算法,例如 Perceptron 或 SampleRank ( pdf ):

首先,您定义适用于口号中词语的特征。特征可以跨词共享,例如“和平”一词的特征可以是:

  • “和平”,
  • “名词”,
  • “抽象名词”,
  • “短名词”,
  • "以 p 开头",
  • “以's'音结尾”,
  • ...

第一个特征“peace”是一个独特的特征,它只对“peace”触发,而其他特征也可以触发其他词。

每个特征都有一个权重(越高越好)。所以你有一个特征向量和一个权重向量。这将使您能够为任何口号分配权重(分数)(只是在口号中的单词上触发的所有加权特征的总和)。所有权重都初始化为 0.0。

现在开始训练:

你遍历所有成对的口号。对于每一对,您都知道真实的排名(根据您已经拥有的选票)。然后根据特征及其当前权重计算排名。如果真实排名和根据您当前的特征权重(即根据您当前的模型)的排名相同,您只需继续下一对。如果您的模型分配了错误的排名,您将更正特征权重:您将 1.0 添加到以更好的口号(根据人们的投票更好的口号)触发的特征的权重,并从触发的特征的权重中减去 1.0在更糟糕的口号上(它的分数显然太高了,所以你现在降低它)。这些权重更新将影响您的模型分配给下一对的分数,依此类推。

你多次运行这个循环,直到你的模型得到大多数对(或其他一些收敛标准)。

通常,您实际上并没有加或减 1.0,而是 eta 乘以 1.0,其中 eta 是学习率,您可以通过实验设置。通常,它在训练开始时较高,在训练期间逐渐降低,因为您的体重正在朝着正确的方向移动。(另请参阅随机梯度下降。)要开始使用,您可以将其设置为 0.1 作为常数。

这个过程会处理停用词(“the”、“of”、...),因为它们应该同样频繁地出现在好口号和坏口号中(如果他们真的没有,那么你也会学到这一点)。

训练后,您可以根据学习到的特征权重计算每个单词的分数。

于 2010-12-04T01:37:29.083 回答
0

贝叶斯推理怎么样?

于 2010-12-03T22:28:55.450 回答
0

我想我会使用一种算法来做这些事情:

  1. 消除停用词(常用词)(http://en.wikipedia.org/wiki/Stop_word
  2. 规范化和词干(http://en.wikipedia.org/wiki/Stemming
  3. 计算归一化词频和投票
  4. 按投票/频率排序标准化单词
于 2010-12-03T22:33:35.750 回答