mtdata是一个下载用于机器翻译的数据集的工具

mtdata的Python项目详细描述


MTData公司

MTData工具自动收集和准备机器翻译研究的数据集。 它提供了CLI和PythonAPI,因此可以作为独立工具使用或嵌入到 用于准备MT实验的python应用程序。在

这个工具知道:

  • 从何处下载数据集:WMT测试和开发[2014,2015。。。2020年],Pararcrawl, Europarl,新闻评论,维基标题,Tilde模型语料库。。。在
  • 如何提取文件:.tar。焦油gz,.tgz,.zip。。。在
  • 如何解析.tmx、.sgm和这样的xml或.tsv。。。检查它们是否具有相同数量的段。在
  • 并行数据是在一个.tsv文件中还是在两个sgm文件中。在
  • 数据是用gz、xz压缩还是完全不压缩。在
  • 源目标的顺序是否相同,或者是否与目标源顺序交换。在
  • 如何将代码映射到ISO语言代码!使用iso639_3,它可以容纳7000多种语言。在
  • 只下载一次并将文件保存在本地缓存中。在
  • (随着时间的推移,还会有更多这样的小细节。)

MTData是为了:

  • 通过人工干预自动创建机器翻译培训数据。受SacreBLEU的启发,在评估阶段进行了人为干预。在
  • 一个可重用的工具,而不是分布在多个回购中的几十个一次性使用的shell脚本。在

限制条件:

  • 只支持不需要登录的公共可用数据集。还没有最不发达国家。在
  • 没有集成标记器。(将这些集成起来应该相当容易)

安装

# from the source code on github 
git clone https://github.com/thammegowda/mtdata 
cd mtdata
pip install --editable .

# from pypi 
pip install mtdata  

当前状态:

这些是来自不同来源的数据集摘要(更新日期:2020年5月10日)。 这个列表是不完整的,应该被看作是开始。 在这里,我(/TG)选择了一些我在工作中使用的常用数据集-欢迎您添加更多!在

Source# of datasets
Statmt355
Paracrawl30
Tilde519
OPUS$153,351
OPUS100v1302
JW300$244,663
GlobalVoices 2018Q4812
Joshua Indian Corpus29
UnitedNations$330
WikiMatrix1,617
Neulab_TEDTalksv14,455
Other7
--------
Total106,140
  • $1-OPUS包含来自其他列出来源的重复条目,但它们通常是旧版本的语料库。在
  • $2-JW300也从OPUS中检索到,但是由于规模和内部格式的不同,处理方式有所不同。在
  • $3-仅包含测试集

CLI使用

  • 在安装pip之后,可以使用mtdata命令或python -m mtdata调用CLI
  • 有两个子命令:list用于列出数据集,get用于获取数据集

mtdata list

列出此工具已知的数据集。在

^{pr2}$
# List everything
mtdata list

# List a lang pair 
mtdata list -l deu-eng

# List a dataset by name(s)
mtdata list -n europarl_v9
mtdata list -n europarl_v9 news_commentary_v14

# list by both language pair and dataset name
mtdata list -l deu-eng -n europarl_v9 news_commentary_v14 newstest201{4,5,6,7,8,9}_deen

# get citation of a dataset (if available in index.py)
mtdata list -l deu-eng -n newstest2019_deen --full

mtdata get

此命令将由语言名称指定的数据集下载到一个目录中。 您必须为--train--test参数做出明确的选择

mtdata get -h
usage: mtdata get [-h] -l L1-L2 [-tr [NAME [NAME ...]]][-tt [NAME [NAME ...]]] -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)
  -tr [NAME [NAME ...]], --train [NAME [NAME ...]]
                        Names of datasets separated by space, to be used for *training*.
                          e.g. -tr news_commentary_v14 europarl_v9 .
                          All these datasets gets concatenated into one big file.
                           (default: None)
  -tt [NAME [NAME ...]], --test [NAME [NAME ...]]
                        Names of datasets separated by space, to be used for *testing*.
                          e.g. "-tt newstest2018_deen newstest2019_deen".
                        You may also use shell expansion if your shell supports it.
                          e.g. "-tt newstest201{8,9}_deen."(default: None)
  -o OUT, --out OUT     Output directory name (default: None)

示例

查看deu-eng有哪些数据集可用

$ mtdata list -l deu-eng  # see available datasets
    europarl_v9	deu-eng	http://www.statmt.org/europarl/v9/training/europarl-v9.deu-eng.tsv.gz
    news_commentary_v14	deu-eng	http://data.statmt.org/news-commentary/v14/training/news-commentary-v14.deu-eng.tsv.gz
    wiki_titles_v1	deu-eng	http://data.statmt.org/wikititles/v1/wikititles-v1.deu-eng.tsv.gz
    wiki_titles_v2	deu-eng	http://data.statmt.org/wikititles/v2/wikititles-v2.deu-eng.tsv.gz
    newstest2014_deen	deu-eng	http://data.statmt.org/wmt20/translation-task/dev.tgz	dev/newstest2014-deen-src.de.sgm,dev/newstest2014-deen-ref.en.sgm
    newstest2015_ende	en-de	http://data.statmt.org/wmt20/translation-task/dev.tgz	dev/newstest2015-ende-src.en.sgm,dev/newstest2015-ende-ref.de.sgm
    newstest2015_deen	deu-eng	http://data.statmt.org/wmt20/translation-task/dev.tgz	dev/newstest2015-deen-src.de.sgm,dev/newstest2015-deen-ref.en.sgm
    ...[truncated]

获取这些数据集并存储在目录deu-eng

$ mtdata get --langs deu-eng --train europarl_v10 wmt13_commoncrawl news_commentary_v14 --test newstest201{4,5,6,7,8,9}_deen --out deu-eng
    # ...[truncated]   
    INFO:root:Train stats:
    {"total": 4565929,
      "parts": {"wmt13_commoncrawl": 2399123,
        "news_commentary_v14": 338285,
        "europarl_v10": 1828521}}
    INFO:root:Dataset is ready at deu-eng

要在将来或由其他人复制此数据集,请参阅<out-dir>>/mtdata.signature.txt

$ cat deu-eng/mtdata.signature.txt
mtdat get -l deu-eng -tr europarl_v10 wmt13_commoncrawl news_commentary_v14 -ts newstest2014_deen newstest2015_deen newstest2016_deen newstest2017_deen newstest2018_deen newstest2019_deen -o <out-dir>
mtdata version 0.1.1

看看上面的命令完成了什么:

$ find  deu-eng -type f | sort  | xargs wc -l
    3003 deu-eng/tests/newstest2014_deen.deu
    3003 deu-eng/tests/newstest2014_deen.eng
    2169 deu-eng/tests/newstest2015_deen.deu
    2169 deu-eng/tests/newstest2015_deen.eng
    2999 deu-eng/tests/newstest2016_deen.deu
    2999 deu-eng/tests/newstest2016_deen.eng
    3004 deu-eng/tests/newstest2017_deen.deu
    3004 deu-eng/tests/newstest2017_deen.eng
    2998 deu-eng/tests/newstest2018_deen.deu
    2998 deu-eng/tests/newstest2018_deen.eng
    2000 deu-eng/tests/newstest2019_deen.deu
    2000 deu-eng/tests/newstest2019_deen.eng
 1828521 deu-eng/train-parts/europarl_v10.deu
 1828521 deu-eng/train-parts/europarl_v10.eng
  338285 deu-eng/train-parts/news_commentary_v14.deu
  338285 deu-eng/train-parts/news_commentary_v14.eng
 2399123 deu-eng/train-parts/wmt13_commoncrawl.deu
 2399123 deu-eng/train-parts/wmt13_commoncrawl.eng
 4565929 deu-eng/train.deu
 4565929 deu-eng/train.eng

ISO 639 3标准

在内部,所有语言代码都映射到ISO-639 3代码。 可以使用python -m mtdata.iso 检查映射

$ python -m mtdata.iso -h
usage: python -m mtdata.iso [-h][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# list all 7000+ languages and their 3 letter codes
$ python -m mtdata.iso 
...

# lookup codes for some languages
$ python -m 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

如何扩展、修改或贡献:

请通过向^{}模块添加缺少的+个新数据集来帮助增长数据集。 下面是一个列出europarl-v9语料库的示例。 注意:诸如deen等语言代码将在内部映射到3个字母的ISO代码deueng

frommtdata.indeximportINDEXasindex,EntryEUROPARL_v9='http://www.statmt.org/europarl/v9/training/europarl-v9.%s-%s.tsv.gz'forpairin['de en','cs en','cs pl','es pt','fi en','lt en']:l1,l2=pair.split()index.add_entry(Entry(langs=(l1,l2),name='europarl_v9',url=EUROPARL_v9%(l1,l2)))

如果数据集在归档文件中,例如zip或{}

frommtdata.indeximportINDEXasindex,Entrywmt_sets={'newstest2014':[('de','en'),('cs','en'),('fr','en'),('ru','en'),('hi','en')],'newsdev2015':[('fi','en'),('en','fi')]}forset_name,pairsinwmt_sets.items():forl1,l2inpairs:src=f'dev/{set_name}-{l1}{l2}-src.{l1}.sgm'ref=f'dev/{set_name}-{l1}{l2}-ref.{l2}.sgm'name=f'{set_name}_{l1}{l2}'index.add_entry(Entry((l1,l2),name=name,filename='wmt20dev.tgz',in_paths=[src,ref],url='http://data.statmt.org/wmt20/translation-task/dev.tgz'))# filename='wmt20dev.tgz' -- is manually set, because url has dev.gz that can be confusing# in_paths=[src, ref]  -- listing two sgm files inside the tarball# in_ext='sgm' will be auto detected fropm path. set in_ext='txt' to explicitly set format as plain text 

{a4,参考^或} statmt示例。在

如果数据集有引用,请含deu在

cite=r"""bib tex here""Entry(... cite=cite)

要添加自定义解析器或文件处理程序,请查看^{}^{},用于处理不受支持的新存档/文件类型。在

开发商:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java允许具有不同父类的类扩展类,而无需多重继承   java如何创建动态化的JScrollPane w/JPanel作为客户端?   java如何组织和命名包   在Java中读取属性文件   java无法解释的Android意图行为   在Java中动态执行多个BPEL文件的部署   ssl Java 6 SNI(服务器名称指示)?   java我们可以使用Robot框架自动化web和移动应用程序来执行并行执行   java for star pettern的循环   java为什么BinaryReader在线程中,从netty读取错误的数据包?   在java中将华氏度转换为摄氏度   使用Spark和java处理空值和引号编写CSV文件   Java中已排序日期到块的列表   visual studio代码VSCode Java不是linting或自动完成局部变量,而是自动完成Java快捷方式,如“sysout”