Snorkel:自动编写多个标签函数



我的目标是使用比逐个编写更优雅的方式创建N个标记函数(snorkel包中的LFs)。因为我希望有更多的单一正则表达式被引用,我想找到一种方法来更自动地做到这一点。下面是我的用例。

@labeling_function() 
def regex_give(x):
return FEATURE if re.search(r"give", x, flags=re.I) else ABSTAIN
@labeling_function()
def regex_note(x):
return FEATURE if re.search(r"note", x, flags=re.I) else ABSTAIN   
@labeling_function()
def regex_pay(x):
return FEATURE if re.search(r"pay", x, flags=re.I) else ABSTAIN
lfs = [regex_give, regex_note, regex_pay]
applier = LFApplier(lfs=lfs)
L_train = applier.apply(df.text)
LFAnalysis(L=L_train, lfs=lfs).lf_summary(df.feat_flg)

是否有任何方法来定义这样的标签函数在for循环或使用任何不同的方法?

我使用以下教程:https://www.snorkel.org/use-cases/01-spam-tutorial#4-combining-labeling-function-outputs-with-the-label-model.

最简单的方法可能是创建工厂函数:

def factory(regex):
@labeling_function()
def regex_labeler(x):
return FEATURE if re.search(regex, x, flag=re.I) else ABSTAIN
return regex_labeler
label_funcs = [factory(i) for i in [r"pay", r"give", r"note"]]

这种方法的主要问题是你失去了函数名的一些可解释性,除非你把从工厂返回的值赋给一个更有意义的命名变量。

give_func = factory(r"give")
# etc...

最新更新