将 NLP 语料库存储在数据库而不是 csv 中?

Storing NLP corpora in databases rather than csv?

在实现 NLP 系统时,我想知道为什么 CSV 文件经常用于存储学术界的文本语料库和常见的 Python 示例(特别是:基于 NLTK 的)。我个人 运行 遇到了一些问题,使用一个自动生成大量语料库并稍后访问它们的系统。

这些问题来自 CSV files: - 难以自动备份 - 难以确保可用性 - 潜在的 t运行saction 竞争和线程访问问题 - 难以 distribute/shard 跨越多个服务器 - 如果语料库变得复杂,模式不清晰或未定义 - 通过文件名访问是有风险的。它可以被改变。 - 文件损坏可能 - 通常不用于文件访问的细粒度权限

使用 MySQLMongooseDB 的问题: - 初始设置,保持专用服务器 运行 数据库实例在线 - 需要花时间创建和定义架构

CSV 的优点: - 理论上更容易自动压缩和解压缩内容 - 一些程序员更熟悉 - 更容易通过 FTP 甚至电子邮件

转运行 给另一位学术研究人员

查看多篇学术文章,即使在更高级的 NLP 研究中,例如进行命名实体识别或语句提取,研究似乎也使用 CSV。

CSV 格式是否还有其他优势使其得到如此广泛的应用?工业系统应该用什么?

我将答案分为两部分:

为什么选择 CSV:

nlp 任务的数据集,无论是分类还是序列注释,语料库中的每个训练实例基本上都需要两件事:

  1. 要注释的文本(可能是单个标记、句子或文档)和可选的预提取特征。
  2. 对应labels/tag.

由于这种简单的表格数据组织在不同的 NLP 问题中是一致的,因此 CSV 是一个自然的选择。 CSV 易于学习、易于解析、易于序列化并且易于包含不同的编码和语言。 CSV 很容易与 Python(这是 NLP 最主要的)一起使用,并且有像 Pandas 这样的优秀库,这使得操作和重新组织数据变得非常容易。

为什么不用数据库

数据库实在是太过分了。 NLP 模型总是离线训练的,也就是说,你一次将所有数据拟合到一个 ML/DL 模型中。没有并发问题。训练期间存在的唯一并行性是在 GPU 内部管理的。训练期间没有安全问题:您在机器上训练模型,并且只在服务器中部署训练好的模型。