Открывайте мир с LangChain общайтесь с ваших документами, чат-бот для перевода, общайтесь с Википедией, генератор синтетических данных

Расширьте свой мир с LangChain общайтесь с документами, переводчик-чат-ботом, исследуйте Википедию, генерируйтe синтетические данные

Рост мира генеративного искусственного интеллекта также возможен благодаря важной библиотеке Python: LangChain, и интерес к нему растет в последние месяцы, как показано на следующем графике.

Google Trends

Что такое LangChain?

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

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

LangChain создан на основе нескольких компонентов.

  • Схема: это основная структура данных, используемая для построения моделей искусственного интеллекта, и она может быть представлена в разных формах, включая текст, чат-сообщения и документы.
  • Модели: фреймворк покрывает несколько моделей. Большие языковые модели принимают текстовую строку на вход и возвращают текстовую строку в качестве выхода. Модели чат-ботов принимают список чат-сообщений на вход и возвращают чат-сообщение. Модели текстового вложения принимают текст на вход и возвращают вектор, список чисел с плавающей запятой.
  • Подсказки: они представляют новый способ программирования моделей. Плохие подсказки дают плохие результаты, а хорошие подсказки являются мощными. Хорошая подсказка может быть структурирована с использованием нескольких объектов, таких как шаблон, с конкретными примерами и обработкой вывода.
  • Индексы: они позволяют LLM взаимодействовать с документами. Они получают запрос пользователя и возвращают наиболее актуальную информацию. Существует несколько типов индексов: загрузчики документов, разделители текста, векторные хранилища и получатели. Загрузчики документов используются для загрузки документов из разных источников, разделители текста используются для разбивки запроса пользователя на более мелкие части, векторные хранилища могут хранить большое количество вложений, а получатели используются для получения актуальной информации из загруженных данных.
  • Память: она позволяет системам искусственного интеллекта запоминать предыдущие разговоры с пользователями и лучше понимать контекст пользователя. Память сохраняется в форме истории чата.
  • Цепи: это последовательность ответов, которые производит система искусственного интеллекта в ответ на ввод пользователя. Существуют простые цепи, основанные на последовательности ответов на вопросы пользователя. Одновременно с этим существуют сводные цепи, использующие алгоритмы обработки естественного языка (NLP) для генерации сводки ввода пользователя и имитации разговоров, похожих на разговоры людей.
  • Агенты: это программные компоненты, позволяющие системе искусственного интеллекта взаимодействовать с пользователями. Существует два типа агентов: инструменты и агенты. Инструменты – это фреймворки с необходимыми ресурсами для создания приложений искусственного интеллекта. Агенты – это заранее созданные приложения искусственного интеллекта, которые можно использовать готовыми для взаимодействия с клиентами.

Типичные сценарии использования LangChain включают анализ документов, чат-боты, суммирование, анализ кода и многое другое….

В этой статье я рассмотрел четыре сценария использования, которые вы можете изучить в этой тетрадке, используя GPT 3.5 turbo от OpenAI.

Чат с вашими документами

В первом сценарии использования я ознакомился с базой знаний Q&A. Легко понять, что в такого рода приложениях загружаются документы и разделяются, чтобы создать вложения, которые хранятся в векторном хранилище — структуре данных, которая облегчает процесс поиска векторов. С помощью запроса пользователя, также преобразованного во вложение, выполняется семантический поиск, чтобы найти правильную информацию и получить ответ.

QA pipeline from LangChain

Для этой задачи я загрузил статью об обзоре по анализу настроений и обнаружении эмоций, затем получил результат одного из моих запросов:

llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')chain = load_qa_chain(llm, chain_type="map_reduce")query1 = "Could you explain the challenges in sentiment analysis and emotion analysis showed in the document?"docs = docsearch.similarity_search(query1)chain.run(input_documents=docs, question=query1)

Согласно предоставленной информации, вызовами в анализе настроений и анализе эмоций, упомянутыми в документе, являются: Недостаток ресурсов: В документе говорится о том, что одной из проблем является нехватка ресурсов, в частности, сложность сбора большого набора аннотированных данных для статистических алгоритмов. Ручная разметка большого объема данных требует времени и менее надежна. Использование эмоций: В документе отмечается, что использование эмоций в анализе настроений и анализе эмоций представляет собой вызов. Подробные сведения о том, как проявляется этот вызов, отсутствуют. Распространение веб-сленга: В документе говорится, что распространение веб-сленга является вызовом в анализе настроений и анализе эмоций. Подробные сведения о том, как это влияет на анализ, отсутствуют. Лексическая и синтаксическая неоднозначность: В документе указывается, что лексическая и синтаксическая неоднозначность является вызовом в анализе настроений и анализе эмоций. Подробные сведения о том, как этот вызов влияет на анализ, отсутствуют. Отсутствие стандартных правил для передачи чувств: В документе подчеркивается отсутствие стандартных правил для передачи чувств на различных платформах как вызов. Отмечается, что люди выражают свои эмоции по-разному, что затрудняет разработчикам разработку эффективной техники, которая может работать во всех областях. Обратите внимание, что предоставленная информация основана на извлеченных частях документа и может быть другие вызовы, не упомянутые здесь.

Переводчик чатбота

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

Чатботное трубопроводное соединение от LangChain

Ниже приведен результат одного из моих запросов:

chat = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')chat([HumanMessage(content="Переведите это предложение с английского на немецкий: Меня интересует развитие стартап-бизнеса")])

AIMessage(content='Ich interessiere mich für die Entwicklung eines Start-up-Unternehmens.')

Вот результат перевода с немецкого на английский с помощью Google переводчика в качестве теста… впечатляюще!!!

Я не владею немецким языком на должном уровне, и я думаю, что это может быть полезно, когда вам нужно что-то написать/прочитать на другом языке.

Чат с Википедией

Для третьей задачи я подумал о парсинге веб-страниц Википедии, но решил выбрать более простой способ использования библиотеки Python, которая облегчает доступ и разбор данных с Википедии. Таким образом, с помощью «WikipediaRetriever» я могу задавать вопросы и получать нужную информацию из энциклопедии. Вот результаты моих запросов.

model = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')qa = ConversationalRetrievalChain.from_llm(model, retriever=retriever)questions = [    "Что такое шторм?",    "Что такое устойчивое развитие?",    "Что такое изменение климата?",]chat_history = []for question in questions:    result = qa({"question": question, "chat_history": chat_history})    chat_history.append((question, result["answer"]))    print(f"-> **Вопрос**: {question} \n")    print(f"**Ответ**: {result['answer']} \n")

-> **Вопрос**: Что такое шторм? **Ответ**: Шторм - это погодное явление, характеризующееся сильными ветрами, осадками (такими как дождь, снег или град) и часто грозой и молниями. Штормы могут варьироваться по интенсивности и длительности и могут возникать в различных формах, таких как грозы, ураганы, бури или торнадо. Штормы могут наносить значительный ущерб имуществу и создавать угрозы для безопасности людей. -> **Вопрос**: Что такое устойчивое развитие? **Ответ**: Устойчивое развитие — это концепция, которая относится к способности поддерживать или поддерживать что-либо в долгосрочной перспективе. В контексте окружающей среды устойчивость часто сосредоточена на противодействии серьезным экологическим проблемам, таким как изменение климата, потеря биоразнообразия и загрязнение окружающей среды. Она предполагает поиск баланса между экономическим развитием, охраной окружающей среды и социальным благополучием. Устойчивое развитие может ориентировать принятие решений на глобальном, национальном и индивидуальном уровнях и стремится удовлетворить потребности текущего поколения, не compromiser la capacité des générations futures à répondre à leurs propres besoins. -> **Вопрос**: Что такое изменение климата? **Ответ**: Изменение климата относится к долгосрочным изменениям климатических условий Земли, включая изменения температуры, осадков, ветровых условий и других аспектов климатической системы. Оно обусловлено преимущественно деятельностью человека, особенно сжиганием ископаемых топлив, которые выделяют парниковые газы в атмосферу. Эти парниковые газы, такие как углекислый газ и метан, задерживают тепло и способствуют потеплению планеты. Изменение климата оказывает широкий спектр влияний на окружающую среду, экосистемы и человеческое общество, включая повышение уровня моря, все более частые и интенсивные экстремальные погодные явления, потерю биоразнообразия и угрозы здоровью и благополучию людей. Оно считается одной из величайших проблем, стоящих перед человечеством, и требует глобальных усилий по смягчению его последствий и приспособлению к изменениям.

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

Генератор синтетических данных

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

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

class MedicalCharges(BaseModel):    ID: int    Age: int    BMI: float    Height: int    Children: int    Charges: float

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

examples = [    {        "example": """ID: 123456, Age: 34, BMI: 27.9,        Children: 0, Height: 170, Charges: 1884.90"""    },    {        "example": """ID: 253459, Age: 45, BMI: 22.7,        Children: 2, Height: 167, Charges: 1725.34"""    },    {        "example": """ID: 323758, Age: 23, BMI: 18.9,        Children: 0, Height: 178, Charges: 3866.60"""    }]

На этом этапе я могу направить генератор синтетических данных на создание шаблона запроса с инструкциями для Large Language Model о том, как создавать синтетические данные в правильном формате.

OPENAI_TEMPLATE = PromptTemplate(input_variables=["example"], template="{example}")prompt_template = FewShotPromptTemplate(    prefix=SYNTHETIC_FEW_SHOT_PREFIX,    examples=examples,    suffix=SYNTHETIC_FEW_SHOT_SUFFIX,    input_variables=["subject", "extra"],    example_prompt=OPENAI_TEMPLATE,)

Теперь все готово для создания модели генератора данных и синтетических данных.

synthetic_data_generator = create_openai_data_generator(    output_schema=MedicalCharges,    llm=ChatOpenAI(temperature=1, model_name='gpt-3.5-turbo'),    prompt=prompt_template,)synthetic_results = synthetic_data_generator.generate(    subject="Medical_Charges",    extra="выбранный случайным образом",    runs=10)

Вот результаты для 10 примеров.

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

Финальные мысли

Репозиторий LangChain на GitHub набрал более 66 тысяч звезд. Это мощный инструмент, который предоставляет доступ к нескольким большим языковым моделям от различных провайдеров, таких как OpenAI, Hugging Face и Google, среди других. Эти модели могут быть использованы через вызовы API, позволяя разработчикам создавать приложения, ориентированные на повышение производительности только с небольшим количеством кода.

LangChain с его функциональностью подходит для интеграции в каждую компанию для создания разговорного и других генеративных инструментов искусственного интеллекта вокруг больших языковых моделей и станет инструментом «должен быть».

Ссылки:

Ноутбук

LangChain

Учебное пособие по LangChain

Обзор алгоритмов анализа настроений и обнаружения эмоций из текста