1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openkg-deepke

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_TAG.md 31 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 11:36 5964b57

Инструкция по аннотации данных

DeepKE — это инструмент для извлечения и построения графа знаний с открытым исходным кодом, который поддерживает инструменты извлечения знаний с ограниченными ресурсами, длинным текстом и мультимодальными данными. DeepKE основан на PyTorch и может реализовывать функции распознавания именованных сущностей, извлечения отношений и извлечения атрибутов.

Эта версия, DeepKE-cnSchema, представляет собой готовую версию, которая позволяет пользователям загружать модель для извлечения сущностных и реляционных знаний, поддерживающую cnSchema.


Содержание инструкции

Глава Описание
Введение Основные принципы и поддерживаемые типы данных DeepKE
Ручная аннотация данных Как вручную аннотировать данные
Автоматическая аннотация данных Как автоматически аннотировать данные на основе DeepKE
Часто задаваемые вопросы Часто задаваемые вопросы
Ссылки Технические отчёты для этого каталога

Введение

DeepKE — это инструмент с открытым исходным кодом для извлечения и построения графов знаний, который поддерживает инструменты для работы с данными с ограниченными ресурсами, длинными текстами и мультимодальной информацией. DeepKE, основанный на PyTorch, может реализовывать функции распознавания именованных объектов, извлечения связей и извлечения признаков. Также доступны подробные документация, учебники Google Colab, онлайн-презентации и слайд-шоу.

Известно, что данные очень важны для обучения модели. Чтобы упростить использование этого инструмента, DeepKE предоставляет подробную аннотацию данных идентификации сущностей и извлечения связей, чтобы пользователи могли получать обучающие данные вручную или автоматически. Аннотированные данные могут быть непосредственно использованы DeepKE для обучения модели.

Ручная аннотация данных

doccano — это инструмент ручной аннотации данных с открытым исходным кодом. Он предоставляет функции аннотации для классификации текста, пометки последовательностей и последовательности к последовательности. Таким образом, вы можете создавать размеченные данные для анализа тональности, распознавания именованных сущностей, текстовых резюме и так далее. Просто создайте проект, загрузите данные и начните маркировку, и вы сможете создать набор данных, готовый к обучению DeepKE, в течение нескольких часов. Использование doccano для извлечения данных аннотации для распознавания сущностей и отношений описано ниже.

Подробнее об установке и настройке doccano см. Github(doccano). Установлено и запущено. В браузере перейдите по адресу http://0.0.0.0:8000 и нажмите Войти.

Распознавание сущностей

Создание проекта

  • Создайте проект. Нажмите Создать в верхнем левом углу, чтобы перейти к следующему интерфейсу.

    • Выберите задачу маркировки последовательностей.
    • Заполните необходимую информацию, такую как название проекта и описание.
    • Отметьте настраиваемые атрибуты, такие как Разрешить перекрытие сущностей и Использовать маркировку отношений, если требуется.
  • После завершения создания вы будете автоматически перенаправлены на домашнюю страницу проекта.

Добавление корпуса

  • doccano поддерживает различные форматы текста. Различия заключаются в следующем:
    • Textfile: загруженный файл имеет формат txt. При разметке весь файл txt отображается как одна страница содержимого.
    • TextLine: загруженный файл имеет формат txt. При разметке строка текста в файле txt отображается как страница содержимого.
    • JSONL: сокращение от JSON Lines, где каждая строка является допустимым значением JSON;
    • CoNLL: файл в формате CoNLL. Каждая строка содержит серию слов, разделённых табуляцией.
  • Снова щёлкните по вкладкам Dataset, и вы увидите, что текст был добавлен в проект один за другим, а затем вы разметите текст.

Аннотации данных

  • Добавьте метки задач

    • Задача извлечения включает два типа меток: Span и Relation. Здесь Span относится к целевому фрагменту информации в исходном тексте, то есть к сущности определённого типа при распознавании сущностей.
    • Введите имя метки. При распознавании сущностей можно написать PER, LOC, ORG и т. д.
    • Добавьте соответствующую метку быстрого доступа (например, установите ярлык p для метки PER) и определите цвет метки.
    • Затем просто добавьте другие необходимые теги таким же образом.
  • Разметка данных

    • Разметьте данные. Щёлкните кнопку Разметить справа от каждой записи для разметки.
    • В примере определены две метки типа Span для людей и мест.

Экспорт обучающих данных

  • Щёлкните Параметры, Экспортировать набор данных в столбце Набор данных, чтобы экспортировать размеченные данные.

  • Размеченные данные хранятся в том же текстовом файле, по одной строке на образец и в формате jsonl, который содержит следующие поля:

    • id: уникальный идентификатор ID образца в наборе данных.
    • text: необработанные текстовые данные.
    • entities: метки Span, содержащиеся в данных, каждая метка Span содержит четыре поля:
      • id: уникальный идентификационный ID метки Span в наборе данных.
      • start_offset: начальная позиция метки Span.
      • end_offset: следующая позиция с конца метки Span.
      • label: тип метки Span.
  • Пример экспортированных данных

{
    "id":10,
    "text":"University of California is located in California, United States.",
    "entities":[
        {
            "id":15,
            "label":"ORG",
            "start_offset":0,
            "end_offset":24
        },
        {
            "id":16,
            "label":"LOC",
            "start_offset":39,
            "end_offse":49
        },
        {
            "id":17,
            "label":"LOC",
            "start_offset":51,
            "end_offset":64
        }
    ],
    "relations":[
        
    ]
}
  • Формат входных данных для задачи распознавания сущностей в DeepKE — это файл txt, в котором каждая строка включает слова, разделители и метки (см. формат данных CoNLL). Экспортированные данные будут предварительно обработаны в формат ввода DeepKE для обучения, пожалуйста, перейдите к подробному файлу README

Извлечение отношений

  • [Создайте... Извлечение именованных сущностей (NER)

Dataset:
https://github.com/OYE93/Chinese-NLP-Corpus/tree/master/NER/People's Daily. Это набор данных для NER, сосредоточенный на типах именованных сущностей, связанных с людьми (PER), местоположениями (LOC) и организациями (ORG).

В примере словаря на английском языке мы адаптируем набор данных Conll. Он содержит именованные сущности, связанные с людьми (PER), местоположениями (LOC) и другими объектами (MISC). Вы можете получить набор данных Conll с помощью следующей команды:

wget 120.27.214.45/Data/ner/few_shot/data.tar.gz

Предоставленный словарь из Google Drive:

Из BaiduNetDisk:

Если вам нужно создать собственный словарь, обратитесь к предоставленному формату словаря (csv).

Сущность Метка
Вашингтон LOC
... ...

Исходный файл

Формат входного словаря — csv (содержит два столбца: сущности и соответствующие метки). Данные, которые должны быть автоматически помечены (формат txt и разделены строками, как показано на рисунке ниже), должны быть помещены в путь source_data, скрипт будет проходить по всем файлам формата txt в этой папке и автоматически отмечать строку за строкой.

Выходной файл

Выходной файл (соотношение распределения обучающего набора, проверочного набора и тестового набора можно настроить) можно напрямую использовать в качестве обучающих данных в DeepKE.

Среда

Реализация среды: jieba = 0.42.1

Описание аргументов

— language: cn или en — source_dir: путь к корпусу (проходить по всем файлам в формате txt под этой папкой, автоматически отмечать построчно, по умолчанию — source_data) — dict_dir: путь к словарю сущностей (по умолчанию — vocab_dict.csv) — test_rate, dev_rate, test_rate: соотношение обучающего набора, проверочного набора и тестового набора (пожалуйста, убедитесь, что сумма равна 1, по умолчанию 0,8:0,1:0,1)

Запуск

Для китайского языка:

python prepare_weaksupervised_data.py --language cn --dict_dir vocab_dict_cn.csv

Для английского языка:

python prepare_weaksupervised_data.py --language en --dict_dir vocab_dict_en.csv

Извлечение отношений (RE)

Мы предоставляем простой инструмент на основе дальнего надзора для маркировки меток отношений для наших задач RE.

Исходный файл

Исходный файл (набор данных, который должен быть размечен) указан в формате .json и включает одну пару сущностей: головную сущность и хвостовую сущность соответственно. Каждый фрагмент данных должен содержать как минимум следующие пять элементов: предложение, голова, хвост, head_offset, tail_offset. Подробный шаблон json выглядит следующим образом:

[
  {
    "sentence": "This summer, the United States Embassy in Beirut, Lebanon, once again made its presence felt on the cultural scene by sponsoring a photo exhibition, an experimental jazz performance, a classical music concert and a visit from the Whiffenpoofs, Yale University's a cappella singers.",
    "head": "Lebanon",
    "tail": "Beirut",
    "head_offset": "50",
    "tail_offset": "42",
    //...
  },
  //... 
]

Файл тройки

Пары сущностей в исходном файле будут сопоставляться с тройками в файле тройки. Пары сущностей будут помечены типом отношения, если они совпадают с тройками в тройном файле. Если совпадений нет, пары будут помечены как тип None.

Мы предоставляем английский и китайский файлы тройки соответственно. Английский файл тройки взят из набора данных NYT, который содержит следующие отношения. ``` "/business/company/place_founded", "/people/person/place_lived", "/location/country/administrative_divisions", "/business/company/major_shareholders", "/sports/sports_team_location/teams", "/people/person/religion", "/people/person/place_of_birth", "/people/person/nationality", "/location/country/capital", "/business/company/advisors", "/people/deceased_person/place_of_death", "/business/company/founders", "/location/location/contains", "/people/person/ethnicity", "/business/company_shareholder/major_shareholder_of", "/people/ethnicity/geographic_distribution", "/people/person/profession", "/business/person/company", "/people/person/children", "/location/administrative_division/country", "/people/ethnicity/people", "/sports/sports_team/location", "/location/neighborhood/neighborhood_of", "/business/company/industry"


The Chinese triple file are from [here](https://github.com/DannyLee1991/ExtractTriples) с такими типами отношений:

```json
{"объект_типа": "место", "предикат": "родина", "субъект_тип": "человек"}
{"объект_типа": "человек", "предикат": "отец", "субъект_тип": "человек"}
{"объект_типа": "место", "предикат": "штаб-квартира", "субъект_тип": "компания"}
{"объект_типа": "место", "предикат": "место рождения", "субъект_тип": "человек"}
{"объект_типа": "цель", "предикат": "цель", "субъект_тип": "организм"}
{"объект_типа": "число", "предикат": "площадь", "субъект_тип": "административный район"}
{"объект_типа": "текст", "предикат": "сокращение", "субъект_тип": "организация"}
{"объект_типа": "дата", "предикат": "дата выхода", "субъект_тип": "фильм"}
{"объект_типа": "человек", "предикат": "жена", "субъект_тип": "человек"}
{"объект_типа": "музыкальный альбом", "предикат": "принадлежность альбома", "субъект_тип": "песня"}
{"объект_типа": "число", "предикат": "уставной капитал", "субъект_тип": "предприятие"}
{"объект_типа": "город", "предикат": "столица", "субъект_тип": "страна"}
{"объект_типа": "человек", "предикат": "режиссёр", "субъект_тип": "фильм"}
{"объект_типа": "текст", "предикат": "имя", "субъект_тип": "историческая личность"}
{"объект_типа": "число", "предикат": "рост", "субъект_тип": "человек"}
{"объект_типа": "компания", "предикат": "производитель", "субъект_тип": "фильм"}
{"объект_типа": "число", "предикат": "срок обучения", "субъект_тип": "специальность"}
{"объект_типа": "дата", "предикат": "дата рождения", "субъект_тип": "человек"}
{"объект_типа": "человек", "предикат": "продюсер", "субъект_тип": "фильм"}
{"объект_типа": "человек", "предикат": "мать", "субъект_тип": "человек"}
{"объект_типа": "человек", "предикат": "сценарист", "субъект_тип": "фильм"}
{"объект_типа": "страна", "предикат": "гражданство", "субъект_тип": "человек"}
{"объект_типа": "число", "предикат": "высота над уровнем моря", "субъект_тип": "место"}
{"объект_типа": "сайт", "предикат": "веб-сайт публикации", "субъект_тип": "онлайн-роман"}
{"объект_типа": "человек", "предикат": "муж", "субъект_тип": "человек"}
{"объект_типа": "текст", "предикат": "династия", "субъект_тип": "историческая личность"}
{"объект_типа": "текст", "предикат": "национальность", "субъект_тип": "человек"}
{"объект_типа": "текст", "предикат": "номер", "субъект_тип": "историческая личность"}
{"объект_типа": "издательство", "предикат": "издательство", "субъект_тип": "книга"}
{"объект_типа": "человек", "предикат": "ведущий", "субъект_тип": "телешоу"}
{"объект_типа": "текст", "предикат": "код специальности", "субъект_тип": "специальность"}
{"объект_типа": "человек", "предикат": "певец", "субъект_тип": "песня"}
{"объект_типа": "человек", "предикат": "автор слов", "субъект_тип": "песня"}
{"объект_типа": "человек", "предикат": "главный герой", "субъект_тип": "онлайн-роман"}
{"объект_типа": "человек", "предикат": "председатель совета директоров", "субъект_тип": "компания"}
{"объект_типа": "дата", "предикат": "дата основания", "субъект_тип": "организация"}
{"объект_типа": "школа", "предикат": "альма-матер", "субъект_тип": "человек"}
{"объект_типа": "число", "предикат": "занимаемая площадь", "субъект_тип": "организация"}
{"объект_типа": "язык", "предикат": "официальный язык", "субъект_тип": "страна"}
{"объект_типа": "текст", "предикат": "почтовый индекс", "субъект_тип": "район"}
{"объект_типа": "число", "предикат": "численность населения", "субъект_тип": "район"}
{"объект_типа": "город", "предикат": "расположен в городе", "субъект_тип": "достопримечательность"}
{"объект_типа": "человек", "предикат": "автор", "субъект_тип": "литературное произведение"}
{"объект_типа": "дата", "предикат": "дата основания", "субъект_тип": "компания"}
{"объект_типа": "человек", "предикат": "композитор", "субъект_тип": "песня"}
{"объект_типа": "климат", "предикат": "климат", "субъект_тип": "район"}
{"объект_типа": "человек", "предикат": "гость", "субъект_тип": "телешоу"} **Предикат**: главный актёр.
**Тип субъекта**: кинофильм.

**Объект**: кинофильм. 
**Предикат**: основан на. 
**Тип субъекта**: кинофильм.  

**Субъект**: основатель. 
**Тип**: организация. 
*Предикат* не указан.

Вы можете использовать свой собственный файл троек, но формат файла должен быть .csv и соответствовать следующему шаблону:

голова хвост отношение
Ливан Бейрут /location/location/contains
... ... ...

Выходной файл

Имена выходных файлов: labeled_train.json, labeled_dev.json, labeled_test.json для наборов данных train, dev и test соответственно. Формат выходного файла следующий:

[ { "предложение": "Этим летом посольство Соединённых Штатов в Бейруте, Ливане, снова заявило о себе на культурной сцене, спонсируя фотовыставку, экспериментальное джазовое выступление, концерт классической музыки и визит группы Whiffenpoofs, исполнителей а капелла Йельского университета.", "голова": "Ливан", "хвост": "Бейрут", "смещение головы": "50", "смещение хвоста": "42", "отношение": "/location/location/содержит", //... }, //... ]

Мы автоматически разделяем исходные данные на три части с соотношением 0,8:0,1:0,1. Вы можете установить собственное соотношение.

Описание аргументов

  • язык: en или cn
  • исходный файл: файл данных для маркировки
  • тройной файл: путь к файлу троек
  • тестовая ставка, ставка разработки, тестовая ставка: соотношение обучающего набора, проверочного набора и тестового набора (пожалуйста, убедитесь, что сумма равна 1, по умолчанию 0,8: 0,1: 0,1)

Запуск

python ds_label_data.py --language en --source_file source_data.json --triple_file triple_file.csv

Часто задаваемые вопросы

  • В: Сколько данных нужно пометить?

    • О: Маркировка — это трудоёмкий и длительный процесс, который может быть очень дорогостоящим. В идеале, чем больше данных помечено, тем лучше будет модель. Но на практике это не всегда возможно. С одной стороны, необходимо сочетать практические ресурсы и время; с другой стороны, важно учитывать влияние увеличения объёма данных на повышение эффективности модели. При идентификации сущности обычно требуется объём данных около 10 тыс.
  • В: Доступны ли какие-либо размеченные данные?

    • О: В распознавании сущностей предварительно предоставляются два словаря сущностей (по одному на английском и китайском языках), чтобы можно было автоматически аннотировать образцы.
  • В: Автоматическая маркировка данных для обучения моделей не работает

    • О: Есть несколько возможных причин плохих результатов модели:
      • Автоматически аннотированные, вручную аннотированные данные содержат высокий уровень шума.
      • Небольшой размер данных: большие модели со многими параметрами переоснащаются на небольших наборах данных.
    • решение:
      • Рассмотрите возможность проверки качества данных.
      • Используйте такие стратегии, как полуконтролируемое обучение или самообучение.
      • Увеличьте объём данных, используя методы улучшения данных.

Ссылки

Если ресурсы или методы этого проекта были полезны для вашего исследования, вы можете сослаться на следующую статью в своей диссертации.

@article{zhang2022deepke, title={DeepKE: A Deep Learning Based Knowledge Extraction Toolkit for Knowledge Base Population}, author={Zhang, Ningyu and Xu, Xin and Tao, Liankuan and Yu, Haiyang and Ye, Hongbin and Qiao, Shuofei and Xie, Xin and Chen, Xiang and Li, Zhoubo and Li, Lei and Liang, Xiaozhuan and others}, journal={arXiv preprint arXiv:2201.03335}, year={2022} }

Отказ от ответственности

Содержание этого проекта предназначено только для технических исследовательских целей и не является основанием для каких-либо окончательных выводов. Пользователи могут использовать модель по своему усмотрению в рамках лицензии, но мы не несём ответственности за прямой или косвенный ущерб, возникший в результате использования содержимого проекта.

Обратная связь

Если у вас есть какие-либо вопросы, пожалуйста, отправьте их в GitHub Issue.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openkg-deepke.git
git@api.gitlife.ru:oschina-mirror/openkg-deepke.git
oschina-mirror
openkg-deepke
openkg-deepke
main