我如何衡量Twitter等特定词汇的趋势?

dat*_*oda 15 algorithm math statistics geometry linear-algebra

我白天有报纸文章的语料库.语料库中的每个单词都具有当天存在的频率计数.我一直在寻找能够捕捉突破性词语的算法,类似于Twitter在人们的推文中衡量趋势的方式.

例如,在同一组报纸中,"经济衰退"这个词的出现频率如下:
第1天| 经济衰退| 456
第2天| 经济衰退| 2134
第3天| 经济衰退| 3678

而'欧洲'
第1天| 欧洲| 67895
第2天| 欧洲| 71999
第3天| 欧洲| 73321

我正在考虑每天增加%增长并将其乘以频率总和的对数.然后我会取平均分数并比较各种单词.

在这种情况下:
经济衰退=(3.68*8.74 + 0.72*8.74)/ 2 = 19.23
欧洲=(0.06*12.27 + 0.02*12.27)/ 2 = 0.49

是否有更好的方法来捕捉爆炸式增长?我正在尝试挖掘每日语料库以查找在特定时间段内越来越多地提及的术语.如果有更好的算法,请告诉我.我希望能够找到具有高非恒定加速度的单词.也许采用二阶导数会更有效.或者也许我这样做过于复杂,并且在发现频道上观看了太多的物理编程.如果可能,请告诉我一个数学示例谢谢!

tsk*_*zzy 8

首先要注意的是,这可以通过局部问题来近似.也就是说,"趋势"一词实际上仅取决于最近的数据.因此,我们可以立即将数据截断到最近N几天,这N是实验确定的最佳值.这大大减少了我们要查看的数据量.

事实上,NPR文章暗示了这一点.

然后你需要以某种方式看待增长.这正是衍生物捕获的内容.首先要做的是规范化数据.将所有数据点除以第一个数据点的值.这使得不常见的词的大量增长不会被流行词的相对较小的增长所淹没.

对于一阶导数,请执行以下操作:

d[i] = (data[i] - data[i+k])/k
Run Code Online (Sandbox Code Playgroud)

对于某些实验确定的值k(在这种情况下,是几天).同样,二阶导数可表示为:

d2[i] = (data[i] - 2*data[i+k] + data[i+2k])/(2k)
Run Code Online (Sandbox Code Playgroud)

更高的衍生物也可以这样表达.然后你需要为这些衍生物分配某种加权系统.这是一个纯粹的实验性程序,实际上取决于你想要考虑的"趋势".例如,您可能希望将增长加速度增加到速度的一半.另外需要注意的是,您应该尽量去除数据中的噪声,因为衍生物对噪声非常敏感.您可以通过仔细选择您的值k以及完全丢弃频率非常低的单词来实现此目的.

我还注意到你乘以频率的对数和.我认为这是为了让流行词语的增长更加重要(因为更流行的词语首先不太可能出现趋势).衡量一个词的流行程度的标准方法是查看它的逆文档频率(IDF).

我会用一个单词的IDF除以使更多流行单词的增长更加重要.

IDF[word] = log(D/(df[word))
Run Code Online (Sandbox Code Playgroud)

D文件总数在哪里(例如,对于Twitter,它将是推文的总数),并且df[word]是包含的文档word的数量(例如,包含单词的推文的数量).

高IDF对应于不受欢迎的单词,而低IDF对应于流行单词.