fer*_*nko 7 code-reuse nlp machine-learning training-data
作为计算语言学的学生,我经常进行机器学习实验,我必须从各种不同的资源准备训练数据,如原始或注释文本语料库或语法树库.对于每个新任务和每个新实验,我编写程序(通常使用Python,有时是Java)来提取我需要的功能和值,并将数据从一种格式转换为另一种格式.这通常导致非常大量的非常大的文件和大量的小程序处理它们以获得某些机器学习框架的输入(如Weka的arff文件).
人们需要非常有条理地处理这个问题和计划,并且要小心谨慎,不要错过大量数据中的任何重要特性,例外或错误.良好的软件设计原则,如设计模式或重构范例,对于这些任务来说并不是很重要,因为安全性,可维护性或可持续性等问题并不重要 - 一旦程序成功处理了数据,就不再需要它了.到目前为止,我甚至已经停止了在Python代码和程序中使用类或函数的简单程序方式.下一个实验将需要具有独特特征和不同格式的不同数据集,以便无论如何都可能必须从头开始编程.到目前为止,我的经历是' 将80-90%的项目时间花在准备培训数据的任务上并不罕见.小时和日子只考虑如何从一种数据格式到另一种数据格式.有时,这可能会变得非常令人沮丧.
好吧,你可能猜到我有点夸张,甚至有目的,但我很肯定你理解我想说的话.实际上,我的问题是:
是否有任何通用框架,架构,最佳实践来处理这些任务?在优化设计的情况下,我希望能够重复使用多少代码?
小智 2
我发现自己主要使用 GNU coreutils 和 flex 中的 textutils 来准备语料库,将事物链接到简单的脚本中,至少当我需要做的准备对于正则表达式和琐碎的过滤等来说足够简单时。
仍然可以使东西可重用,一般规则也适用于此。如果您在编程时不考虑最佳实践等,而只是按程序进行编程,那么在开始新项目时,您必须从头开始做所有事情,恕我直言,这真的不足为奇。
尽管格式要求会有很大差异,但仍然有许多常见任务,即。标签剥离、标签翻译、选择、制表、一些琐碎的数据收集,例如标记数量、句子等。为实现高可重用性而对这些任务进行编程将会得到回报,尽管一开始需要更长的时间。