如何解决数据解析和功能工程管道的设计模式
我知道这个问题过去曾在这些委员会上问过几次,但我有一个更通用的版本,将来可能也适用于其他人的项目。
简而言之-我正在构建一个ML系统(使用Python,但是在这种情况下,语言选择不是很关键),它在一系列操作的结尾处具有ML模型:
- 数据上传
- 数据解析
- 特征工程
- 特征工程(与上一步逻辑框不同)
- 功能工程(与上一步骤的逻辑框不同)
...(类似于最后3个步骤的更多步骤)
- 数据传递给ML模型
以上每个步骤都有其自己必须执行的一系列操作,以构建适当的输出,然后将其用作下一个输入,依此类推。这些子步骤又可以是完全彼此分离,或者其中某些步骤可能需要在该大步骤中执行一些步骤才能首先完成,以产生以下步骤使用的数据。 现在,我需要构建一个自定义管道,这将使在不破坏现有步骤的前提下(无论大小)向混合添加新步骤变得非常容易。
到目前为止,我已经从架构的角度了解了这种概念,如下所示:
在查看此体系结构时,我立即想到了责任链设计模式,该模式管理BIG STEP(1、2,...,n),并且每个BIG STEP都有自己的小版本Chain责任发生在他们的胆量之内,这对于NO_REQ步骤而言是独立发生的,然后对于REQ步骤则是独立发生的(REQ步骤不断循环直至完成)。有了一个共享的接口,可以在大大小小的步骤中运行逻辑,它可能会相当整齐地运行。
但是,我想知道是否还有更好的方法?此外,我对责任链不满意的是,这将需要一个人添加新的BIG / SMALL步骤,始终编辑设置步骤包的逻辑“要点”,以手动包括新添加的步骤。我想构建一些东西,取而代之的是,它只扫描每个BIG STEP下特定于步骤的文件夹,并自行构建NO_REQ和REQ步骤的列表(以支持“打开/关闭SOLID”原则)。
如果有任何想法我将不胜感激。
解决方法
最近我做了类似的事情。挑战在于如何轻松地将“步骤”插入而无需进行太多更改。所以,我所做的是,如下所示。核心思想是定义接口的“过程”并修复输入和输出格式。
代码:
class Factory:
def process(self,input):
raise NotImplementedError
class Extract(Factory):
def process(self,input):
print("Extracting...")
output = {}
return output
class Parse(Factory):
def process(self,input):
print("Parsing...")
output = {}
return output
class Load(Factory):
def process(self,input):
print("Loading...")
output = {}
return output
pipeline = {
"Extract" : Extract(),"Parse" : Parse(),"Load" : Load(),}
input_data = {} #vanilla input
for process_name,process_instance in pipeline.items():
output = process_instance.process(input_data)
input_data = output
输出:
Extracting...
Parsing...
Loading...
因此,如果您需要在解析后添加一个“步骤”,“ append_headers”,那么您要做的就是
#Defining a new step.
class AppendHeaders(Factory):
def process(self,input):
print("adding headers...")
output = {}
return output
pipeline = {
"Extract" : Extract(),"Append headers": AppendHeaders(),#adding a new step
"Parse" : Parse(),}
新输出:
Extracting...
adding headers...
Parsing...
Loading...
在您可能需要扫描特定文件夹以查找REQ / NOT_REQ的情况下的附加要求,可以将其作为json中的字段添加并加载到管道中,这意味着仅在将标志设置为REQ的情况下才创建那些“步骤”对象
不确定这个想法有多大帮助。想,我会传达我的想法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。