我想训练测试拆分具有关联实体的文本列表,因此没有实体重叠拆分。
确保没有重叠是一项挑战,我目前通过 2 次groupby
操作来实现。我想知道如何减轻这些groupby
操作造成的内存瓶颈,或者是否有更清洁的方法来完成整个过程。
输入
ENTITIES TEXT
e1 TextA
e1, e2 TextB
e3 TextC
我想要输出:
火车分裂
ENTITIES TEXT
e1 TextA
e1, e2 TextB
测试拆分
ENTITIES TEXT
e3 TextC
我的方法
初始groupby
实体:
e1 [{"text":"TextA", "entities":["e1"]}, {"text":"TextB", "entities":["e1","e2"]}]
e2 [{"text":"TextB", "entities":["e1","e2"]}]
e3 [{"text":"TextC", "entities":["e3"]}]
接下来我创建一个共现实体键:
e1-e2 {"text":"TextA", "entities":["e1"]}
e1-e2 {"text":"TextB", "entities":["e1","e2"]}
e1-e2 {"text":"TextB", "entities":["e1","e2"]}
e3 {"text":"TextC", "entities":["e3"]}
然后我groupby
在这个同时出现的键上:
e1-e2 [{"text":"TextA", "entities":["e1"]}, {"text":"TextB", "entities":["e1","e2"]}]
e3 [{"text":"TextC", "entities":["e3"]}]
我在具有 700 万个条目的大型数据集上的工作在groubpy
操作上失败,请参阅下面的错误。
然后进行训练测试拆分,partition
最后申请distinct
删除重复项。
错误
可悲的是,我的方法在这里失败了:
logger: "root:shuffle.py:try_split"
message: "Refusing to split <dataflow_worker.shuffle.GroupedShuffleRangeTracker object at 0x7fab8a9d2a58> at b'\x9f|\xe7c\x00\x01': proposed split position is out of range [b'\x95n*A\x00\x01', b'\x9f|\xe7c\x00\x01'). Position of last group processed was b'\x9f|\xe7b\x00\x01'."
logger: "root:shuffle.py:request_dynamic_split"
message: "Refusing to split GroupedShuffleReader <dataflow_worker.shuffle.GroupedShuffleReader object at 0x7fab8a9d2588> at n3znYwAB"