将英语单词分为罕见和常见

时间:2009-07-08 21:31:48

标签: algorithm math full-text-search statistics

我正在尝试设计一种方法,能够将给定数量的英语单词分为2组 - “罕见”和“常见” - 引用的是它们在语言中的使用程度。

我想要分类的单词数量是有限的 - 目前大约是10,000,包括从文章到可以从其他语言借用的专有名词(因此被归类为“罕见”)的所有内容。我已经在语料库中做了一些频率分析,并且我有这些单词的分布(从1次使用到大约100次)。

我对这种系统的直觉是使用单词列表(例如BNC词频语料库,wordnet,内部语料库频率),并在其中一个中为其出现赋予权重。

例如,在语料库中具有中等频率的单词(比如50),但出现在单词列表W中 - 可以被认为是常见的,因为它是整个语言中最常见的单词之一。我的问题是 - 为这样的事情创建加权分数的最佳方法是什么?我应该离散还是连续?在任何一种情况下,什么样的分类系统最适合这个?

或者您推荐其他方法吗?

谢谢!


编辑:

回答Vinko关于分类的预期用途的问题 -

这些单词是从短语(例如:书名)中标记出来的 - 目的是找出为短语生成搜索查询字符串的策略,搜索文本语料库。查询字符串可以支持多个参数,例如邻近等 - 所以如果一个单词很常见,可以调整这些参数。

回答伊戈尔的问题 -

(1)你的语料库有多大? 目前,该列表仅限于10k令牌,但这只是一个训练集。一旦我开始在测试集上测试它,它可能会达到几十万。

2)你在语料库中有某种预期比例的常见/罕见词吗? 嗯,我没有。

3 个答案:

答案 0 :(得分:2)

假设您有办法评估分类,您可以使用“提升”方法进行机器学习。提升分类器使用一组弱分类器组合成一个强分类器。

说,你有你可以使用的语料库和K外部单词表。 选择N个频率阈值。例如,您可能有10个阈值:0.1%,0.2%,......,1.0%。 对于您的语料库和每个外部单词列表,创建N个“专家”,每个单词列表/语料库每个阈值一个专家,总共N *(K + 1)个专家。每个专家都是一个弱分类器,有一个非常简单的规则:如果单词的频率高于其阈值,他们会认为这个单词是“常见的”。每个专家都有一个重量。

学习过程如下:为每位专家分配权重1。对于语料库中的每个单词,请让专家投票。总结他们的投票:1 *重量(i)为“普通”投票和(-1)*重量(i)为“罕见”投票。如果结果是肯定的,请将该单词标记为常用。

现在,总的想法是评估分类并增加正确专家的权重并减轻错误专家的权重。然后一遍又一遍地重复这个过程,直到你的评估足够好。

体重调整的具体细节取决于您评估分类的方式。例如,如果您没有单词评估,您仍然可以将分类评估为“太多常见”或“太多罕见”单词。在第一种情况下,促进所有亲“稀有”专家并降级所有亲“普通”专家,反之亦然。

答案 1 :(得分:1)

您的分发很可能是Pareto distribution(如上所述的Zipf定律的超集)。令我感到震惊的是,最常用的单词只使用了100次 - 这包括“a”和“the”以及类似的单词?如果是相同的话,你必须有一个小的语料库。

无论如何,你必须选择“罕见”和“普通”的截止值。一个可能的选择是平均预期的出现次数(参见上面链接的维基文章来计算平均值)。由于分布的“肥尾”,相当少数的单词将出现在均值之上 - 这些是“常见的”。其余的都是“罕见的”。这将导致更多的单词比普通单词少见。不确定这是否适合您,但您可以上下移动截止值以获得所需的分布(例如,所有带有> 50%预期值的单词都是“常见”)。

答案 2 :(得分:0)

虽然这不是你问题的答案,但你应该知道你在这里发明了一个轮子。 信息检索专家已经设计出根据频率对搜索词进行加权的方法。非常受欢迎的权重是TF-IDF,它使用文档中的单词频率及其在语料库中的频率。还解释了TF-IDF here

替代得分是Okapi BM25,它使用类似因素。

另请参阅Lucene Similarity documentation了解如何在流行的搜索库中实施TF-IDF。