对于每种语言,它在 x 轴上绘制每个 1-gram(即单词)的频率排名,在 y 轴上绘制cumshare
。例如,在学习了 1000 个最常见的法语单词后,人们可以理解 70% 以上的单词(算上重复单词),这些单词出现在 2010 年至 2019 年间出版的法语 Google Books Ngram 语料库版本 20200217 的典型书籍中。
对于 1-gram 以外的 n-gram,学习最常见的 N-gram 的回报并不那么陡峭,因为单词的可能组合有很多。尽管如此,人们在上下文中学习事物时往往会学得更好,因此它们的一种用途可能是为每个 1-gram 找到常见的示例短语。另一种方法如下:假设一个人想要学习某种语言中 1000 个最常见的单词。例如,人们可以创建一个最常见 4-gram 的最小列表(其中包括这 1000 个单词)并学习它。
尽管 n-gram 列表已经针对语言学习进行了清理,并且包含一些英语翻译,但它们并不是为了直接用于学习,而是作为开发语言学习材料的中间资源。提供的翻译仅给出最接近该单词最常见含义的英语单词。此外,根据个人的语言学习目标,Google Books Ngram 语料库可能不是学习材料的最佳语料库 - 请参阅下一节。
底层语料库 该存储库基于 Google 图书 Ngram 语料库版本 3(版本标识符为 20200217),由 Google 在此处作为 n-gram 列表提供。这也是 Google 图书 Ngram 查看器的基础数据。该语料库是 Google 根据光学字符识别和元数据的质量从 Google 数字化图书中选择的一个子集,包含约 6% 的已出版图书 (1,2,3)。
在评估语料库的质量时,其大小及其对感兴趣材料类型的代表性都很重要。
尺寸 Google Books Ngram 语料库第 3 版非常庞大,正如这张按语言和子语料库列出的单词数表所示:
语言 # 个字,所有年份 # 字数,2010-2019 中国人 10,778,094,737 257,989,144 英语 1,997,515,570,677 283,795,232,871 美式英语 1,167,153,993,435 103,514,367,264 英式英语 336,950,312,247 45,271,592,771 英国小说 158,981,617,587 73,746,188,539 法语 328,796,168,553 35,216,041,238 德语 286,463,423,242 57,039,530,618 希伯来语 7,263,771,123 76,953,586 意大利语 120,410,089,963 15,473,063,630 俄语 89,415,200,246 19,648,780,340 西班牙语 158,874,356,254 17,573,531,785
请注意,这些数字是单词总数,而不是唯一单词的数量。它们还包含许多不是有效单词的单词,但由于语料库的大小,仅对最常见的单词执行清理步骤,因此无法获得清理后整个语料库中剩余的单词数量。此外,Google 只上传出现次数超过 40 次的单词,而这些计数还包括出现频率低于 40 次的单词。
我们看到,即使将语言子语料库限制为过去 10 年出版的书籍,每个子语料库的单词数量仍然大于 150 亿,除了中文和希伯来语。这比所有其他常用语料库要大得多,这些语料库似乎从未包含超过数十亿个单词,而且通常比这个语料库小得多 (4)。
代表性 当谈到代表性时,这取决于预期用途。 Google Books Ngram 语料库仅包含书籍(不含期刊、口语、网站等)。每本书版本最多包含一次。这些图书大部分来自少数大型大学图书馆,语料库版本 1 中“超过 40 种”,而一小部分直接从出版商处获得 (1)。因此,举例来说,如果一个人打算使用这个语料库来学习一种语言,而人们主要会阅读大型大学图书馆感兴趣的那种书籍,那么这个语料库中的单词很可能能够很好地代表单词的总体情况将来可能会遇到。
Python代码 生成所有内容的代码位于 python 目录中。每个 .py 文件都是一个可以使用python python/filename
从命令行运行的脚本,其中工作目录必须是包含 python 目录的目录。每个 .py 文件的顶部都有一个设置部分,可以使用 python/extra_settings 中的文件指定其他清理设置。选择默认设置是为了使代码运行得相当快,并使生成的存储库大小相当小。
再现一切 或者,首先从存储库根目录运行 create_source_data_lists.py 来重新创建源数据文件夹,其中包含指向 Google 源数据文件的链接列表。
从存储库根目录运行 download_and_extract_most_freq.py 以下载源数据(“.gz 文件”)中列出的每个文件,并将其中最常见的 n-gram 提取到保存在ngrams/more/{lang}/most_freq_ngrams_per_gz_file
的列表中ngrams/more/{lang}/most_freq_ngrams_per_gz_file
。为了节省计算机资源,此后将立即删除每个 .gz 文件。由于在默认设置下,每个 .gz 文件最常见的 n-gram 列表仍占用约 36GB,因此仅将一个示例列表上传到 GitHub:ngrams_1-00006-of-00024.gz.csv。此阶段尚未执行任何清理,因此这就是原始数据的样子。
运行 Gather_and_clean.py 将所有 n-gram 收集到整体最常见的列表中,并清理这些列表(有关详细信息,请参阅下一节)。
运行 google_cloud_translate.py 以使用 Google Cloud Translate API 将英语翻译添加到所有非英语 1-gram(这需要 API 密钥,请参阅文件头)。默认情况下,仅翻译 1-gram,并且仅翻译为英语,但通过更改设置,任何 n-gram 都可以翻译为 Google 支持的任何语言。谷歌随机将翻译大写,因此尝试纠正这一点。此外,使用manual_translations_1grams.csv应用了有限数量的手动更正。
最后,graph_1grams_cumshare_rank.py 生成 graph_1grams_cumshare_rank_light.svg 及其深色版本。
执行的清洁步骤 除了 Google 翻译的清理之外,所有清理步骤都在 Gather_and_clean.py 中执行。
以下清洁步骤以编程方式执行:
删除词性 (POS) 标签 1-grams,法语和意大利语 :缩写被分开尾随“_”被删除 大写和非大写的 n-gram 被合并 仅包含标点符号和/或数字的 n 元语法被删除 1-grams,德语 :仅包含大写字母的单词将被删除,除非在手动创建的例外列表中 upcases_to_keep.csv 1-grams,德语除外 :以大写字母开头的单词将被删除,除非在手动创建的例外列表中 upcases_to_keep.csv 1-grams :删除单字符单词,除非在手动创建的例外列表 onechars_to_keep.csv 中 德语和俄语 :缩写被删除英语小说 :删除以"'"
开头的 n-gram包含除"'"
、 " "
和","
之外的非单词字符的 n 元语法将被删除 带有数字的 n 元模型被删除 错误字母表中的 n 元模型将被删除。 此外,以下清洁步骤是手动执行的,并使用英文翻译来帮助做出决定:
1-grams,所有语言 :已检查已删除单词列表中是否有错误删除的单词。 1-grams,希伯来语除外 :清理后的列表已经过全面检查,是否有多余的单词需要排除。 1-grams,希伯来语 :已检查清理后的列表中是否有额外的单词,以排除最高排名 100 的单词。 当在上述手动清理步骤中发现错误包含或排除的 n 元语法时,可以通过调整编程规则、将它们添加到例外列表之一或将它们添加到额外的最终列表来纠正此问题。要排除的 n 元语法。 手动创建的要排除的额外 n-gram 列表中的 n-gram 已被删除。这些列表位于 python/extra_settings 中,并命名为extra_{n}grams_to_exclude.csv
。 当手动决定包含和排除哪些单词时,应用了以下规则。排除 :人名(一些例外:耶稣、上帝)、城市名称(一些例外:如果与英语有很大不同并且足够常见)、公司名称、缩写(一些例外,例如 ma、pa)、单词部分、单词错误的语言(除非常用)。不排除 :国名、民族/民族群体的名称、地名(例如河流、海洋)、口语、感叹词。
相关工作 有关 Google 图书 Ngram 语料库(版本 20200217)英语部分中精心创建的所有单词列表(按频率排序),请参阅 hackerb9/gwordlist 存储库。
维基词典上提供了多种语言的广泛频率列表。
限制和已知问题 剩下要做的就是完成希伯来语的最终手动清理以及 n > 1 的 n-gram 列表的清理。将来可能解决的一个问题是后者中的一些包含“,”作为单词。可能还需要包含更常见的缩写。没有为美式英语和英式英语语料库提供单独的 n-gram 列表。当然,仍然存在一些错误。
该存储库的内容根据 Creative Commons Attribution 3.0 Unported License 获得许可。非常欢迎问题报告和拉取请求!