组织/存储大量数据集的好方法

数据挖掘 数据集 机器翻译 最佳实践 数据管理
2021-09-22 02:40:44

在机器翻译中,我们经常有双语数据集,例如德语-英语和法语-英语,我们会有如下所示的内容:

/en-de
   train.de
   train.en
   dev.de
   dev.en
   test.de
   test.en

/en-fr
   train.fr
   train.en
   dev.fr
   dev.en
   test.fr
   test.en

然后我们有第三种语言对德语-法语,我们将有:

/de-fr
   train.fr
   train.de
   dev.fr
   dev.de
   test.fr
   test.de

但是假设我们添加西班牙语-英语,我们会得到:

/en-es
   train.es
   train.en
   dev.es
   dev.en
   test.es
   test.en

/de-es
   train.es
   train.de
   dev.es
   dev.de
   test.es
   test.de

/fr-es
   train.es
   train.fr
   dev.es
   dev.fr
   test.es
   test.fr

如果我们添加更多的语言,这些语言对会变得更加乏味。

train.*存储,dev.*test.*文件的良好数据结构/目录组织是什么?

3个回答

在这种规模下,grep速度已经足够快,因此只需将文件的形状便于最常见的搜索类型即可。

在 ModelFront,我们使用并推荐线性 TSV,因为 TSV 在 bash 中具有一流的支持。

https://modelfront.com/docs/eval/#linear-tsv解释了标准以及为什么它如此自然地适合机器翻译数据:

对于自然语言文本数据,尤其是并行数据,TSV 与 CSV 和 XML 相比具有关键优势。

人类可读性

...

标准化

...

可扩展性

ModelFront 旨在处理非常大的文件。TSV 可以逐行读取 - 无需将整个文件读入内存。TSV 也比 CSV 或 XML 更紧凑。

方便

内置的命令行工具默认喜欢读写TSV,基本上在行级别上运行cutpaste

因此,我们不会将句子对(或其元数据)拆分到多个对齐的文件中——这很笨拙并且会带来麻烦。

但是我们每个文件只有一个语言对和数据集 - 我们在文件名中注明了这些 - 而不是使用额外的列,因为通常这是您要搜索的级别。

并且始终可以进行多次搜索,find或者cat如果您想跨语言对和数据集进行搜索。

(我们显然不使用 XML,我们很失望 WMT 不仅选择了 XML,还选择了另一种非标准化的 XML 格式。)

所以你的例子最终会是这样的:

en.de.train.tsv
en.de.dev.tsv
en.de.test.tsv
en.fr.train.tsv
...

文件系统在一定程度上足以存储数据。随着数据变得越来越复杂,迁移到数据库通常是有意义的。

关系数据库将允许数据库规范化,为每个实体存储单个规范值。这将大大减少数据的大小,并允许训练、开发和测试数据集的不同组合。

多语言的数据结构可能有点令人厌烦和重复,尤其是在数据结构不正确的情况下。

假设数据的内容en在其他语言中是相同的en-es, en-fr, en-de. 换句话说,train.en在 中是相同的en-esen-fr并且en-de

考虑词你好:

  • 英语(zh) 它的你好
  • 西班牙语其 Hola
  • 法语(fr)它的 Bonjour
  • 德语(de)它的 Guten 标签

这种数据结构在不同的环境train.*中是最简单的dev.*test.* 可以适应其他新语言的翻译

     /train
       en
       es
       fr
       de

      /dev
       en
       es
       fr
       de

     /test
       en
       es
       fr
       de

cn-es只需在此数据结构中添加中文翻译,就可以简化新的中文到西班牙文翻译。

     \train
       en
       es
       fr
       de
       cn