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