Сквозная система ответной системы с закрытым доменом. Построен на вершине библиотеки трансформаторов Huggingface.
⛔ [не поддерживается] Этот репозиторий больше не поддерживается, но поддерживается в образовательных целях. Если вы хотите сохранить альтернативу CDQA, проверьте: https://github.com/deepset-ai/haystack
Если вы заинтересованы в понимании того, как работает система, и ее реализация, мы написали статью о среде с объяснением высокого уровня.
Мы также сделали презентацию во время завтрака № 9 NLP, организованного Feedly. Вы можете проверить это здесь.
pip install cdqagit clone https://github.com/cdqa-suite/cdQA.git
cd cdQA
pip install -e .Эксперименты были проведены с:
t2.medium Deep Learning AMI (Ubuntu) Версия 22.0p3.2xlarge глубокое обучение AMI (Ubuntu) Версия 22.0 + Один Tesla V100 16GB. Чтобы использовать cdQA , вам нужно создать DataFrame Pandas со следующими столбцами:
| заголовок | абзацы |
|---|---|
| Название статьи | [Пункт 1 статьи, ..., пункт n статьи] |
Целью преобразователей cdqa является облегчение создания этого Frame из вашей базы данных о необработанных документах. Например, pdf_converter может создать DataFrame cdqa из каталога, содержащего файлы .pdf :
from cdqa . utils . converters import pdf_converter
df = pdf_converter ( directory_path = 'path_to_pdf_folder' )Вам нужно будет установить Java OpenJDK, чтобы использовать этот конвертер. В настоящее время у нас есть конвертеры для:
Мы планируем улучшить и добавить больше конвертеров в будущем. Следите за обновлениями!
Вы можете скачать модели и данные вручную из выпусков GitHub или использовать наши функции загрузки:
from cdqa . utils . download import download_squad , download_model , download_bnpp_data
directory = 'path-to-directory'
# Downloading data
download_squad ( dir = directory )
download_bnpp_data ( dir = directory )
# Downloading pre-trained BERT fine-tuned on SQuAD 1.1
download_model ( 'bert-squad_1.1' , dir = directory )
# Downloading pre-trained DistilBERT fine-tuned on SQuAD 1.1
download_model ( 'distilbert-squad_1.1' , dir = directory )Установите трубопровод на вашем корпусе, используя предварительно обученный читатель:
import pandas as pd
from ast import literal_eval
from cdqa . pipeline import QAPipeline
df = pd . read_csv ( 'your-custom-corpus-here.csv' , converters = { 'paragraphs' : literal_eval })
cdqa_pipeline = QAPipeline ( reader = 'bert_qa.joblib' ) # use 'distilbert_qa.joblib' for DistilBERT instead of BERT
cdqa_pipeline . fit_retriever ( df = df )Если вы хотите точно настроить читателя на своем специальном отряде, аннотируемый набор данных:
cdqa_pipeline = QAPipeline ( reader = 'bert_qa.joblib' ) # use 'distilbert_qa.joblib' for DistilBERT instead of BERT
cdqa_pipeline . fit_reader ( 'path-to-custom-squad-like-dataset.json' )Сохраните модель читателя после тонкой настройки:
cdqa_pipeline . dump_reader ( 'path-to-save-bert-reader.joblib' )Чтобы получить наилучший прогноз, учитывая входной запрос:
cdqa_pipeline . predict ( query = 'your question' )Чтобы получить лучшие предсказания:
cdqa_pipeline . predict ( query = 'your question' , n_predictions = N )Существует также возможность изменить вес оценки ретривера по сравнению с оценкой читателя при вычислении окончательного рейтинга (дефолт составляет 0,35, что является наилучшим весом в наборе разработки от команды 1.1-Open)
cdqa_pipeline . predict ( query = 'your question' , retriever_score_weight = 0.35 )Чтобы оценить модели на пользовательском наборе данных, вам нужно будет его аннотировать. Процесс аннотации может быть выполнен в 3 шагах:
Преобразовать свой пандас DataFrame в файл JSON с форматом отряда:
from cdqa . utils . converters import df2squad
json_data = df2squad ( df = df , squad_version = 'v1.1' , output_dir = '.' , filename = 'dataset-name' )Используйте аннотатор, чтобы добавить пары вопросов и ответов на основу:
Пожалуйста, обратитесь к нашему cdQA-annotator , веб-аннотатору для ответных данных с закрытым вопросом с форматом команды.
Оценить объект трубопровода:
from cdqa . utils . evaluation import evaluate_pipeline
evaluate_pipeline ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Оцените читателя:
from cdqa . utils . evaluation import evaluate_reader
evaluate_reader ( cdqa_pipeline , 'path-to-annotated-dataset.json' )Мы подготовили несколько примеров ноутбуков в рамках каталога примеров.
Вы также можете играть напрямую с этими примерами ноутбука, используя Binder или Google Colaboratory:
| Блокнот | Аппаратное обеспечение | Платформа |
|---|---|---|
| [1] Первые шаги с CDQA | ЦП или графический процессор | |
| [2] Использование конвертера PDF | ЦП или графический процессор | |
| [3] Обучение читателя в команде | Графический процессор |
Binder и Google Colaboratory обеспечивают временные среды и могут быть медленными, но мы рекомендуем их, если вы хотите легко начать работу с cdQA .
Вы можете развернуть API cdQA REST, выполнив:
export dataset_path=path-to-dataset.csv
export reader_path=path-to-reader-model
FLASK_APP=api.py flask run -h 0.0.0.0Теперь вы можете сделать запросы для проверки вашего API (здесь, используя httpie):
http localhost:5000/api query== ' your question here ' Если вы хотите обслуживать пользовательский интерфейс поверх системы cdQA , следуйте инструкциям CDQA-UI, веб-интерфейса, разработанного для cdQA .
Прочитайте наши рекомендации.
| Тип | Заголовок | Автор | Год |
|---|---|---|---|
| ? Видео | Стэнфорд CS224N: NLP с глубоким обучением лекции 10 - Ответ на вопрос | Кристофер Мэннинг | 2019 |
| ? Бумага | Чтение Википедии, чтобы ответить на вопросы открытого домена | Данки Чен, Адам Фиш, Джейсон Уэстон, Антуан Бордс | 2017 |
| ? Бумага | Понимание нейронного прочитанного и за его пределами | Данки Чен | 2018 |
| ? Бумага | Берт: предварительное обучение глубоких двунаправленных трансформаторов для понимания языка | Джейкоб Девлин, Мин-Вей Чанг, Кентон Ли, Кристина Тутанова | 2018 |
| ? Бумага | Контекстные представления слов: контекстуальное введение | Ноа А. Смит | 2019 |
| ? Бумага | Сквозные вопросы с открытым доменом, отвечающий с помощью Bertserini | Вэй Ян, Юцин Си, Эйлин Лин, Синью Ли, Лучен Тан, Кун Сюн, Мин Ли, Джимми Лин | 2019 |
| ? Бумага | Увеличение данных для Bert Fine-Muning в ответе на вопрос с открытым доменом | Вэй Ян, Юцин Си, Лучен Тан, Кун Сюн, Мин Ли, Джимми Лин | 2019 |
| ? Бумага | Повторный переход с Бертом | Родриго Ногейра, Кюнхён Чо | 2019 |
| ? Бумага | MRQA: чтение машины для ответа на вопрос | Джонатан Берант, Перси Лян, Люк Зеттлемуер | 2019 |
| ? Бумага | Неконтролируемый вопрос ответа на перевод Cloze | Патрик Льюис, Людович Денойер, Себастьян Ридель | 2019 |
| Рамки | Scikit-learn: машинное обучение в Python | Pedrecosa et al. | 2011 год |
| Рамки | Пирог | Адам Пашке, Сэм Гросс, Сумит Чинтала, Грегори Чанан | 2016 |
| Рамки | Трансформеры: современная обработка естественного языка для Tensorflow 2.0 и Pytorch. | Обнимающееся лицо | 2018 |
Apache-2.0