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

OSCHINA-MIRROR/baidu-DDParser

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

DDParser

Инструменты разработки

  • Инструменты представления на основе синтаксического анализа предложений: инструменты для представления предложений на основе их синтаксического разбора.
  • Инструменты извлечения структуры на основе синтаксического анализа: инструменты для извлечения структурной информации из предложений на основе их синтаксического разбора.

DDParser

  1. Введение в синтаксический анализ зависимостей. Синтаксический анализ зависимостей — это одна из основных технологий обработки естественного языка, которая направлена на определение синтаксической структуры предложения на основе анализа отношений зависимости между словами. Пример:

    struct

  2. Проектное введение. DDParser (Baidu Dependency Parser) — это инструмент для синтаксического анализа зависимостей, разработанный Baidu на основе платформы глубокого обучения PaddlePaddle и крупномасштабных размеченных данных. Инструмент охватывает различные типы входных данных, такие как клавиатурный ввод и голосовой ввод, а также различные сценарии, включая новости и форумы. Он показал отличные результаты в случайных тестах. Кроме того, он прост в использовании и позволяет легко установить и предсказать результаты.

  3. Результаты. | Набор данных | UAS | LAS | | :--- | :--- | :--- | | CTB5 | 90,31 % | 89,06 % | | DuCTB1.0 | 94,80 % | 92,88 % |

CTB5: Chinese Treebank 5.0 — китайский синтаксический банк, выпущенный Linguistic Data Consortium (LDC) в 2005 году и содержащий 18 782 предложения. Данные взяты из новостей и журналов, таких как газета Xinhua News Agency.

DuCTB1.0: Baidu Chinese Treebank1.0 — это китайский синтаксический банк, созданный Baidu и используемый в качестве обучающих данных для DDParser.

  1. Быстрый старт.

    • Зависимости версий: Python >=3.6.0, <3.8.0; PaddlePaddle >=1.8.2, <2.0; LAC >=0.1.4.
    • Установка в один клик: можно использовать pip install ddparser или выполнить полуавтоматическую установку, загрузив пакет с https://pypi.org/project/ddparser/ и установив его с помощью python setup.py install.
  2. Использование функций.

  • Без токенизации:

    >>> from ddparser import DDParser
    >>> ddp = DDParser()
    >>> # Одно предложение
    >>> ddp.parse("百度是一家高科技公司")
    [{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB']}]
    >>> # Несколько предложений
    >>> ddp.parse(["百度是一家高科技公司", "他送了一本书"])
    [{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB']}, 
    {'word': ['他', '送', '了', '一本', '书'], 'head': [2, 0, 2, 5, 2], 'deprel': ['SBV', 'HED', 'MT', 'ATT', 'VOB']}]
    >>> # Вывод вероятности и тегов частей речи
    >>> ddp = DDParser(prob=True, use_pos=True)
    >>> ddp.parse(["百度是一家高科技公司"])
    [{'word': ['百度', '是', '一家', '高科技', '公司'], 'postag': ['ORG', 'v', 'm', 'n', 'n'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB'], 'prob': [1.0, 1.0, 1.0, 1.0, 1.0]}]
    >>> # buckets=True для ускорения обработки при неравномерной длине набора данных
    >>> ddp = DDParser(buckets=True)
    >>> # Выбор модели transformer
    >>> ddp = DDParser(encoding_model='transformer')
    >>> # Использование GPU
    >>> ddp = DDParser(use_cuda=True)
    
  • С токенизацией:

    >>> from ddparser import DDParser
    >>> ddp = DDParser()
    >>> ddp.parse_seg([['百度', '是', '一家', '高科技', '公司'], ['他', '送', '了', '一本', '书']])
    [{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB']},
    {'word': ['他', '送', '了', '一本', '书'], 'head': [2, 0, 2, 5, 2], 'deprel': ['SBV', 'HED', 'MT', 'ATT', 'VOB']}]
    >>> # Вывести вероятность
    >>> ddp = DDParser(prob=True)
    >>> ddp.parse_seg([['百度', '是', '一家', '高科技', '公司']])
    [{'word': ['百度', '是', '一家', '高科技', '公司'], 'head': [2, 0, 5, 5, 2], 'deprel': ['SBV', 'HED', 'ATT', 'ATT', 'VOB'], 'prob': [1.0, 1.0, 1.0, 1.0, 1.0]}]
    
  1. Продвинутое использование.
  • Загрузка проекта: пользователи могут загрузить исходный код с помощью git clone https://github.com/baidu/DDParser и установить зависимости с помощью pip install --upgrade paddlepaddle-gpu и pip install --upgrade LAC.

  • Загрузка модели: мы выпустили модель, обученную на DuCTB1.0. Пользователи могут скачать её, выполнив cd ddparser && sh download_pretrained_model.sh. Модель будет сохранена в ./ddparser/model_files/baidu.

  • Обучение: пользователи могут обучить модель с помощью sh run_train.sh. Подробные инструкции:

CUDA_VISIBLE_DEVICES=0 python -u run.py \
        --mode=train \
        --use_cuda \
        --feat=char \
        --preprocess \
``` **Модельные файлы = model_files/baidu**  

**Модельные файлы = model_files/baidu**

**Путь к данным для обучения = data/baidu/train.txt**  

**Путь к проверочным данным = data/baidu/dev.txt**

**Путь к тестовым данным = data/baidu/test.txt** 

**UNK = UNK**

**Количество сегментов = 15**

* * *

> *Примечание: пользователи могут изменить пути train_data_path, valid_data_path и test_data_path для указания обучающего набора, оценочного набора и тестового набора. Значения параметров см. в разделе «Параметры». Используемый формат данных см. в разделе «Формат данных».*

* * *

### Оценка

Пользователи могут загрузить оценочный набор, предоставленный нами, с помощью команды sh download_data.sh. Он будет сохранён в папке ./data/baidu/. Оценочный набор содержит 2592 предложения со средней длиной 11,27 символа.

Пользователи также могут оценить модель с помощью команды sh run_evaluate.sh:

```shell
CUDA_VISIBLE_DEVICES=0 python run.py \
                                --mode=evaluate \
                                --use_cuda \
                                --model_files=model_files/baidu \
                                --test_data_path=data/baidu/test.txt \
                                --buckets=15 \
                                --tree

Примечание: Пользователи могут указать оценочный набор с помощью параметра test_data_path. Используемый формат данных см. в разделе «Формат данных».


Прогнозирование

На основе исходного кода мы предоставляем два метода прогнозирования на основе командной строки: один для данных с разделёнными словами, а другой — для неразделённых данных.

Прогнозирование на основе данных с разделёнными словами

Для прогнозирования требуются входные данные, организованные в формате CoNLL-X (официальное описание: https://ilk.uvt.nl/~emarsi/download/pubs/14964.pdf). Для отсутствующих полей используется «-». Прогнозирование выполняется с помощью команды sh run_predict.sh:

CUDA_VISIBLE_DEVICES=0 python run.py \
                                --mode=predict \
                                --use_cuda \
                                --model_files=model_files/baidu \
                                --infer_data_path=data/baidu/test.txt \
                                --infer_result_path=data/baidu/test.predict \
                                --buckets=15 \
                                --tree 

Примечание: Пользователи могут указать путь к данным, которые необходимо предсказать, и путь к результатам прогнозирования с помощью параметров infer_data_path и infer_result_path.


Прогнозирование на основе неразделённых данных

Ввод данных для прогнозирования представляет собой строку. Прогнозирование осуществляется на основе стандартного ввода с помощью команды sh run_predict_query.sh:

CUDA_VISIBLE_DEVICES=0 python run.py \
                                --mode=predict_q \
                                --use_cuda \
                                --model_files=model_files/baidu \
                                --buckets=15 \
                                --tree

По умолчанию используется LAC для прогнозирования сегментации и части речи.


Параметры

Параметр Описание
mode Режим задачи (обучение, оценка, прогнозирование, прогнозирование_q)
config_path Путь к файлу с сохранёнными гиперпараметрами
model_files Путь к сохранённым моделям
train_data_path Путь к обучающему набору файлов
valid_data_path Путь к проверочному набору файлов
test_data_path Путь к тестовому набору файлов
infer_data_path Путь к данным, подлежащим прогнозированию
pretrained_embedding_dir Путь к предварительно обученным векторам слов
batch_size Размер пакета
log_path Путь к журналу
log_level Уровень журнала (по умолчанию INFO)
infer_result_path Путь сохранения результатов прогнозирования
use_cuda Если установлено значение true, используется GPU
preprocess Используется при обучении. Если установлено значение true, используются данные обучения для статистики и т. д. Не устанавливается по умолчанию, если используется та же обучающая выборка несколько раз.
seed Случайное начальное число (по умолчанию: 1)
threads Управление количеством потоков каждого экземпляра Paddle
tree Убедитесь, что выходные данные являются правильным синтаксическим деревом зависимостей
prob Если установлено, выводит вероятность каждой дуги, хранящуюся в столбце PROB результата
feat Выбор входных функций (char, pos)
buckets Выберите максимальное количество сегментов (по умолчанию: 15)
punct Включает ли оценка результаты знаки препинания
unk Укажите символ UNK в предварительно обученном словаре
encoding_model Выберите базовую модель (по умолчанию lstm, transformer)

Формат данных

Этот проект основан на формате данных CoNLL-X. Отсутствующие поля заменяются знаком «-» (например, «Байду — это высокотехнологичная компания»).

ID FROM LEMMA CPOSTAG POSTAG FEATS HEAD DEPREL PROB PDEPREL
1 Байду Байд - - - 2 SBV 1.0 -
2 является является - - - 0 HED 1.0 -
3 одна одна - - - 5 ATT 1.0 -
4 высокотехнологичная высокотехнологичный - - - 5 ATT 1.0 -
5 компания компания - - - 2 VOB 1.0 -
Определение Тип отношений Пример
定中关系 Отношения между определением и определяемым словом 他送了一本书 (он отправил книгу)
方位关系 Отношение между локативом и глаголом 在公园里玩耍 (играть в парке)
COO Параллельные отношения 叔叔阿姨 (дядя и тётя)
DBL Структура двойного глагола 他请我吃饭 (он угощает меня едой)
DOB Структура с двумя дополнениями 他送我一本书 (он подарил мне книгу)
VV Структура с последовательными глаголами 他外出吃饭 (он вышел поесть)
IC Структура предложения 你好,书店怎么走?(привет, как пройти к книжному магазину?)
MT Составное слово с частицей 他送了一本书 (он отправил одну книгу)
HED Основные отношения

Источник данных

Baidu Chinese Treebank 1.0 — это китайская библиотека синтаксических деревьев, созданная компанией Baidu. Она содержит около 53 миллионов предложений. Данные получены из поисковых запросов, веб-страниц и других источников.

Структура файла

.
├── LICENSE
├── README.md
├── requirements.txt # Зависимости и требования к версиям
├── ddparser # Основной код DDParser, включая модель, тестовые данные и скрипты запуска

Планы на будущее

— Упрощение модели для уменьшения её размера.

Ссылки

Проект основан на статье «Deep Biaffine Attention for Neural Dependency Parsing», опубликованной на arXiv. Соответствующая версия на PyTorch доступна на GitHub.

Цитирование

Если вы использовали DDParser в своей научной работе, пожалуйста, добавьте следующую ссылку:

@misc{zhang2020practical, title={A Practical Chinese Dependency Parser Based on A Large-scale Dataset}, author={Shuai Zhang and Lijie Wang and Ke Sun and Xinyan Xiao}, year={2020}, eprint={2009.00901}, archivePrefix={arXiv}, primaryClass={cs.CL} }

Вклад в проект

Мы приветствуем разработчиков, которые хотят внести свой вклад в DDParser. Если вы разработали новую функцию или обнаружили ошибку, мы будем рады получить ваш PR.

Комментарии ( 0 )

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/baidu-DDParser.git
git@api.gitlife.ru:oschina-mirror/baidu-DDParser.git
oschina-mirror
baidu-DDParser
baidu-DDParser
master