Связывание объектов с spacy/Wikipedia

Я пытаюсь следовать примеру здесь: https://github.com/explosion/spaCy/tree/master/bin/wiki_entity_linking. Но я просто смущен тем, что находится в данных обучения. Это все из Википедии? Скажем, мне просто нужны обучающие данные для нескольких сущностей. Например, Е1, Е2 и Е3. Позволяет ли пример указать только несколько сущностей, которые я хочу устранить?


person formicaman    schedule 06.02.2020    source источник


Ответы (1)


[ОБНОВЛЕНИЕ] Обратите внимание, что эта кодовая база была перенесена на https://github.com/explosion/projects/tree/master/nel-wikipedia (spaCy v2)

Если вы запускаете сценарии, как указано в https://github.com/explosion/spaCy/tree/master/bin/wiki_entity_linking, они действительно создадут обучающий набор данных из Википедии, который вы сможете использовать для обучения общей модели.

Если вы хотите обучить более ограниченную модель, вы, конечно, можете использовать свой собственный набор для обучения. Пример игрушки можно найти здесь: https://github.com/explosion/spaCy/blob/master/examples/training/train_entity_linker.py, где вы можете вывести формат обучающих данных:

def sample_train_data():
    train_data = []

    # Q2146908 (Russ Cochran): American golfer
    # Q7381115 (Russ Cochran): publisher

    text_1 = "Russ Cochran his reprints include EC Comics."
    dict_1 = {(0, 12): {"Q7381115": 1.0, "Q2146908": 0.0}}
    train_data.append((text_1, {"links": dict_1}))

    text_2 = "Russ Cochran has been publishing comic art."
    dict_2 = {(0, 12): {"Q7381115": 1.0, "Q2146908": 0.0}}
    train_data.append((text_2, {"links": dict_2}))

    text_3 = "Russ Cochran captured his first major title with his son as caddie."
    dict_3 = {(0, 12): {"Q7381115": 0.0, "Q2146908": 1.0}}
    train_data.append((text_3, {"links": dict_3}))

    text_4 = "Russ Cochran was a member of University of Kentucky's golf team."
    dict_4 = {(0, 12): {"Q7381115": 0.0, "Q2146908": 1.0}}
    train_data.append((text_4, {"links": dict_4}))

    return train_data

Этот пример в train_entity_linker.py показывает, как модель учится различать Расса Кокрана, игрока в гольф (Q2146908), от издателя (Q7381115). Обратите внимание, что это всего лишь игрушечный пример: для реалистичного приложения потребуется большая база знаний с точными априорными частотами (что вы можете получить, запустив скрипты Википедии/Викиданных), и, конечно, вам потребуется намного больше предложений и лексического разнообразия, чтобы ожидать Модель машинного обучения, позволяющая находить правильные подсказки и эффективно обобщать невидимый текст.

person Sofie VL    schedule 06.02.2020
comment
Спасибо за ответ. Итак, если бы я использовал сценарий Википедии, каков именно формат обучающих данных? Другими словами, содержит ли он обучающие примеры для ВСЕХ сущностей, которые можно найти в Википедии? Если это так, я должен просто иметь возможность фильтровать те, которые мне нужны, не так ли? - person formicaman; 06.02.2020
comment
Кроме того, в моем случае объекты, которые мне нужно было бы обучить, могли время от времени меняться — вот почему я хотел бы использовать данные Википедии, чтобы я мог просто искать нужные мне объекты из дампа. - person formicaman; 06.02.2020
comment
Конечно, вы можете выполнить пользовательскую фильтрацию сгенерированных обучающих данных из Википедии. Этот обучающий файл имеет номер gold_entities.jsonl и содержит по одному документу в строке + все аннотации сущностей (смещение + идентификатор базы данных) в этом документе. - person Sofie VL; 07.02.2020
comment
Путь к данным WP должен быть сжатым файлом или несжатым файлом? - person formicaman; 10.02.2020
comment
просто сохраните несжатые .bz2 файлы - вы не хотите распаковывать это :-) - person Sofie VL; 11.02.2020
comment
Ценить это! Есть ли у вас какое-либо представление о том, как я могу отфильтровать XML или ускорить процесс, учитывая, что я ищу только несколько объектов? Кажется, в сценарии написано, что это займет 10 часов. - person formicaman; 11.02.2020
comment
Или я думаю просто использовать параметры limit_prior и limit_train, но хотел проверить, что было 1B строк. - person formicaman; 11.02.2020
comment
И извините за последнюю вещь - что такое «определение сущности»? Я понимаю, что такое описание, но не определение. - person formicaman; 11.02.2020