将 NLP 语料库存储在数据库而不是 csv 中?
Storing NLP corpora in databases rather than csv?
在实现 NLP 系统时,我想知道为什么 CSV 文件经常用于存储学术界的文本语料库和常见的 Python 示例(特别是:基于 NLTK 的)。我个人 运行 遇到了一些问题,使用一个自动生成大量语料库并稍后访问它们的系统。
这些问题来自 CSV files
:
- 难以自动备份
- 难以确保可用性
- 潜在的 t运行saction 竞争和线程访问问题
- 难以 distribute/shard 跨越多个服务器
- 如果语料库变得复杂,模式不清晰或未定义
- 通过文件名访问是有风险的。它可以被改变。
- 文件损坏可能
- 通常不用于文件访问的细粒度权限
使用 MySQL
或 MongooseDB
的问题:
- 初始设置,保持专用服务器 运行 数据库实例在线
- 需要花时间创建和定义架构
CSV 的优点:
- 理论上更容易自动压缩和解压缩内容
- 一些程序员更熟悉
- 更容易通过 FTP 甚至电子邮件
转运行 给另一位学术研究人员
查看多篇学术文章,即使在更高级的 NLP 研究中,例如进行命名实体识别或语句提取,研究似乎也使用 CSV。
CSV 格式是否还有其他优势使其得到如此广泛的应用?工业系统应该用什么?
我将答案分为两部分:
为什么选择 CSV:
nlp 任务的数据集,无论是分类还是序列注释,语料库中的每个训练实例基本上都需要两件事:
- 要注释的文本(可能是单个标记、句子或文档)和可选的预提取特征。
- 对应labels/tag.
由于这种简单的表格数据组织在不同的 NLP 问题中是一致的,因此 CSV 是一个自然的选择。 CSV 易于学习、易于解析、易于序列化并且易于包含不同的编码和语言。 CSV 很容易与 Python(这是 NLP 最主要的)一起使用,并且有像 Pandas 这样的优秀库,这使得操作和重新组织数据变得非常容易。
为什么不用数据库
数据库实在是太过分了。 NLP 模型总是离线训练的,也就是说,你一次将所有数据拟合到一个 ML/DL 模型中。没有并发问题。训练期间存在的唯一并行性是在 GPU 内部管理的。训练期间没有安全问题:您在机器上训练模型,并且只在服务器中部署训练好的模型。
在实现 NLP 系统时,我想知道为什么 CSV 文件经常用于存储学术界的文本语料库和常见的 Python 示例(特别是:基于 NLTK 的)。我个人 运行 遇到了一些问题,使用一个自动生成大量语料库并稍后访问它们的系统。
这些问题来自 CSV files
:
- 难以自动备份
- 难以确保可用性
- 潜在的 t运行saction 竞争和线程访问问题
- 难以 distribute/shard 跨越多个服务器
- 如果语料库变得复杂,模式不清晰或未定义
- 通过文件名访问是有风险的。它可以被改变。
- 文件损坏可能
- 通常不用于文件访问的细粒度权限
使用 MySQL
或 MongooseDB
的问题:
- 初始设置,保持专用服务器 运行 数据库实例在线
- 需要花时间创建和定义架构
CSV 的优点: - 理论上更容易自动压缩和解压缩内容 - 一些程序员更熟悉 - 更容易通过 FTP 甚至电子邮件
转运行 给另一位学术研究人员查看多篇学术文章,即使在更高级的 NLP 研究中,例如进行命名实体识别或语句提取,研究似乎也使用 CSV。
CSV 格式是否还有其他优势使其得到如此广泛的应用?工业系统应该用什么?
我将答案分为两部分:
为什么选择 CSV:
nlp 任务的数据集,无论是分类还是序列注释,语料库中的每个训练实例基本上都需要两件事:
- 要注释的文本(可能是单个标记、句子或文档)和可选的预提取特征。
- 对应labels/tag.
由于这种简单的表格数据组织在不同的 NLP 问题中是一致的,因此 CSV 是一个自然的选择。 CSV 易于学习、易于解析、易于序列化并且易于包含不同的编码和语言。 CSV 很容易与 Python(这是 NLP 最主要的)一起使用,并且有像 Pandas 这样的优秀库,这使得操作和重新组织数据变得非常容易。
为什么不用数据库
数据库实在是太过分了。 NLP 模型总是离线训练的,也就是说,你一次将所有数据拟合到一个 ML/DL 模型中。没有并发问题。训练期间存在的唯一并行性是在 GPU 内部管理的。训练期间没有安全问题:您在机器上训练模型,并且只在服务器中部署训练好的模型。