Взгляд на анализ разговорных данных с помощью естественного языка
Стремительный прогресс крупных языковых моделей, в том числе увлекательных приложений, таких как ChatGPT, постоянно демонстрирует замечательные возможности этой технологии, и каждый день появляются инновационные варианты использования. В этой статье мы более подробно рассмотрим PandasAI — диалоговую библиотеку, которая позволяет вам буквально говорить с вашими данными и исследовать некоторые убедительные примеры.
Введение
Ландшафт написания компьютерного кода претерпел драматические изменения. Прошли те времена, когда программисты тратили бесчисленные часы на поиск ответов в Google и просмотр записей форума Переполнение стека. Сейчас мы вступили в эпоху кодирования с помощью ИИ, что значительно ускорило процесс разработки. Во-первых, были такие инструменты, как GitHub Copilot, которые позволяли вам вводить строки документации и давали устрашающе хорошие предложения по коду; с ChatGPT вы можете просто ввести то, что хотите сделать, и он выдаст код длины скрипта. Функция чата упрощает процесс устранения неполадок, позволяя быстро идентифицировать и разрешать сообщения об ошибках.
Будущее программирования готово к значительным изменениям: вместо того, чтобы осваивать абстрактные концепции языка программирования, пользователи скоро будут общаться с компьютерами и данными, используя разговорный язык. Текущие достижения в библиотеках предполагают, что это изменение уже происходит. Например, LangChain, очень популярная служебная библиотека для создания инструментов на основе больших языковых моделей, представляет собой демонстрацию агента Pandas DataFrame. Пользователи могут загрузить свой Pandas DataFrame, задать вопрос, и агент сошлется на соответствующий код и предоставит исчерпывающий ответ. Для тех, кто не знаком с Pandas, это широко используемая библиотека Python для обработки табличных данных. Следующий пример из документации иллюстрирует это взаимодействие:
from langchain.agents import create_pandas_dataframe_agent from langchain.llms import OpenAI import pandas as pd df = pd.read_csv('titanic.csv') agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True) agent.run("how many rows are there?")
Выведет следующий вывод:
> Entering new AgentExecutor chain... Thought: I need to count the number of rows Action: python_repl_ast Action Input: len(df) Observation: 891 Thought: I now know the final answer Final Answer: There are 891 rows in the dataframe. > Finished chain.
Для этого на LangChain создан пакет yolopandas.
Представляем PandasAI
PandasAI — это еще один пакет, разработанный для предоставления диалогового интерфейса для Pandas DataFrames. Всего за несколько дней он приобрел значительную популярность на GitHub, набрав 3,6 тысячи звезд — примечательное достижение, учитывая, что исходный пакет Pandas имеет около 38 тысяч звезд. Что отличает PandasAI, так это простота установки через pip, позволяющая пользователям начать работу всего с несколькими строками кода. Чтобы проиллюстрировать, вот как я настроил его в своей среде conda на M1 Mac вместе с Jupyter:
conda create --name pandasai python=3.10 conda activate pandasai pip install pandasai conda install jupyter
Если вы получаете ошибку 500 при запуске Jupyter, скорее всего, это эта ошибка, и решение заключается в исправлении зависимости: pip install --force-reinstall charset-normalizer=3.1.0
.
Теперь возьмем краткий пример из документации: Здесь мы используем доступ к OpenAI API, но в принципе можно использовать и OpenAssistant.
import pandas as pd from pandasai import PandasAI # Sample DataFrame df = pd.DataFrame({ "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"], "gdp": [19294482071552, 2891615567872, 2411255037952, 3435817336832, 1745433788416, 1181205135360, 1607402389504, 1490967855104, 4380756541440, 14631844184064], "happiness_index": [6.94, 7.16, 6.66, 7.07, 6.38, 6.4, 7.23, 7.22, 5.87, 5.12] }) # Instantiate a LLM from pandasai.llm.openai import OpenAI llm = OpenAI(api_token="YOUR_OPENAI_API_KEY") pandas_ai = PandasAI(llm) pandas_ai.run(df, prompt='Which are the 5 happiest countries?')
Это сработало как шарм:
«Согласно данным, в пятерку самых счастливых стран входят Канада, Австралия, Великобритания, Германия и США».
Если перефразировать подсказку:Which are the countries with the largest gpd?
,
результат будет таким:
«Страны с самым большим ВВП — это США, Китай, Япония, Германия и Великобритания. США имеют самый высокий ВВП, за ними следуют Китай и Япония. Эти страны имеют сильную экономику и вносят значительный вклад в мировой рынок».
Этому есть даже более подробное объяснение. Демонстрация быстрого запуска также показывает, что вы можете рисовать и, опять же, с немного измененной демо-подсказкой:Plot the histogram of countries showing for each the gpd, using different shades of blue for each bar
Это работает замечательно хорошо. Теперь я бы предположил, что он знает функциональность pandas от и до, поэтому давайте увеличим сложность на ступеньку:Make a scatterplot with gdp vs happines for each country. Add horizontal and vertical lines for the average happines and gpd.
Обратите внимание, что я специально написал happines
— опечатка, а во фрейме данных имя столбца это happiness_index
. Тем не менее, он работает безупречно:
Обратите внимание, что PandasAI предположительно изменяет фрейм данных на месте, основываясь на подсказках, например. если ваша подсказка add a column with gdp divided by happines
, это будет сделано. Однако для приведенного выше примера groupby
этого не произошло.
Теперь какие ограничения? Как насчет запроса типа:Plot the histogram of countries showing for each the gpd. Make countries in Europe red and the rest blue.
,
для которого потребуется дополнительная информация извне. Для меня это вызвало FileNotFoundError
и выявило потенциальные ограничения.
Кроме того, при отходе от примера набора данных все стало более хрупким. Пример набора данных имеет длинный формат, т. е. по одной точке данных на строку. При тестировании с широким форматом (несколько точек данных в каждой строке) ничего не получалось. Действительно, вам может потребоваться выполнить предварительное форматирование, чтобы убедиться, что ваши данные правильно структурированы и совместимы с пакетом PandasAI.
PandasAI встречает Streamlit
Если вы хотите попробовать PandasAI, не погружаясь в кодирование, я создал удобное приложение Streamlit, которое взаимодействует с пакетом. Вы можете найти исходный код на GitHub, а также доступна онлайн-версия, размещенная на Streamlit Share. Однако вам нужно будет ввести ключ OpenAI-API. Попробуйте и убедитесь в беспрепятственном взаимодействии с Pandas DataFrames через диалоговый интерфейс.
Обсуждение
PandasAI демонстрирует плавную интеграцию больших языковых моделей в установленные рабочие процессы и непрерывную трансформацию анализа данных. Если вы аналитик данных, умеющий пользоваться библиотеками, и ваша основная обязанность заключается в создании графиков на основе пользовательских спецификаций, существует большая вероятность того, что этот процесс можно эффективно автоматизировать. Достижения в области искусственного интеллекта и диалоговых интерфейсов революционизируют то, как мы взаимодействуем с данными, оптимизируя задачи и делая анализ данных более доступным, чем когда-либо прежде.
Очевидно, это сместит акцент с как реализовать определенный анализ на какой анализ делать. Одной из проблем, связанных с использованием естественного языка, является потенциальная двусмысленность. Например, мы заметили, что термин «счастье» привел к использованию индекса счастья, но всегда ли это предположение верно? Вполне возможно, что роль аналитиков данных могла бы выйти за рамки указаний большим языковым моделям о том, что строить. Вместо этого они могут полагаться на расширенные подсказки или «супер-подсказки», которые сначала запрашивают наиболее подходящие показатели для принятия решений по конкретной теме, а затем просят ИИ создать соответствующие визуальные эффекты. Этот сдвиг позволит использовать более комплексный и тонкий подход к анализу данных, используя возможности ИИ для принятия более обоснованных решений.