Случвало ли ви се е да прочетете множество документи, само за да сте в течение по дадена тема? Възможността за бързо обобщаване на документи е една от задачите, които можете да направите с много малко усилия благодарение на нашата библиотека.

В тази публикация ще ви покажем колко лесно е да обобщите съдържанието на уеб страници с помощта на unstructured, langchain и OpenAI.

Целият код по-долу може да бъде намерен в следния Бележник на Colab.

Получаване на информация

Преди всичко ще ви трябва начин да извлечете или изтеглите съдържанието на уеб страница и за тази цел ще използваме класа UnstructuredURLLoader от langchain. Тази функция връща товарач и след като извикате .load(), получавате елементи, които след това можете да филтрирате само до полезната информация, премахвайки JS код и неподходящо съдържание от HTML. И така, дефинираме функция generate_document:

from langchain.document_loaders import UnstructuredURLLoader
from langchain.docstore.document import Document
from unstructured.cleaners.core import remove_punctuation,clean,clean_extra_whitespace
from langchain import OpenAI
from langchain.chains.summarize import load_summarize_chain
def generate_document(url):
 "Given an URL, return a langchain Document to futher processing"
 loader = UnstructuredURLLoader(urls=[url],
 mode="elements",
 post_processors=[clean,remove_punctuation,clean_extra_whitespace])
 elements = loader.load()
 selected_elements = [e for e in elements if e.metadata['category']=="NarrativeText"]
 full_clean = " ".join([e.page_content for e in selected_elements])
 return Document(page_content=full_clean, metadata={"source":url})

Ние просто запазваме NarrativeTextelements и използваме „тухлите за почистване“ за изтриване на странни знаци и друго съдържание, което не е полезно. Последната част от функцията създава Documentобект от langchain за съхраняване на цялото получено съдържание.

Създаване на тръбопровода за обобщаване

Следващата стъпка е да създадете конвейер за поглъщане на документите, да ги разделите на части, за да захраните езиков модел, да извикате OpenAI API, да получите резултата и да го съхраните. Звучи като много работа? Абсолютно не, това е само малка функция благодарение на langchain:

def summarize_document(url,model_name):
 "Given an URL return the summary from OpenAI model"
 llm = OpenAI(model_name='ada',temperature=0,openai_api_key=openai_key)
 chain = load_summarize_chain(llm, chain_type="stuff")
 tmp_doc = generate_document(url)
 summary = chain.run([tmp_doc])
 return clean_extra_whitespace(summary)

По същество създаваме llmobject за извикване на API (с модел „Ada“) и използваме документите, които сме генерирали, получавайки резултата от модела.

И това е всичко! В замяна на тази функция ще получим обобщението за всеки URL адрес, който му подаваме.

Едно от предимствата на нашия инструмент е, че можете да изпращате по-малко токени към OpenAPI, спестявайки таксуването, вместо да изпращате цялото HTML съдържание на страницата (но понякога е невъзможно да се направи това, тъй като текущите модели имат ограничения за количеството токени вие ги изпращате). Също така е полезно да знаете, че разполагаме с множество „тухли за разделяне“, за да подготвим вашите данни за този вид задача, така че можете да използвате пълния потенциал на този LLM с малко усилия. PDF файлове, DOCX файлове, имейли... каквото и да е!

Съвети

  • Вероятно искате да използвате механизъм за съхраняване на предварително обобщена информация, за да не обработвате повторно URL адреси. За тази цел в бележника Colab използваме cachier.
  • Налични са други доставчици за LLMs, вижте langchaindocs за повече информация.

Първоначално публикувано в https://medium.com на 24 юли 2023 г.