Я бы хотел обучить тестовому разделению списка текстов со связанными сущностями, чтобы не было перекрывающихся разбиений сущностей.
Обеспечение отсутствия перекрытий является сложной задачей. В настоящее время я достигаю этого с помощью 2 groupby
операций.Мне было интересно , как я могу устранить узкие места в памяти, которые эти groupby
операции создают, или есть ли более чистый способ сделать весь процесс.
INPUT
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"]}
I затем groupby
на этом ключе взаимодействия:
e1-e2 [{"text":"TextA", "entities":["e1"]}, {"text":"TextB", "entities":["e1","e2"]}]
e3 [{"text":"TextC", "entities":["e3"]}]
Моя работа с большим набором данных с 7 миллионами записей не выполняется при операциях 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"