用于确定哪些单词使短语流行的算法

时间:2010-12-03 22:22:03

标签: algorithm word frequency popularity

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

  • 如果单词A只出现得票最多的口号而单词B只出现在获得第二多的口号中,则单词A更“流行生成”
  • 但是,如果单词A只出现在排名第一的口号中,而单词B出现在排名第二和第三的标语中,那么Word B应该会赢,因为它会将更多的标语推到顶端。
  • 然而,如果他们在包装的中间或下半部分(也就是说,在中间或下半部分),在顶部标语中单次出​​现的字A仍然应该胜过其他标语中的三个字体B.需要在得分和得分频率之间取得平衡。

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

3 个答案:

答案 0 :(得分:2)

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

首先,您可以定义适用于标语中单词的功能。功能可以在单词之间共享,例如“和平”一词的特点可能是:

  • “和平”,
  • “名词”,
  • “abstract-noun”,
  • “短名词”,
  • “以p”开头,
  • “以's'声音结束”,
  • ...

第一个特征“和平”是一个独特的特征,仅在“和平”上发射,而其他特征也可以用其他词语发射。

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

现在你开始训练了:

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

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

通常情况下,您并没有真正添加或减去1.0,而是eta乘以1.0,其中eta是学习率,您可以通过实验设置。通常情况下,在训练开始时它会更高,并且在训练期间逐渐降低,因为您的重量正朝着正确的方向移动。 (另请参见随机梯度下降。)首先,您可以将其设置为0.1作为常量。

这个程序会处理停用词(“the”,“of”,......),因为它们应该在好的和不好的口号中经常发生(如果他们真的没有,那么你也会学到这一点)

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

答案 1 :(得分:0)

Bayesian inference怎么样?

答案 2 :(得分:0)

我想我会用一种做这件事的算法:

  1. 消除停用词(常用词)(http://en.wikipedia.org/wiki/Stop_word
  2. 规范化和词干(http://en.wikipedia.org/wiki/Stemming
  3. 计算标准化词频和投票
  4. 按投票/频率订购标准化字词