跳转到主要内容

mtdata是下载机器翻译数据集的工具

项目描述

MTData

image Travis (.com)

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
Facebook 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

用例

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:版本名称
  • lang1lang2是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以来

食谱是一组指定用于训练、开发和测试的数据集,旨在提高实验的可重复性。食谱从

  1. 默认:从源代码的mtdata/recipe/recipes.yml
  2. 缓存目录:$MTDATA/mtdata.recipes.yml,其中$MTDATA默认为~/.mtdata
  3. 当前目录:所有匹配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.isomtdata-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

如何贡献

更改缓存目录

默认的缓存目录是$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 (801.3 kB 查看哈希值)

上传时间

构建分发

mtdata-0.4.2-py3-none-any.whl (819.7 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面