mtdata是下载机器翻译数据集的工具
项目描述
MTData
MTData自动化收集和准备机器翻译(MT)数据集。它提供CLI和python API,可用于准备MT实验。
此工具了解
- 从哪里下载数据集:WMT新闻翻译测试和Paracrawl、Europarl、新闻评论、WikiTitles、Tilde模型语料库、OPUS...
- 如何提取文件:.tar、.tar.gz、.tgz、.zip、...
- 如何解析.tmx、.sgm等XML文件,或.tsv...检查它们是否有相同数量的段落。
- 并行数据是否在一个.tsv文件中,或两个.sgm文件中。
- 数据是否以.gz、.xz或根本未压缩的形式压缩。
- 源-目标是否以相同的顺序排列,或者是否以目标-源顺序交换。
- 如何将代码映射到ISO语言代码!使用具有7000多种地球语言空间的ISO 639_3。
- 新功能v0.3:BCP-47样式的语言ID:(语言,脚本,区域)
- 仅下载一次,并将文件保存在本地缓存中。
- (随着时间的推移,还有更多这样的小细节。)
MTData旨在
- 通过减少人工干预来自动化机器翻译训练数据创建。这受到了SacreBLEU的启发,它在评估阶段减少了人工干预。
- 这是一个可重用的工具,而不是分散在多个存储库中的数十个一次性脚本。
安装
# Option 1: from pypi
pip install -I mtdata
# To install a specific version, get version number from https://pypi.ac.cn/project/mtdata/#history
pip install mtdata==[version]
# Option 2: install from latest master branch
pip install -I git+https://github.com/thammegowda/mtdata
# Option 3: for development/editable mode
git clone https://github.com/thammegowda/mtdata
cd mtdata
pip install --editable .
当前状态
我们添加了一些常用数据集——欢迎您添加更多!这些是从各种来源汇总的数据集摘要(更新:2022年2月)。
来源 | 数据集数量 |
---|---|
OPUS | 151,753 |
Flores | 51,714 |
微软 | 8,128 |
莱比锡 | 5,893 |
Neulab | 4,455 |
Statmt | 1,784 |
1,617 | |
艾伦AI | 1,611 |
ELRC | 1,575 |
欧盟 | 1,178 |
Tilde | 519 |
LinguaTools | 253 |
Anuvaad | 196 |
AI4Bharath | 192 |
ParaCrawl | 127 |
Lindat | 56 |
联合国 | 30 |
JoshuaDec | 29 |
斯坦福NLP | 15 |
ParIce | 8 |
LangUk | 5 |
Phontron | 4 |
NRC_CA | 4 |
KECL | 3 |
IITB | 3 |
WAT | 3 |
Masakhane | 2 |
总计 | 231,157 |
用例
- WMT 2023通用(新闻)翻译任务:https://www.statmt.org/wmt23/mtdata/
- WMT 2022通用(新闻)翻译任务:https://www.statmt.org/wmt22/mtdata/
- USC ISI的500至英语MT:
http://rtg.isi.edu/many-eng/http://gowda.ai/006-many-to-eng/) - Meta AI的200至200 MT:白皮书
CLI使用
- pip安装后,可以使用
mtdata
命令或python -m mtdata
调用CLI。 - 有两个子命令:用于列出数据集的
list
,以及用于获取数据集的get
。
mtdata list
列出此工具所知的数据集。
mtdata list -h
usage: __main__.py list [-h] [-l L1-L2] [-n [NAME ...]] [-nn [NAME ...]] [-f] [-o OUT]
optional arguments:
-h, --help show this help message and exit
-l L1-L2, --langs L1-L2
Language pairs; e.g.: deu-eng (default: None)
-n [NAME ...], --names [NAME ...]
Name of dataset set; eg europarl_v9. (default: None)
-nn [NAME ...], --not-names [NAME ...]
Exclude these names (default: None)
-f, --full Show Full Citation (default: False)
# List everything ; add | cut -f1 to see ID column only
mtdata list | cut -f1
# List a lang pair
mtdata list -l deu-eng
# List a dataset by name(s)
mtdata list -n europarl
mtdata list -n europarl news_commentary
# list by both language pair and dataset name
mtdata list -l deu-eng -n europarl news_commentary newstest_deen | cut -f1
Statmt-europarl-9-deu-eng
Statmt-europarl-7-deu-eng
Statmt-news_commentary-14-deu-eng
Statmt-news_commentary-15-deu-eng
Statmt-news_commentary-16-deu-eng
Statmt-newstest_deen-2014-deu-eng
Statmt-newstest_deen-2015-deu-eng
Statmt-newstest_deen-2016-deu-eng
Statmt-newstest_deen-2017-deu-eng
Statmt-newstest_deen-2018-deu-eng
Statmt-newstest_deen-2019-deu-eng
Statmt-newstest_deen-2020-deu-eng
Statmt-europarl-10-deu-eng
OPUS-europarl-8-deu-eng
# get citation of a dataset (if available in index.py)
mtdata list -l deu-eng -n newstest_deen --full
数据集ID
数据集ID已标准化为此格式
<组>-<名称>-<版本>-<lang1>-<lang2>
Group
:数据集的来源或我们获取此数据集的网站name
:数据集的名称version
:版本名称lang1
和lang2
是BCP47-like代码。在简单情况下,它们是ISO-639-3代码,但它们可能由下划线(_
)分隔的脚本和语言标签。
mtdata get
此命令将指定名称和语言的语料库下载到目录中。您必须为--train
和--test
参数做出明确选择
mtdata get -h
python -m mtdata get -h
usage: __main__.py get [-h] -l L1-L2 [-tr [ID ...]] [-ts [ID ...]] [-dv ID] [--merge | --no-merge] [--compress] -o OUT_DIR
optional arguments:
-h, --help show this help message and exit
-l L1-L2, --langs L1-L2
Language pairs; e.g.: deu-eng (default: None)
-tr [ID ...], --train [ID ...]
Names of datasets separated by space, to be used for *training*.
e.g. -tr Statmt-news_commentary-16-deu-eng europarl_v9 .
To concatenate all these into a single train file, set --merge flag. (default: None)
-ts [ID ...], --test [ID ...]
Names of datasets separated by space, to be used for *testing*.
e.g. "-ts Statmt-newstest_deen-2019-deu-eng Statmt-newstest_deen-2020-deu-eng ".
You may also use shell expansion if your shell supports it.
e.g. "-ts Statmt-newstest_deen-20{19,20}-deu-eng" (default: None)
-dv ID, --dev ID Dataset to be used for development (aka validation).
e.g. "-dv Statmt-newstest_deen-2017-deu-eng" (default: None)
--merge Merge train into a single file (default: False)
--no-merge Do not Merge train into a single file (default: True)
--compress Keep the files compressed (default: False)
-o OUT_DIR, --out OUT_DIR
Output directory name (default: None)
快速入门/示例
查看为deu-eng
可用的数据集
$ mtdata list -l deu-eng | cut -f1 # see available datasets
Statmt-commoncrawl_wmt13-1-deu-eng
Statmt-europarl_wmt13-7-deu-eng
Statmt-news_commentary_wmt18-13-deu-eng
Statmt-europarl-9-deu-eng
Statmt-europarl-7-deu-eng
Statmt-news_commentary-14-deu-eng
Statmt-news_commentary-15-deu-eng
Statmt-news_commentary-16-deu-eng
Statmt-wiki_titles-1-deu-eng
Statmt-wiki_titles-2-deu-eng
Statmt-newstest_deen-2014-deu-eng
....[truncated]
获取这些数据集,并将其存储在data/deu-eng
目录下
$ mtdata get -l deu-eng --out data/deu-eng --merge \
--train Statmt-europarl-10-deu-eng Statmt-news_commentary-16-deu-eng \
--dev Statmt-newstest_deen-2017-deu-eng --test Statmt-newstest_deen-20{18,19,20}-deu-eng
# ...[truncated]
INFO:root:Train stats:
{
"total": 2206240,
"parts": {
"Statmt-news_commentary-16-deu-eng": 388482,
"Statmt-europarl-10-deu-eng": 1817758
}
}
INFO:root:Dataset is ready at deu-eng
为了将来或其他人重新生成此数据集,请参阅<out-dir>/mtdata.signature.txt
$ cat deu-eng/mtdata.signature.txt
mtdata get -l deu-eng -tr Statmt-europarl-10-deu-eng Statmt-news_commentary-16-deu-eng \
-ts Statmt-newstest_deen-2018-deu-eng Statmt-newstest_deen-2019-deu-eng Statmt-newstest_deen-2020-deu-eng \
-dv Statmt-newstest_deen-2017-deu-eng --merge -o <out-dir>
mtdata version 0.3.0-dev
查看上述命令所完成的工作
$ tree data/deu-eng/
├── dev.deu -> tests/Statmt-newstest_deen-2017-deu-eng.deu
├── dev.eng -> tests/Statmt-newstest_deen-2017-deu-eng.eng
├── mtdata.signature.txt
├── test1.deu -> tests/Statmt-newstest_deen-2020-deu-eng.deu
├── test1.eng -> tests/Statmt-newstest_deen-2020-deu-eng.eng
├── test2.deu -> tests/Statmt-newstest_deen-2018-deu-eng.deu
├── test2.eng -> tests/Statmt-newstest_deen-2018-deu-eng.eng
├── test3.deu -> tests/Statmt-newstest_deen-2019-deu-eng.deu
├── test3.eng -> tests/Statmt-newstest_deen-2019-deu-eng.eng
├── tests
│ ├── Statmt-newstest_deen-2017-deu-eng.deu
│ ├── Statmt-newstest_deen-2017-deu-eng.eng
│ ├── Statmt-newstest_deen-2018-deu-eng.deu
│ ├── Statmt-newstest_deen-2018-deu-eng.eng
│ ├── Statmt-newstest_deen-2019-deu-eng.deu
│ ├── Statmt-newstest_deen-2019-deu-eng.eng
│ ├── Statmt-newstest_deen-2020-deu-eng.deu
│ └── Statmt-newstest_deen-2020-deu-eng.eng
├── train-parts
│ ├── Statmt-europarl-10-deu-eng.deu
│ ├── Statmt-europarl-10-deu-eng.eng
│ ├── Statmt-news_commentary-16-deu-eng.deu
│ └── Statmt-news_commentary-16-deu-eng.eng
├── train.deu
├── train.eng
├── train.meta.gz
└── train.stats.json
食谱
自v0.3.1以来
食谱是一组指定用于训练、开发和测试的数据集,旨在提高实验的可重复性。食谱从
- 默认:从源代码的
mtdata/recipe/recipes.yml
- 缓存目录:
$MTDATA/mtdata.recipes.yml
,其中$MTDATA
默认为~/.mtdata
- 当前目录:所有匹配glob的文件:
$PWD/mtdata.recipes*.yml
- 如果当前目录不合适,请使用
export MTDATA_RECIPES=/path/to/dir
- 或者,使用
MTDATA_RECIPES=/path/to/dir mtdata list-recipe
- 如果当前目录不合适,请使用
有关格式和示例,请参阅mtdata/recipe/recipes.yml
mtdata list-recipe # see all recipes
mtdata get-recipe -ri <recipe_id> -o <out_dir> # get recipe, recreate dataset
语言名称标准化
ISO 639 3
内部,所有语言代码都映射到ISO-639 3代码。可以使用python -m mtdata.iso
或mtdata-iso
检查映射。
$ mtdata-iso -h
usage: python -m mtdata.iso [-h] [-b] [langs [langs ...]]
ISO 639-3 lookup tool
positional arguments:
langs Language code or name that needs to be looked up. When no
language code is given, all languages are listed.
optional arguments:
-h, --help show this help message and exit
-b, --brief be brief; do crash on error inputs
# list all 7000+ languages and their 3 letter codes
$ mtdata-iso # python -m mtdata.iso
...
# lookup codes for some languages
$ mtdata-iso ka kn en de xx english german
Input ISO639_3 Name
ka kat Georgian
kn kan Kannada
en eng English
de deu German
xx -none- -none-
english eng English
german deu German
# Print no header, and crash on error;
$ mtdata-iso xx -b
Exception: Unable to find ISO 639-3 code for 'xx'. Please run
python -m mtdata.iso | grep -i <name>
to know the 3 letter ISO code for the language.
使用Python API
from mtdata.iso import iso3_code
print(iso3_code('en', fail_error=True))
print(iso3_code('eNgLIsH', fail_error=True)) # case doesnt matter
BCP-47
从v0.3.0版本开始
我们从一开始就使用了ISO 639-3,然而,我们很快遇到了ISO 639-3无法区分语言脚本和区域变体的局限性。因此,我们在v0.3.0版本中升级到了BCP-47样式的语言标签。
- BCP47对一些使用两位字母代码,对其他使用三位字母代码,我们使用三位字母代码对所有语言。
- BCP47使用连字符(-)作为分隔符,我们使用下划线(_)作为分隔符,因为连字符被MT社区用于分隔比特语对(例如en-de或eng-deu)
我们的标签形式为xxx_Yyyy_ZZ
,其中
模式 | 目的 | 标准 | 长度 | 大小写 | 必填 |
---|---|---|---|---|---|
xxx |
语言 | ISO 639-3 | 三位字母 | 小写 | 必填 |
Yyyy |
脚本 | ISO 15924 | 四位字母 | 标题大小写 | 可选 |
ZZ |
区域 | ISO 3166-1 | 两位字母 | 大写 | 可选 |
备注
- 当可用时,保留区域,不可用时留空
- 在明显情况下,脚本
Yyyy
会被强制压制。例如,使用eng
脚本编写的eng
,将eng-Latn
写成Latn
是不太容易读的,因为Latn
是默认的,所以我们压制英语的Latn
脚本。另一方面,像Kannada
这样的语言使用Knda
脚本(kan-Knda
->kan
),但偶尔也使用Latn
脚本,所以kan-Latn
不会被压制。 - 默认脚本的信息是从IANA语言代码注册表中获得的
- 语言代码
mul
代表多种语言,用作多语言数据集的占位符(例如,在(mtdata/recipe/recipes.yml)中使用mul-eng
表示多对英语数据集的食谱
示例
要检查解析/映射,请使用python -m mtdata.iso.bcp47 <args>
mtdata-bcp47 eng English en-US en-GB eng-Latn kan Kannada-Deva hin-Deva kan-Latn
输入 | 标准 | 语言 | 脚本 | 区域 |
---|---|---|---|---|
eng | eng | eng | None | None |
英语 | eng | eng | None | None |
en-US | eng_US | eng | None | US |
en-GB | eng_GB | eng | None | GB |
eng-Latn | eng | eng | None | None |
kan | kan | kan | None | None |
Kannada-Deva | kan_Deva | kan | Deva | None |
hin-Deva | hin | hin | None | None |
kan-Latn | kan_Latn | kan | Latn | None |
kan-in | kan_IN | kan | None | IN |
kn-knda-in | kan_IN | kan | None | IN |
管道模式
# --pipe/-p : maps stdin -> stdout
# -s express : expresses scripts (unlike BCP47, which supresses default script
$ echo -e "en\neng\nfr\nfra\nara\nkan\ntel\neng_Latn\nhin_deva"| mtdata-bcp47 -p -s express
eng_Latn
eng_Latn
fra_Latn
fra_Latn
ara_Arab
kan_Knda
tel_Telu
eng_Latn
hin_Deva
BCP47映射的Python API
from mtdata.iso.bcp47 import bcp47
tag = bcp47("en_US")
print(*tag) # tag is a tuple
print(f"{tag}") # str(tag) gets standardized string
如何贡献
- 请通过将任何缺少的新数据集添加到
index
模块来帮助扩大数据集。 - 请在https://github.com/thammegowda/mtdata/创建问题或拉取请求
更改缓存目录
默认的缓存目录是$HOME/.mtdata
。当你使用此命令下载大量数据集时,它可能会变得很大。
要更改它
- 设置以下环境变量
export MTDATA=/path/to/new-cache-dir
- 或者,将
$HOME/.mtdata
移动到所需位置,并创建一个符号链接
mv $HOME/.mtdata /path/to/new/place
ln -s /path/to/new/place $HOME/.mtdata
性能优化技巧
- 使用
mtdata cache -j <jobs> ...
通过指定的作业数并行下载多个数据集 - 使用
--compress
标志mtdata get|get-recipe
来保持数据集压缩。 - mtdata默认使用
pigz
来处理压缩文件(强烈建议安装pigz
)。如果你想禁用pigz,请设置export USE_PIGZ=0
运行测试
测试位于tests/目录中。要运行所有测试
python -m pytest
开发者与贡献者
请参阅 - https://github.com/thammegowda/mtdata/graphs/contributors
引用
https://aclanthology.org/2021.acl-demo.37/
@inproceedings{gowda-etal-2021-many,
title = "Many-to-{E}nglish Machine Translation Tools, Data, and Pretrained Models",
author = "Gowda, Thamme and
Zhang, Zhao and
Mattmann, Chris and
May, Jonathan",
booktitle = "Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations",
month = aug,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.acl-demo.37",
doi = "10.18653/v1/2021.acl-demo.37",
pages = "306--316",
}
数据集免责声明
本工具用于下载和准备公共数据集。我们不托管或分发这些数据集,也不保证其质量或公平性,也不对使用这些数据集的许可做出任何声明。确定您是否拥有在数据集许可下使用数据集的权限是您的责任。我们要求所有使用此工具的用户引用数据集的原始创作者,这些创作者可能通过以下命令获取:mtdata list -n <NAME> -l <L1-L2> -full
。
如果您是数据集所有者并希望更新其任何部分(描述、引用等),或不想将您的数据集包含在此库中,请通过GitHub问题与我们联系。感谢您为机器学习社区做出的贡献!
项目详情
下载文件
下载适合您平台的自定义文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
mtdata-0.4.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4e276b48134224dfa70f6e57fb925a4cb97f7908f06e802ca90e6eeeba9b2501 |
|
MD5 | ae3145f864346663a59c79d8dd802836 |
|
BLAKE2b-256 | 7b972b84d291a5cb277ebef3ab62af7d77edbb1baba9a287833c67a449d4aa57 |
mtdata-0.4.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5a54e92929341752a11b071908ea3745fab6c7e48f8ac8ed50c92ba1230400a7 |
|
MD5 | 63fd55981cece9d6f0c189e782a4efa0 |
|
BLAKE2b-256 | 38c85f7a91d97bd43f9ca07ed096791890dbcc7a9ab698007444a08e341d065b |