Инструменты разработки
DDParser
Введение в синтаксический анализ зависимостей. Синтаксический анализ зависимостей — это одна из основных технологий обработки естественного языка, которая направлена на определение синтаксической структуры предложения на основе анализа отношений зависимости между словами. Пример:
struct
Проектное введение. DDParser (Baidu Dependency Parser) — это инструмент для синтаксического анализа зависимостей, разработанный Baidu на основе платформы глубокого обучения PaddlePaddle и крупномасштабных размеченных данных. Инструмент охватывает различные типы входных данных, такие как клавиатурный ввод и голосовой ввод, а также различные сценарии, включая новости и форумы. Он показал отличные результаты в случайных тестах. Кроме того, он прост в использовании и позволяет легко установить и предсказать результаты.
Результаты. | Набор данных | 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.
Быстрый старт.
Использование функций.
Без токенизации:
>>> 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]}]
Загрузка проекта: пользователи могут загрузить исходный код с помощью 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 )