Время прочтения: 13 мин.

Кто такой buddy? Человек, который может подсказать решение, когда ты зашёл в тупик, подскажет, как лучше прокачать навыки, ответит, если тебе что-то непонятно. Личный buddy – мечта любого. Мы с моим коллегой DA/DS-аудиторы и решили протестировать новые инструменты: ChatGPT, чат поисковика Bing и выяснить, смогут ли они стать нашими buddy.

Получаем доступ и начинаем использовать

Как известно, оба инструмента сейчас недоступны из России. Но наш верный друг VPN решает эту проблему. Для того, чтобы зарегистрироваться в ChatGPT, также понадобится иностранный номер телефона, а для Bing – учётная запись Microsoft.

Рис. 1 Интерфейс ChatGPT
Рис. 2 Интерфейс чата Bing

По характеристикам наши будущие помощники различаются не сильно, но имеют ряд ограничений. Например, в Bing можно отсылать только 30 сообщений в 1 чате, 150 в день. В ChatGPT ограничение составляет 100 запросов в течение четырех часов.

Охват знаний Microsoft Bing и ChatGPT

Оба инструмента обучались на данных, собранных до сентября 2021 года. Но чат Bing имеет функционал поиска и агрегирования информации, взятой из интернета, в отличие от базовой-бесплатной версии ChatGPT. Это может делать данные, полученные от него, более точными, он дает ссылки в ответ на вопрос и, что немаловажно, ссылки на источник информации, из которых он формировал ответ. Это поможет проверить достоверность сведений, которые предоставляет чат.

Сегодня аудиторам уже недостаточно владеть знаниями о профильной составляющей. Большие объёмы доступной информации вынуждают знакомиться с инструментами, которые позволили бы её обрабатывать, подключать инструменты машинного обучения, чтобы выявлять отклонения, собирать ещё больше информации. Такие задачи решают специалисты по направлению Data Analysis или Data Science и аудиторам приходится осваивать новые для себя знания.

Если вы захотели освоить профессию Data Analyst или Data Scientist и не знаете, с чего начать, вы можете спросить об этом у чатов. И Bing, помимо того, что расскажет, что нужно изучать Python, SQL, машинное обучение и прочие полезные дисциплины, даст еще и ссылки на Яндекс Практикум и SkillFactory.  Также оба чата могут составить базовый план по обучению в выбранном направлении.

Рис. 3 Ответ Bing по плану обучения
Рис. 4 Ответ ChatGPT о возможностях помощи Data Scientist

В итоге, мы пришли к выводу, что ChatGPT и Bing легко справляются с задачами buddy в части помощи в создании плана обучения, определения навыков для развития и рекомендаций обучающих материалов и курсов.

Охват знаний чат-ботов для конкретного кейса

Например, мы проводим аудиторскую проверку автотранспорта в организации, где для отслеживания маршрутов используется система Wialon. Узнаем, что может о ней рассказать ChatGPT?

Рис. 5 Ответ ChatGPT по Wialon

Нас интересует система мониторинга топлива. Попросим рассказать подробнее.

Рис. 6 Ответ ChatGPT о системе мониторинга топлива

А если попросить описать пример аудиторской проверки?

Рис. 7 Ответ ChatGPT – пример аудиторской проверки

В итоге ChatGPT справился с задачами, дал развернутые ответы, которые могут пригодится при планировании и проведении проверки.

Рис. 8 Результат выполнения запроса, сгенерированного Bing

Bing, в связи с ограничениями по количеству символов, дал ответы общего характера, при этом тоже был знаком с системой контроля за авто.

Тестируем в задачах DA/DS-аудиторов

В современном мире аудиторам нужно иметь множество IT-компетенций. Работа с базами, обработка больших данных, использование различных инструментов для установления связей между сущностями. Допустим, в нашей организации используются такие инструменты как Hadoop и PySpark, где пригодятся знания SQL, Process Mining, Graph Mining, язык Python, методы Machine learning.

Как же ИИ помогут нам в решении реальных задач?

SQL

Для примера возьмём одну из задач «Интерактивного тренажёра SQL» на Stepik. У нас есть база данных с данными по продажам книг. Нам нужно найти среднее количество книг на складе, а также те книги, количество которых отличается от среднего на 3. Оба чата мы можем попросить построить таблицу по нашим данным, если размер этих данных невелик. Это может помочь объяснить ассистентам структуру таблицы. В случае, если таблица велика, можно загрузить в чат кэша только часть.

Рис.9 Пример запроса ChatGPT
Рис.10 Пример запроса Bing

Если попросить построить sql-запрос по данной задаче, то оба помощника построят запросы, которые выдадут правильный результат. Разве что в ответе Bing меньше подзапросов, а значит его версия более производительная.

Рис. 11 Результат выполнения запроса, сгенерированного ChatGPT
Рис. 12 Результат выполнения запроса, сгенерированного Bing

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

Рис. 13 Результат выполнения запроса Bing

Среднее количество книг он вычислил верно, но в целом ответ неправильный.

Поиск ошибок в коде – Code mining

Одна из задач аудита – анализ кода. Поиск ошибок в чужом коде требует навыков и опыта. Некоторые примеры выполнения такой задачи может предоставить наш помощник.

Протестируем ИИ на предмет возможностей ревьюера простого кода. Возьмем задачу Stepik курса «Поколение Python».

Рис. 14 Пример задачи
Рис. 15 Решение Bing
Рис. 16 Решение ChatGPT

Как видим, ИИ создали корректные версии кода, но описание исправлений создал только ChatGPT.

Анализ и визуализация данных

Одной из основных задач DA/DS-аудитора является анализ бизнес-процессов и визуализация данных. Возьмём пример создания графа процесса с помощью методов process mining. Допустим, у нас есть данные о процессе работы с договором, представленные в формате, удобном для изучения методами process mining: 3 колонки – номер случая, действие, время. Чтобы объяснить ChatGPT структуру данных, так же загружаем данные в чат по примеру выполнения первой задачи, а потом просим построить граф процесса.

Рис. 17 Результат выполнения запроса ChatGPT

Для отображения система взяла в обработку только один случай и не считала время, только дату, но результат всё равно интересный. Далее можно спросить, какие библиотеки можно использовать для построения графа. В список попали pm4py, ProM, NetworkX, Graph-tool. Хотя последние две больше подходят для граф майнинга, в принципе, на базе этого ответа можно двигаться дальше. Попросим её сгенерировать код для pm4py.

Рис. 18 Результат выполнения запроса ChatGPT

Для того, чтобы этот код заработал, нужно установить pm4py. Тот, кто работал с этой библиотекой, знает, что путь к рабочей версии тернист. И здесь тоже можно попросить совета у чата. Для новичка может быть не очевидно, что некоторые из зависимостей могут конфликтовать из-за версий, или что может понадобиться установка дополнительных модулей. И ChatGPT вполне может выдать базовые инструкции для решения типичных проблем.

После решения всех проблем получаем следующий результат.

Рис. 19 Результат выполнения кода Python

Не особо информативно. Но можно спросить о других алгоритмах для построения дерева процесса, сразу с примерами кода. Нам расскажут про такие методы как Alpha Miner, Heuristics Miner, Inductive Miner. Если выбрать Heuristics Miner, попросить написать код с его применением и выполнить его, получим такой результат.

Рис. 20 Результат выполнения кода Python

Достаточно запутанно, но уже более связно.

Bing на запрос построить граф ответил отказом. В остальном, его примеры кода практически один в один повторяли примеры из ChatGPT.

Рис. 21 Результат выполнения запроса в Bing

Таким образом, ИИ может действительно подсказать информацию по анализу процессов и визуализации данных, но при взаимодействии нужно помнить о корректности постановки запросов, добавлять и конкретизировать вводные. 

Задача по анализу договоров – NLP

Допустим, в рамках задачи, нам необходимо проанализировать множество договоров. Чтобы не собирать данные вручную, можно cпросить у чата, как это сделать.

Спросим ChatGPT, как проанализировать договор, достать ФИО, адрес, сумму, название организации в Python. Ответ мы получим такой:

«Чтобы проанализировать текст договора и извлечь информацию, такую как ФИО, адрес, сумма и название организации, вам потребуется использовать инструменты для обработки естественного языка (Natural Language Processing, NLP) в Python. Один из популярных инструментов для этой цели — библиотека Spacy. Вот пример того, как можно использовать Spacy для анализа текста:

1.Установите Spacy с помощью pip:

pip install spacy

2. Загрузите модель языка, подходящую для вашей задачи. Например, модель ru_core_news_sm для русского языка:

import spacy
nlp = spacy.load('ru_core_news_sm')

3. Подготовьте текст договора и передайте его в объект Doc:

text = '''
Договор купли-продажи №12345
г. Москва, ул. Примерная, д. 10, кв. 5
Продавец: Иванов Иван Иванович
Покупатель: Петров Петр Петрович
Сумма: 10000 рублей
'''
doc = nlp(text)

4. Произведите анализ документа и извлеките необходимую информацию. Например:

fio = []
address = ""
summa = ""
organization = ""

for entity in doc.ents:
    if entity.label_ == 'PER':  # Извлечение ФИО
        fio.append(entity.text)
    elif entity.label_ == 'LOC':  # Извлечение адреса
        address = entity.text
    elif entity.label_ == 'MONEY':  # Извлечение суммы
        summa = entity.text
    elif entity.label_ == 'ORG':  # Извлечение названия организации
        organization = entity.text
 
print("ФИО продавца и покупателя:", fio)
print("Адрес:", address)
print("Сумма:", summa)
print("Название организации:", organization)

В данном примере используется разметка PER для извлечения ФИО, LOC для адреса, MONEY для суммы и ORG для названия организации. Вы можете настроить это соответствие в зависимости от своих потребностей.Обратите внимание, что эта реализация предоставляет базовый пример и может потребовать доработки для обработки более сложных и разнообразных текстов договоров.»

И действительно, данный пример достаточно простой. В настоящей работе данные, как правило, куда более сложно структурированы. Но в этом случае мы можем попробовать дообучить готовую модель.

Спросим о возможности дообучить модель извлечения сущностей на своих примерах. Что же ответит нам нейросеть?

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

  1. Подготовьте размеченные данные:

Создайте текстовый файл, где каждая строка содержит размеченное предложение. Формат разметки должен быть в соответствии с форматом Spacy, где сущности помечаются внутри предложения с использованием тегов в IOB (Inside-Outside-Beginning) или IOBES (Inside-Outside-Beginning-End-Single) схемах разметки.

2. Загрузите и обработайте размеченные данные:

  • Используйте библиотеку Spacy, чтобы создать объект nlp с необходимой моделью языка, например, ru_core_news_sm.
  • Создайте новый пустой объект ner (извлечение сущностей) с использованием nlp.create_pipe() и добавьте его в конвейер обработки nlp:
ner = nlp.create_pipe('ner')
nlp.add_pipe(ner)
  • Добавьте метки сущностей, которые вы хотите извлекать, в ner:
ner.add_label('DOC_NUMBER')
ner.add_label('PERSON')
# Добавьте остальные метки сущностей, которые вам нужны

3.  Обучите модель на размеченных данных:

Итерируйтесь по размеченным данным и добавляйте примеры в модель:

examples = []
with open('размеченные_данные.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    current_tokens = []
    current_tags = []
    for line in lines:
        line = line.strip()
        if line:
            token, tag = line.split(' ')
            current_tokens.append(token)
            current_tags.append(tag)
        else:
            examples.append((current_tokens,  {'entities': current_tags}))
            current_tokens = []
            current_tags = []
# Используйте примеры для обучения модели
for tokens, annotations in examples:
    nlp.update([tokens], [annotations])

4.  Повторите процесс дообучения модели с несколькими эпохами (итерациями) на размеченных данных.

5.  Сохраните дообученную модель:

nlp.to_disk('модель_извлечения_сущностей')

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

В данном ответе не совсем ясно, как же именно размечать текст. Спросим об этом дополнительно и получим такую информацию:

Рис. 22 Пример разметки в формате IOB

«В приведенном примере каждый токен представлен в отдельной строке. Токен разделен от его тега с помощью пробела. Первый столбец содержит токен, а второй столбец содержит его тег сущности.

Теги сущностей используют следующие префиксы:

B- (Beginning) — начало сущности.

I- (Inside) — продолжение сущности.

O (Outside) — не является частью сущности.

В данном примере используются следующие метки сущностей:

DOC_NUMBER — номер документа.

LOC — местоположение или адрес.

PERSON — имя и фамилия человека.

MONEY — сумма денег.

Обратите внимание, что разметка должна быть согласована с токенизацией текста, то есть каждый токен должен быть разделен новой строкой и соответствовать разделению токенов в исходном тексте.»

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

Спросим Bing как проанализировать договор, достать ФИО, адрес, сумму, название организации python.

«Один из способов решения этой задачи — использование библиотеки для обработки текста, например, re или nltk. С помощью регулярных выражений можно искать в тексте договора информацию о ФИО, адресе, сумме и названии организации. Например:

import re
text = "Текст договора"

fio_pattern = r"ФИО: (\w+ \w+ \w+)"
address_pattern = r"Адрес: ([\w\s]+)"
sum_pattern = r"Сумма: (\d+)"
org_name_pattern = r"Организация: ([\w\s]+)"
 
fio = re.search(fio_pattern, text)
address = re.search(address_pattern, text)
sum = re.search(sum_pattern, text)
org_name = re.search(org_name_pattern, text)
 
if fio:
    print(f"ФИО: {fio.group(1)}")
if address:
    print(f"Адрес: {address.group(1)}")
if sum:
    print(f"Сумма: {sum.group(1)}")
if org_name:
    print(f"Организация: {org_name.group(1)}")»


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

Выводы

На основании практического использования мы пришли к выводу, что данные разработки являются прорывом в мире универсальных помощников. Они помогают решать простые задачи, сокращать время, затрачиваемое на поиск информации, но для роли полноценного buddy DA/DS-аудитора еще не готовы – необходимо дополнительное профильное обучение под конкретные задачи. На данный момент каждая крупная компания мира пытается вести собственные разработки, и со временем ИИ станут частью нашей повседневной жизни, заменят существующие поисковые системы, будут цифровыми buddy для начинающих DA, DS специалистов, в том числе и аудиторов. 

P.S.

Изображение к данной статье – отсылка к недавно вышедшей игре Atomic heart российской студией Mundfish, где события развиваются в альтернативном СССР, совершившим технологический прорыв в робототехнике и создании ИИ. Спутником главного героя является «разумная» перчатка, обладающая знаниями советских ученых и способностью отвечать на любые вопросы, проводить анализ и справляться с головоломками, а противниками являются «восставшие» роботы помощники.

С релизом ChatGPT в сети форсят тему замены ряда профессий, например, копирайтеров и маркетологов, писателей и сценаристов, помощников юристов. Так,члены Конгресса США забили тревогу по поводу опасностей ИИ: Илон Маск, Стив Возник и 1000 экспертов подписали обращение с призывом остановить обучение нейросетей, пока не появятся единые протоколы безопасности и риски будут управляемыми. В свете последних событий будущее ИИ непрозрачно. Что будет дальше – посмотрим, но интересно точно!