Лабораторная работа №8
Организация запросов для обращения к Базе данных
на естественном языке
Цель работы
Целью данной работы является создание модели, посредством которой реализуется обращение к базе данных на естественном языке.
Задание
Импортировать таблицу из базы данных, использующуюся в лабораторных работах №1-5.
Подключить базу данных к среде Google Collab.
Создать модель и функцию, обучение которых приводит к нужным результатам.
Задать несколько запросов к базе данных.
Краткая теория
С помощью NLP необходимо создать такую модель, которая позволит обработать естественный язык, который в свою очередь является обращением к базе данных. После чего, данный запрос должен вывести необходимую информацию о таблице на экран.
Используемые понятия:
NLP – общее направление искусственного интеллекта и математической лингвистики. Оно изучает проблемы компьютерного анализа и синтеза текстов на естественных языках. Применительно к искусственному интеллекту анализ означает понимание языка, а синтез — генерацию грамотного текста.
TensorFlow - одна из наиболее часто используемых библиотек машинного обучения в Python, специализирующаяся на создании глубоких нейронных сетей. Глубокие нейронные сети отлично справляются с такими задачами, как распознавание изображений и распознавание образов речи.
Токенизация — процесс разбиения текстового документа на отдельные слова, которые называются токенами.
TAPAS — это нейросетевая модель для поиска ответов на вопросы в табличных данных. Нейросеть является расширением двунаправленной Transformer-модели BERT со специальными эмбеддингами для поиска ответов. Модель разрабатывали в Google AI.
Выполнение
В первую очередь необходимо выгрузить данные из базы в файл в формате csv. При использовании СУБД PostgreSQL, можно воспользоваться командой:
Листинг 1. Выгрузка таблицы из БД
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Данную процедуру можно реализовать через интерфейс любого инструмента, в которой храниться база данных. Важно обратить внимание, что выгрузка в файл формата .csv доступна только для одной таблицы, а не для всей базы данных.
На google-диске необходимо создать папку и загрузить данный файл в этой папке.
Рисунок 1 – Создание папки
Рисунок 2 – Загрузка файла
Установка библиотек. Обратите внимание, это может занять некоторое время. Для загрузки всех библиотек необходимо выполнить следующие команды:
Листинг 2. Установка библиотек
!pip install transformers
!pip install torch-scatter -f https://data.pyg.org/whl/torch-1.9.0+${CUDA}.html
Импорт библиотек. Необходимо импортировать библиотеки AutoModelForTableQuestionAnswering, AutoTokenizer, pipeline, pandas
Листинг 3. Импорт библиотек
from transformers import AutoModelForTableQuestionAnswering, AutoTokenizer, pipeline
import pandas as pd
Подключение google-диска. Для считывания .csv файла, необходимо предоставить доступ к google-диску. На данном этапе могут возникнуть различные информационные сообщения о том, что необходимо дать доступы для данного файла, в зависимости от того, какая аутентификация подключена на вашем аккаунте.
Листинг 4. Подключение google-диска
from google.colab import drive
drive.mount('/content/drive')
import pandas as pd
Копирование названия файла. Для нахождения названия файла необходимо перейти в файлы проекта, раскрыть выпадающий список Data->MyDrive-> Найти файл, подгруженный на google-диск.
Рисунок 3 – Файлы проекта
После чего необходимо нажать на три точки рядом с файлом, работа с которым будет производиться и скопировать путь к нему.
Рисунок 4 – Копирование пути
Загрузка данных. Теперь необходимо считать данные, которые были загружены в .csv файле.
Листинг 5. Считывание данных
data = pd.read_csv('скопированный путь')
Вывод таблицы. Для того, чтобы убедиться, что данные считались корректно, таблицу можно вывести с помощью команды:
Листинг 6. Вывод таблицы
data
Следующий шаг – конвертация датафрейма в строку для ее передачи в языковую модель.
Листинг 7. Преобразование датафрейма в строку
data = data.astype(str)
Прогнозирование. Первым этапом будет загрузка модели и ее токенизация.
Листинг 8. Загрузка модели и токенизация.
model = 'google/tapas-base-finetuned-wtq'
tapas_model = AutoModelForTableQuestionAnswering.from_pretrained(model)
tapas_tokenizer = AutoTokenizer.from_pretrained(model)
Инициализация pipeline-ов. Для этого необходимо обработать pipeline, а также реализовать функцию обработки.
Листинг 9. Инициализация pipeline-ов
nlp = pipeline('table-question-answering', model=tapas_model, tokenizer=tapas_tokenizer)
def qa(query,data):
print('>>>>>')
print(query)
result = nlp({'table': data,'query':query})
answer = result['cells']
print(answer)
Идентификация запросов к базе данных. Для того, чтобы задать вопрос, необходимо вызвать функцию, инициализация которой была выше, а также во входных параметрах передать фразу и модель.
Листинг 10. Запросы к базе данных
prediction = qa('What is the biggest portal user id?',data)
Необходимо привести в отчете снимки экранов, поясняющие все указанные действия для Вашего варианта. Также необходимо привести снимки экранов с результатами вывода ответов на несколько различных естественно-языковых запросов к данным, определяемым вариантом.
Контрольные вопросы
Что такое NLP и для чего оно нужно?
Для чего нужно обучение модели?
Что такое токенизация текста?
Что такое Tapas?
Список литературы
Реализация Датасета. [Электронный ресурс]: https://github.com/wenhuchen/OTT-QA
Генерация API ключа. [Электронный ресурс]: https://app.pinecone.io/organizations/-NPc_CTrO3RfTiYJ6noa/projects/us-east1-gcp:1eb6d07/indexes
Как токенизация упрощает работу с чувствительными данными. [Электронный ресурс]. URL: https//habr.com/ru/post/546640/
NLP. [Электронный ресурс]. https://habr.com/ru/hub/natural_language_processing/