2

多年来,我多次想使用质量不同的频率列表(字符、单词、n-gram 等),但从未想出如何将它们一起使用。

当时我直觉认为只有排名而没有其他数据的列表应该是有用的。从那时起,我了解了Zipf 定律幂律。虽然我数学不是很好,所以我并不完全理解一切。

我在 StackOverflow 和 CrossValidated 中发现了一些似乎相关的问题。但我要么没有正确理解它们,要么它们缺乏有用的答案。

我想要的是一种方法来规范一个包含完整频率数据的列表和一个只有排名数据的列表,以便我可以一起使用这两个列表。

例如带有频率数据的单词列表:

word  per /million
的    50155.13
我    50147.83
你    39629.27
是    28253.52
了    28210.53
不    20543.44
在    12811.05
他    11853.78
我们  11080.02
...
...
...   00000.01

还有一个只有排名数据的单词列表:

word  rank
的    1
一    2
是    3
有    4
在    5
人    6
不    7
大    8
中    9
...
...
...   100,000

如何将频率数据和排名数据归一化为可用于比较等的相同类型的值?

(这个问题中的示例列表只是示例。假设从程序员无法控制的外部来源获得更长的列表。)

4

1 回答 1

3

很明显,您可以确定一个排名,当您有一个包含频率的完整列表时(按频率降序排列列表并分配排名增量),但不能反过来(您怎么知道,多久一个词出现,如果它被排在第 3 位?你只能推断,它的出现频率与第 2 位的词相比相同/更低,与第 4 位的词相比,它的出现频率相同/更高)。

应用 Zipf 定律,您可以将排名映射回某个频率估计,并尝试粗略估计一个频率。但我不确定这对不同语言的概括效果如何。

[编辑] 你现在真的引起了我的注意 :) 我在 Wolfram MathWorld 上遇到了 Zipf 定律的这个应用。我将用我不久前创建的英语术语语料库做一些小实验。我会带着结果回来的,只是有点耐心。

[edit2] 我现在从书面和口语中的单词频率中获取频率列表:基于英国国家语料库。(确切地说,这个;它只包含前 50001/rank左右的单词,但对于这个快速考虑应该足够了)并应用了一个简单的频率来估计。我将实验作为KNIME工作流程进行(使用图表的 JFreeChart 节点和Palladian节点 [免责声明:我是 Palladian 节点的作者] 进行 RMSE 计算),如下所示:

KNIME 工作流程

具有实际频率和排名估计值的图表如下所示(排名是对数缩放的,抱歉没有在轴上提供足够的标题;蓝线是估计值;红线是数据集中的实际值):

频率估计

因此,虽然在较高等级上存在一些异常值(例如 2、3、4),但在将其与 TF-IDF 或类似的东西结合使用时,频率估计应该仍然非常不错。(在这种情况下RMSE约为 0.004,这当然是由于长尾偏差最小)

这是一个包含一些实际值的片段:

频率估计列表

顺便提一句。; 还可以查看有关Zipf 定律的Wikipedia 文章的这一部分,它显示了类似的结果。

于 2014-02-16T11:55:11.270 回答