Случвало ли ви се е да прочетете множество документи, само за да сте в течение по дадена тема? Възможността за бързо обобщаване на документи е една от задачите, които можете да направите с много малко усилия благодарение на нашата библиотека.
В тази публикация ще ви покажем колко лесно е да обобщите съдържанието на уеб страници с помощта на 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})
Ние просто запазваме NarrativeText
elements и използваме „тухлите за почистване“ за изтриване на странни знаци и друго съдържание, което не е полезно. Последната част от функцията създава 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)
По същество създаваме llm
object за извикване на API (с модел „Ada“) и използваме документите, които сме генерирали, получавайки резултата от модела.
И това е всичко! В замяна на тази функция ще получим обобщението за всеки URL адрес, който му подаваме.
Едно от предимствата на нашия инструмент е, че можете да изпращате по-малко токени към OpenAPI, спестявайки таксуването, вместо да изпращате цялото HTML съдържание на страницата (но понякога е невъзможно да се направи това, тъй като текущите модели имат ограничения за количеството токени вие ги изпращате). Също така е полезно да знаете, че разполагаме с множество „тухли за разделяне“, за да подготвим вашите данни за този вид задача, така че можете да използвате пълния потенциал на този LLM с малко усилия. PDF файлове, DOCX файлове, имейли... каквото и да е!
Съвети
- Вероятно искате да използвате механизъм за съхраняване на предварително обобщена информация, за да не обработвате повторно URL адреси. За тази цел в бележника Colab използваме
cachier
. - Налични са други доставчици за LLMs, вижте
langchain
docs за повече информация.
Първоначално публикувано в https://medium.com на 24 юли 2023 г.