我正在进行一个项目,我们试图在一个由多个群集划分的文章标题语料库上生成一个TF-IDF。我们的目标是使其同时包含每个群集中最重要的单字和双字。我们的计划是这样的。我们首先识别语料库中最可能的双字。有了这个列表,我们接下来计算这些双字在每个群集中的频率。我们接下来想做的事情,也是我们遇到问题的地方,就是确保我们在计算这些双字中的单字时不重复计数。假设一个常见的双字是’climate change’。这个双字在我们的语料库中出现了6次,但是单字’climate’出现了7次(它单独出现了一次),单字’change’出现了8次(它单独出现了两次)。我们必须确保我们的包含单字和双字的表格不像这样:
n_gram frequency1: climate change 62: climate 73: change 8
它必须看起来像这样(我们从’climate change’的频率中减去’climate’和’change’的频率,并将结果应用到相应的单字上):
n_gram frequency1: climate change 62: climate 13: change 2
问题是,如果我们从每个双字的第一个和第二个单字频率中减去它们对应的单字频率,我们有时会得到负的单字频率。我们的直觉是这样的:假设一个常见的三字是’United States America’。那么我们将会有两个常见的双字,即’United States’和’States America’。所以假设我们最初有这个表格(没有做任何减法):
n_gram frequency1: United States 102: States America 103: United 114: States 125: America 13
然后在减去双字频率后,我们将得到这个表格:
n_gram frequency1: United States 102: States America 103: United 14: States -85: America 3
我的问题是:有没有我没有看到的简单解决方法?使用这种方法还会有什么其他原因导致负频率吗?
回答:
如果你先计算双字,当你计算单字频率时,你可以忽略增加任何作为重要双字一部分的单字实例的频率。例如,如果我们有以下内容:
… 美国专家的观点是,如果我们现在不处理气候变化问题,气候将对美国和我们的星球造成不可逆转的损害。相反,有些人认为气候变化是美国政府编造的骗局 …”
我们最常见的双字是:
bi_gram frequency1: United States 22: States America 23: climate change 2
当我们计算我们的单字时,我们可以忽略任何作为上述双字一部分的单字实例。例如,我们只能在’America’没有’United’在其左侧或没有’States’在其右侧时增加其频率,从而得到我们的单字频率表(忽略其他词):
uni_gram frequency1: climate 12: change 13: America 1