【问题标题】:General frameworks for preparing training data? [closed]准备训练数据的通用框架? [关闭]
【发布时间】:2011-01-05 04:17:13
【问题描述】:

作为计算语言学的学生,我经常进行机器学习实验,我必须从各种不同的资源(例如原始或带注释的文本语料库或句法树库)中准备训练数据。对于每一项新任务和每一项新实验,我都会编写程序(通常使用 Python,有时使用 Java)来提取我需要的特征和值,并将数据从一种格式转换为另一种格式。这通常会导致大量非常大的文件和大量处理它们的小程序,以获取某些机器学习框架的输入(例如 Weka 的 arff 文件)。

需要非常有条理地组织来处理这个问题,并且非常小心地进行编程,以免错过大量数据中的任何重要特性、异常或错误。许多好的软件设计原则,如设计模式或重构范式,对这些任务没有多大用处,因为安全性、可维护性或可持续性等事情并不重要——一旦程序成功处理了数据,就不再需要它了。到目前为止,我什至不再为在我的 Python 代码和程序中以简单的程序方式使用类或函数而烦恼。下一个实验将需要具有独特特征和不同格式的不同数据集,因此它们的准备工作可能不得不从头开始编程。到目前为止,我的经验是,将项目 80-90% 的时间花在准备训练数据的任务上并不罕见。只考虑如何从一种数据格式转换为另一种数据格式,就这样一天天过去了。有时,这会变得非常令人沮丧。

嗯,你可能猜到我有点夸张,甚至是故意的,但我很肯定你明白我想说什么。实际上,我的问题是这样的:

是否有任何通用框架、架构和最佳实践来处理这些任务?在优化设计的情况下,我可以期望我编写的代码有多少是可重用的?

【问题讨论】:

  • 根据我在研究生院的经历,我认为这一点也不夸张。 :P

标签: machine-learning nlp code-reuse training-data


【解决方案1】:

我发现自己主要使用来自 GNU coreutils 的 textutils 和 flex 进行语料库准备,将事物链接在简单的脚本中,至少当我需要做的准备工作足够简单时,可以使用正则表达式和微不足道的过滤等。

仍然可以使事物可重用,一般规则也适用于此。如果您在编程时不考虑最佳实践等,而只是按程序进行编程,恕我直言,难怪在开始一个新项目时您必须从头开始做所有事情。

尽管格式要求会有很大差异,但仍有许多常见任务,即。标签剥离,标签翻译,选择,制表,一些琐碎的数据收集,例如令牌的数量,句子等。对这些旨在实现高可重用性的任务进行编程将获得回报,即使一开始需要更长的时间。

【讨论】:

    【解决方案2】:

    我不知道有任何这样的框架——并不意味着它们不存在。我更喜欢使用我自己的,它只是我随着时间的推移改进/调整/借用的代码 sn-ps 的集合,并且我可以根据问题以各种配置链接在一起。如果您已经了解 python,那么我强烈建议您在 NumPy 中处理所有数据准备——如您所知,ML 数据集往往很大——成千上万的行向量包含浮点数。 NumPy 在这类事情上非常出色。此外,我可能会建议,在为 ML 准备训练数据时,几乎每一次这样的工作都会出现一些任务,并且从一个问题到下一个问题并没有太大的不同。我在下面为您提供了这些的 sn-ps。

    规范化(缩放和平均中心化您的数据以避免过度加权。我相信您知道,您可以缩放 -1 到 1 或 0 到 1。我通常选择后者,以便我可以利用稀疏模式。在 python 中,使用 NumPy 库:

    import numpy as NP
    data = NP.linspace( 1, 12, 12).reshape(4, 3)
    data_norm = NP.apply_along_axis( lambda x : (x - float(x.min())) / x.max(), 
                                                 0, data )
    

    交叉验证(这里我将默认参数设置为“5”,因此测试集为 5%,训练集为 95%——将其放入函数中会产生 k-fold更简单)

    def divide_data(data, testset_size=5) :
      max_ndx_val = data.shape[0] -1
      ndx2 = NP.random.random_integers(0, max_ndx_val, testset_size)
      TE = data_rows[ndx2]
      TR = NP.delete(data, ndx2, axis=0)
      return TR, TE
    

    最后,这是一个出色的case study(恕我直言),既清晰又完整,从字面上显示了从原始数据收集到输入到 ML 算法(在本例中为 MLP)的整个过程。他们还提供了代码。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 2019-09-30
      • 2020-04-29
      • 2014-11-15
      • 2017-10-26
      • 2015-12-16
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多