代码之家  ›  专栏  ›  技术社区  ›  viksit

将英语单词分为稀有和常见两类

  •  4
  • viksit  · 技术社区  · 17 年前

    我正在尝试设计一种方法,可以将给定数量的英语单词分为两组——“稀有”和“普通”——这两组单词在语言中的使用程度。

    我想分类的单词数量是有界的——目前大约有10000个,包括从文章到可以从其他语言中借用的专有名词(因此被分类为“稀有”)的所有内容。我已经在语料库中做了一些频率分析,并且对这些词进行了分布(从1个用法到100个左右的最高级)。

    我对这样一个系统的直觉是使用单词表(如bnc单词频率语料库、wordnet、内部语料库频率),并为其中一个单词的出现分配权重。

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

    或者你推荐一种替代方法?

    谢谢!


    编辑:

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

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

    回答伊戈尔的问题-

    (1)你的语料库有多大? 目前,该列表仅限于10000个代币,但这只是一个训练集。一旦我开始在测试集中测试它,它可能会上升到100K。

    2)语料库中常见/罕见词的预期比例是多少? 嗯,我没有。

    3 回复  |  直到 17 年前
        1
  •  2
  •   Igor Krivokon    17 年前

    假设您有一种评估分类的方法,您可以使用“增强”方法进行机器学习。增强分类器使用一组弱分类器组合到强分类器。

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

    学习过程如下:将权重1分配给每个专家。对于语料库中的每个词,让专家投票。投票总数:普通票的1*权重(i)和罕见票的-1*权重(i)。如果结果为正数,则将该词标记为“common”。

    现在,总体思路是评估分类,增加对专家的权重,减少错专家的权重。然后一次又一次地重复这个过程,直到你的评价足够好为止。

    重量调整的细节取决于如何评估分类。例如,如果您没有每个单词的评估,那么您可能仍然将分类评估为“太多常见”或“太多稀有”单词。在第一种情况下,提升所有的专业“稀有”专家,降低所有的专业“普通”专家,反之亦然。

        2
  •  1
  •   af.    17 年前

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

    无论如何,你必须为“稀有”和“普通”选择一个截止点。一个可能的选择是平均预期出现次数(请参阅上面链接的wiki文章来计算平均值)。由于分布的“肥尾”,相当少的词会出现在平均数之上——这些是“常见的”。其余的“稀有”。这将产生这样的效果,即更多的单词是罕见的,而不是普通的。不确定这是否是您要做的,但您可以上下移动截止值以获得所需的分布(例如,所有预期值为50%的单词都是“常见”的)。

        3
  •  0
  •   Yuval F    17 年前

    虽然这不是你问题的答案,但你应该知道你在这里发明了一个轮子。 信息检索专家已经设计出根据搜索词的频率来加权搜索词的方法。一个很流行的重量是 TF-IDF 在文档中使用单词的频率,在语料库中使用单词的频率。TF-IDF也解释了 here .

    另一个分数是 Okapi BM25 使用相似的因素。

    也见 Lucene Similarity documentation 关于tf-idf是如何在流行的搜索库中实现的。