假设我有一个口号(短词,多词短语)的列表,人们投票选出了他们最喜欢的口号,我想评估哪些词,如果有的话,使一些口号比其他口号更受欢迎.实现这一目标的最佳方法是什么?我的第一个想法是找到所有标语中的所有独特单词,并将每个单词评分为包含所述单词的所有标语的平均票数,但我认为频率也应该以某种方式发挥作用,所以应满足以下条件:
>如果单词A只出现得票最多的口号而单词B只出现在获得第二多的口号中,则单词A更“流行”
>但是,如果Word A只出现在排名第一的口号中,并且Word B出现在排名第二和第三的口号中,那么Word B应该会赢,因为它会将更多的口号推到顶端.
>然而,如果他们在包装的中间或下半部分(也就是说,有需要),在顶部口号中单次出现的字A仍然应该胜过其他标语中的三个字体B.获得投票和得分频率的平衡.
我还想消除通常常见的词(例如,“the”或“of”).这类似于关于识别过去曾被问过的趋势词的问题,但是因为随时间的变化不是因素而有所不同.就文学而言,我很高兴能指出正确的方向,但我不确定要寻找什么.这是其他人处理的一类问题吗?
最佳答案 这是一个机器学习问题.您正在尝试从受监督的数据中学习模型.为此,您可以运行类似Perceptron或SampleRank(
pdf)的简单算法:
首先,您定义适用于口号中的单词的功能.功能可以在单词之间共享,例如“和平”一词的特点可能是:
>“和平”,
>“名词”,
>“抽象名词”,
>“短名词”,
>“以p开头”,
>“以声音结束”,
> ……
第一个特征“和平”是一个独特的功能,仅在“和平”上发射,而其他功能也可以用其他词语触发.
每个功能都有一个重量(越高越好).所以你有一个特征向量和一个权重向量.这将使您能够为任何口号分配权重(分数)(只是在口号中的单词上触发的所有加权特征的总和).所有权重都初始化为0.0.
现在你开始训练:
你绕过所有标语口号.对于每一对,你知道真正的排名(根据你已经拥有的票数).然后根据要素及其当前权重计算排名.如果根据您当前的特征权重(即根据您当前的模型)的真实排名和排名是相同的,您只需转到下一对.如果您的模型分配了错误的排名,则您需要更正要素权重:您可以根据更好的口号(根据人们的投票选择更好的口号)为要素的权重添加1.0,并从触发的要素的权重中减去1.0在更糟糕的口号(它的分数显然太高,所以你现在降低它).这些权重更新将影响模型分配给下一对的分数,依此类推.
你运行这个循环几次,直到你的模型得到大多数对(或其他一些收敛标准).
通常情况下,您并不真正添加或减去1.0,而是eta乘以1.0,其中eta是学习率,您可以通过实验设置.通常情况下,在训练开始时它会更高,并且在训练期间逐渐降低,因为您的重量正朝着正确的方向移动. (另请参阅随机梯度下降.)首先,您可以将其设置为0.1作为常量.
这个程序会处理停用词(“the”,“of”,……),因为它们应该在好的和不好的口号中经常出现(如果他们真的没有,那么你也会学到这一点).
训练后,您可以根据学习的特征权重计算每个单词的分数.