ExpandColumns¶
将包含列表的列展开为多行。
ExpandColumns
是一个 Step
,它接受一个列列表,并将它们展开为多行。新行将具有与原始行相同的数据,但展开的列除外,该列将包含原始列表中的单个项目。
属性¶
-
columns: 一个字典,将要展开的列映射到新列名或要展开的列列表。如果提供了列表,则新列名将与列名相同。
-
encoded: 一个布尔值,用于告知列是否为 JSON 编码列表。如果此值设置为 True,则将在展开之前解码列。或者,要指定可以编码的列,可以提供列表。在这种情况下,告知的列名必须是要选择展开的列的子集。
-
split_statistics: 一个布尔值,用于告知是否应将
distilabel_metadata
列中的统计信息拆分为多行。如果我们想展开一些包含字符串列表的列,这些字符串列表来自解析 LLM 的输出,则应拆分distilabel_metadata
列的statistics_{step_name}
中的 tokens,以避免在之后聚合数据时将它们相乘。例如,对于一个应该生成 N 条指令列表的任务,并且我们希望每 N 条指令都在不同的行中,我们应该将统计信息除以 N 进行拆分。在这种情况下,将此值设置为 True。
输入和输出列¶
graph TD
subgraph Dataset
subgraph Columns
ICOL0[dynamic]
end
subgraph New columns
OCOL0[dynamic]
end
end
subgraph ExpandColumns
StepInput[Input Columns: dynamic]
StepOutput[Output Columns: dynamic]
end
ICOL0 --> StepInput
StepOutput --> OCOL0
StepInput --> StepOutput
输入¶
- dynamic (由
columns
属性确定): 要展开为多行的列。
输出¶
- dynamic (由
columns
属性确定): 展开的列。
示例¶
将选定的列展开为多行¶
from distilabel.steps import ExpandColumns
expand_columns = ExpandColumns(
columns=["generation"],
)
expand_columns.load()
result = next(
expand_columns.process(
[
{
"instruction": "instruction 1",
"generation": ["generation 1", "generation 2"]}
],
)
)
# >>> result
# [{'instruction': 'instruction 1', 'generation': 'generation 1'}, {'instruction': 'instruction 1', 'generation': 'generation 2'}]
展开 JSON 编码的选定列为多行¶
from distilabel.steps import ExpandColumns
expand_columns = ExpandColumns(
columns=["generation"],
encoded=True, # It can also be a list of columns that are encoded, i.e. ["generation"]
)
expand_columns.load()
result = next(
expand_columns.process(
[
{
"instruction": "instruction 1",
"generation": '["generation 1", "generation 2"]'}
],
)
)
# >>> result
# [{'instruction': 'instruction 1', 'generation': 'generation 1'}, {'instruction': 'instruction 1', 'generation': 'generation 2'}]
展开选定的列,并拆分 distilabel_metadata
列中的统计信息¶
from distilabel.steps import ExpandColumns
expand_columns = ExpandColumns(
columns=["generation"],
split_statistics=True,
)
expand_columns.load()
result = next(
expand_columns.process(
[
{
"instruction": "instruction 1",
"generation": ["generation 1", "generation 2"],
"distilabel_metadata": {
"statistics_generation": {
"input_tokens": [12],
"output_tokens": [12],
},
},
}
],
)
)
# >>> result
# [{'instruction': 'instruction 1', 'generation': 'generation 1', 'distilabel_metadata': {'statistics_generation': {'input_tokens': [6], 'output_tokens': [6]}}}, {'instruction': 'instruction 1', 'generation': 'generation 2', 'distilabel_metadata': {'statistics_generation': {'input_tokens': [6], 'output_tokens': [6]}}}]