Falcon-7B-Instruct LLM with LangChain: Расширение возможностей обработки языка как никогда ранее

Что такое LangChain?

LangChain – это фреймворк для разработки приложений на основе языковых моделей. Мы считаем, что наиболее мощные и дифференцированные приложения будут не только обращаться к языковой модели через API, но и:

  1. Быть ориентированным на данные: подключить языковую модель к другим источникам данных
  2. Быть агентивным: позволять языковой модели взаимодействовать со своим окружением

Примеры использования LangChain
Описания и лучшие практики использования LangChain:

🗃️ QA over Documents
🗃️ Analyzing structured data
🗃️ Extraction
🗃️ Interacting with APIs
🗃️ Chatbots
🗃️ Summarization
🗃️ Code understanding
🗃️ Agent simulations
🗃️ Agents
🗃️ Autonomous (long-running) agents
🗃️ Code writing
🗃️ Analyzing graph data
🗃️ Multi-modal
🗃️ Self-checking

Весь приведенный ниже код выполняется на ноутбуке Google Colab с использованием Transformers. Он требует наличия таких зависимостей, как Einops, а Accelerate. Сам фреймворк управляет ресурсами, эффективно используя память CPU и GPU.

Благодаря этим элементам код работает в Colab без сбоев, предлагая расширенные возможности языкового моделирования с помощью Transformers на базе Einops и Accelerate.

!pip install -q transformers einops accelerate langchain bitsandbytes
from langchain import HuggingFacePipeline
from transformers import AutoTokenizer, pipeline
import torch

model = "tiiuae/falcon-7b-instruct" #tiiuae/falcon-40b-instruct

tokenizer = AutoTokenizer.from_pretrained(model)

pipeline = pipeline(
    "text-generation", #task
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto",
    max_length=200,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id
)
  1. from langchain import HuggingFacePipeline: Эта строка импортирует класс HuggingFacePipeline из модуля langchain. Класс HuggingFacePipeline,является пользовательской реализацией или расширением существующего конвейера Hugging Face.
  2. from transformers import AutoTokenizer, pipeline: Эта строка импортирует класс AutoTokenizer и функцию pipeline из модуля transformers. Класс AutoTokenizer используется для загрузки соответствующего токенизатора для указанной модели, а функция pipeline – для создания конвейера для конкретной NLP-задачи.
  3. model = “tiiuae/falcon-7b-instruct” #tiiuae/falcon-40b-instruct: Эта строка определяет переменную model и присваивает ей значение имени модели “tiiuae/falcon-7b-instruct” или “tiiuae/falcon-40b-instruct” в зависимости от закомментированного раздела. Оно указывает, какая предварительно обученная языковая модель будет использоваться.
  4. tokenizer = AutoTokenizer.from_pretrained(model): В этой строке создается экземпляр токенизатора для указанной модели. Метод AutoTokenizer.from_pretrained загружает токенизатор, соответствующий указанной модели.
  5. pipeline = pipeline(…): Эта строка задает конвейер для генерации текста по указанной модели и токенизатору. Функция pipeline принимает несколько параметров:
  • “text-generation”: Указывает на задачу генерации текста.
  • model=model: Указывает модель, которую следует использовать для генерации текста.
  • tokenizer=tokenizer: Указывает токенизатор, который будет использоваться для обработки входного текста.
  • torch_dtype=torch.bfloat16: Устанавливает тип данных для вычислений в PyTorch – bfloat16, 16-битный формат с плавающей точкой, который более эффективен для памяти, чем float32, используемый по умолчанию.
  • trust_remote_code=True: Разрешает доверять удаленному коду модели (обычно это необходимо при использовании пользовательских моделей или удаленных источников).
  • device_map=”auto”: Автоматически выбирает устройство (CPU или GPU) для вывода модели.
  • max_length=200: Устанавливает максимальную длину генерируемого текста в 200 лексем.
  • do_sample=True: Включает случайную выборку при генерации текста.
  • top_k=10: Ограничивает количество слов top-k, учитываемых при генерации текста.
  • num_return_sequences=1: Указывает количество возвращаемых последовательностей сгенерированного текста.
  • eos_token_id=tokenizer.eos_token_id: Устанавливает идентификатор маркера конца последовательности для корректного завершения текста.
llm = HuggingFacePipeline(pipeline = pipeline, model_kwargs = {'temperature':0})

Эта строка кода создает экземпляр класса HuggingFacePipeline с тем же конвейером генерации текста, что и раньше, и задает аргумент модели (температуру) со значением 0, что делает генерацию текста более целенаправленной и детерминированной. model_kwargs={‘temperature’: 0}: Параметр model_kwargs представляет собой словарь, содержащий дополнительные аргументы для модели. В данном случае он устанавливает параметр temperature в 0. Temperature – это гиперпараметр, используемый при генерации текста, который управляет случайностью вывода. При значении параметра temperature, равном 0, генерируется более детерминированный и сфокусированный текст, что уменьшает случайность.

from langchain import PromptTemplate,  LLMChain

template = """
You are an intelligent chatbot. Help the following question with brilliant answers.
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["question"])

llm_chain = LLMChain(prompt=prompt, llm=llm)

question = "Elon musk VS Donald trump for president election" 

print(llm_chain.run(question))

ВЫХОД:

The 2020 US Presidential Election is between Elon Musk, 
a billionaire businessman and space exploration enthusiast from Tesla, 
and Donald J. Trump, a businessman and former reality TV star. 
Elon Musk's platform is focused on advancing humanity and the colonization of Mars, 
while Trump's platform involves increasing American jobs, reducing trade deals with China, and improving national security. 
Both candidates are well-known personalities in their respective fields, offering a wide range of perspectives on the future and how it could be shaped. 
Ultimately, the election is up to the voters, who should carefully consider their values, beliefs, and the candidates' positions before deciding who to vote for.
  1. from langchain import PromptTemplate, LLMChain: Эта строка импортирует два класса, PromptTemplate и LLMChain, из библиотеки langchain. Эти классы будут использоваться для создания цепочки языковых моделей с шаблоном для генерации ответов.
  2. template = “”” … Ответ:”””: Это многострочная строка, определяющая шаблон для генерации ответов. Она начинается с общего утверждения об интеллектуальном чатботе и содержит заполнители для входного вопроса и генерируемого ответа.
  3. prompt = PromptTemplate(template=template, input_variables=[“question”]): Здесь создается объект PromptTemplate с именем prompt. В качестве аргумента template указывается шаблон, определенный ранее, а список input_variables содержит имена переменных, которые должны быть заменены в шаблоне. В данном случае единственной входной переменной является “question”, которая будет заменена на собственно заданный вопрос.
  4. llm_chain = LLMChain(prompt=prompt, llm=llm): Создается объект LLMChain с именем llm_chain, формирующий цепочку языковой модели. Он объединяет объект prompt с объектом llm (HuggingFacePipeline), указывая, что языковая модель будет использовать шаблон для генерации ответов.
  5. вопрос = “Элон Муск VS Дональд Трамп на выборах президента”: Пример вопроса предоставляется в виде строки. Этот вопрос будет использован в качестве входного сигнала для цепочки языковой модели.
  6. print(llm_chain.run(question)): Вызывается метод run объекта llm_chain с вопросом в качестве входных данных. Это запускает языковую модель для генерации ответов на заданный вопрос по заданному шаблону.

Рад быть полезным.

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *