Ինչպես վերլուծել փաստաթղթերը LangChain-ի և OpenAI API-ի հետ


Փոքր քանակությամբ կոդով և մի քանի օգտակար գրադարաններով դուք կարող եք ստեղծել փաստաթղթերի վերլուծության այս հզոր գործիքը:

Փաստաթղթերից և տվյալներից պատկերացումներ քաղելը կարևոր նշանակություն ունի տեղեկացված որոշումներ կայացնելու համար: Այնուամենայնիվ, գաղտնիության հետ կապված մտահոգություններ են առաջանում, երբ գործ ունենք զգայուն տեղեկատվության հետ: LangChain-ը, OpenAI API-ի հետ համատեղ, թույլ է տալիս վերլուծել ձեր տեղական փաստաթղթերը՝ առանց դրանք առցանց վերբեռնելու անհրաժեշտության:

Նրանք դրան հասնում են՝ ձեր տվյալները պահելով տեղում, օգտագործելով ներկառուցումներ և վեկտորացում վերլուծության համար և ձեր միջավայրում գործընթացներ իրականացնելով: OpenAI-ը չի օգտագործում հաճախորդների կողմից իրենց API-ի միջոցով ներկայացված տվյալները՝ իրենց մոդելները վերապատրաստելու կամ ծառայությունները բարելավելու համար:

Ստեղծեք ձեր միջավայրը

Ստեղծեք նոր Python վիրտուալ միջավայր: Սա կապահովի, որ գրադարանի տարբերակների հակասություններ չլինեն: Այնուհետև գործարկեք հետևյալ տերմինալի հրամանը՝ անհրաժեշտ գրադարանները տեղադրելու համար:

pip install langchain openai tiktoken faiss-cpu pypdf

Ահա, թե ինչպես եք օգտագործելու յուրաքանչյուր գրադարանը.

  • LangChain. Դուք այն կօգտագործեք տեքստի մշակման և վերլուծության համար լեզվական շղթաներ ստեղծելու և կառավարելու համար: Այն կտրամադրի փաստաթղթերի բեռնման, տեքստի բաժանման, ներկառուցման և վեկտորային պահպանման մոդուլներ:
  • OpenAI. Դուք այն կօգտագործեք հարցումներ գործարկելու և լեզվական մոդելից արդյունքներ ստանալու համար:
  • tiktoken. Դուք այն կօգտագործեք տվյալ տեքստում թվանշանների (տեքստի միավորների) քանակը հաշվելու համար: Սա թույլ է տալիս հետևել նշանների քանակին OpenAI API-ի հետ շփվելիս, որը գանձվում է ձեր օգտագործած թոքենների քանակի հիման վրա:
  • FAISS. Դուք այն կօգտագործեք վեկտորային պահեստ ստեղծելու և կառավարելու համար՝ թույլ տալով արագ գտնել նմանատիպ վեկտորները՝ հիմնվելով դրանց ներկառուցումների վրա:
  • PyPDF. այս գրադարանը քաղում է տեքստ PDF ֆայլերից: Այն օգնում է բեռնել PDF ֆայլերը և քաղել դրանց տեքստը հետագա մշակման համար:

Բոլոր գրադարանները տեղադրելուց հետո ձեր միջավայրն այժմ պատրաստ է:

OpenAI API բանալի ստանալը

Երբ դուք հարցումներ եք կատարում OpenAI API-ին, դուք պետք է ներառեք API բանալի որպես հարցումի մաս: Այս բանալին թույլ է տալիս API մատակարարին ստուգել, որ հարցումները գալիս են օրինական աղբյուրից, և որ դուք ունեք անհրաժեշտ թույլտվություններ՝ դրա հնարավորությունները մուտք գործելու համար:

OpenAI API բանալի ստանալու համար անցեք OpenAI հարթակ:

Այնուհետև, վերևի աջ մասում գտնվող ձեր հաշվի պրոֆիլի տակ սեղմեք Դիտել API ստեղները: Կհայտնվի API ստեղներ էջը:

Սեղմեք Ստեղծել նոր գաղտնիք բանալին կոճակը: Անվանեք ձեր բանալին և սեղմեք Ստեղծել նոր գաղտնի բանալի: OpenAI-ը կստեղծի ձեր API բանալին, որը դուք պետք է պատճենեք և պահեք ինչ-որ տեղ ապահով: Անվտանգության նկատառումներից ելնելով, դուք չեք կարողանա այն կրկին դիտել ձեր OpenAI հաշվի միջոցով: Եթե կորցնեք այս գաղտնի բանալին, դուք պետք է ստեղծեք նորը:

Ամբողջական աղբյուրի կոդը հասանելի է GitHub-ի պահոցում:

Պահանջվող գրադարանների ներմուծում

Որպեսզի կարողանաք օգտագործել ձեր վիրտուալ միջավայրում տեղադրված գրադարանները, դուք պետք է ներմուծեք դրանք:

from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

Ուշադրություն դարձրեք, որ դուք ներմուծում եք կախվածության գրադարանները LangChain-ից: Սա թույլ է տալիս օգտագործել LangChain շրջանակի հատուկ առանձնահատկությունները:

Փաստաթղթի բեռնում վերլուծության համար

Սկսեք ստեղծելով փոփոխական, որը պահում է ձեր API բանալին: Այս փոփոխականը հետագայում կոդում կօգտագործեք նույնականացման համար:

# Hardcoded API key
openai_api_key = "Your API key"

Խորհուրդ չի տրվում կոշտ կոդավորել ձեր API բանալին, եթե նախատեսում եք ձեր կոդը կիսել երրորդ կողմերի հետ: Արտադրության կոդի համար, որը ցանկանում եք տարածել, դրա փոխարեն օգտագործեք շրջակա միջավայրի փոփոխական:

Հաջորդը, ստեղծեք մի գործառույթ, որը բեռնում է փաստաթուղթը: Գործառույթը պետք է բեռնի PDF կամ տեքստային ֆայլ: Եթե փաստաթուղթը ոչ մեկը չէ, ապա ֆունկցիան պետք է բարձրացնի ValueError:

def load_document(filename):
   if filename.endswith(".pdf"):
       loader = PyPDFLoader(filename)
       documents = loader.load()
   elif filename.endswith(".txt"):
       loader = TextLoader(filename)
       documents = loader.load()
   else:
       raise ValueError("Invalid file type")

Փաստաթղթերը բեռնելուց հետո ստեղծեք CharacterTextSplitter: Այս բաժանարարը բեռնված փաստաթղթերը կբաժանի փոքր կտորների՝ նիշերի հիման վրա:

   text_splitter = CharacterTextSplitter(chunk_size=1000, 
                                         chunk_overlap=30, separator="\n")
   return text_splitter.split_documents(documents=documents)

Փաստաթղթի բաժանումը երաշխավորում է, որ կտորները կառավարելի չափի են և դեռ կապված են ինչ-որ համընկնող համատեքստի հետ: Սա օգտակար է այնպիսի խնդիրների համար, ինչպիսիք են տեքստի վերլուծությունը և տեղեկատվության որոնումը:

Փաստաթղթի հարցում

Ձեզ անհրաժեշտ է միջոց՝ վերբեռնված փաստաթուղթը հարցումներ անելու համար՝ դրանից պատկերացումներ ստանալու համար: Դա անելու համար ստեղծեք ֆունկցիա, որը որպես մուտք է վերցնում հարցման տողը և ռետրիվեր ը: Այնուհետև այն ստեղծում է RetrievalQA օրինակ՝ օգտագործելով ռետրիվերը և OpenAI լեզվի մոդելի օրինակը:

def query_pdf(query, retriever):
   qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
                                    chain_type="stuff", retriever=retriever)
   result = qa.run(query)
   print(result)

Այս ֆունկցիան օգտագործում է ստեղծված QA օրինակը՝ հարցումը գործարկելու և արդյունքը տպելու համար։

Հիմնական գործառույթի ստեղծում

Հիմնական գործառույթը կվերահսկի ծրագրի ընդհանուր հոսքը: Այն կպահանջի օգտվողի մուտքագրում փաստաթղթի ֆայլի անվան համար և բեռնում է այդ փաստաթուղթը: Այնուհետև ստեղծեք OpenAIEmbeddings օրինակ ներկառուցումների համար և կառուցեք վեկտորային պահեստ՝ հիմնված բեռնված փաստաթղթերի և ներկառուցումների վրա: Պահպանեք այս վեկտորային խանութը տեղական ֆայլում:

Հաջորդը, բեռնեք պահպանված վեկտորային պահեստը տեղական ֆայլից: Այնուհետև մուտքագրեք մի հանգույց, որտեղ օգտագործողը կարող է մուտքագրել հարցումներ: հիմնական ֆունկցիան այս հարցումները փոխանցում է query_pdf ֆունկցիային` պահպանվող վեկտորային պահեստի ռետրիվերի հետ միասին: Օղակը կշարունակվի այնքան ժամանակ, մինչև օգտագործողը մտնի «ելք»:

def main():
   filename = input("Enter the name of the document (.pdf or .txt):\n")
   docs = load_document(filename)
   embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
   vectorstore = FAISS.from_documents(docs, embeddings)
   vectorstore.save_local("faiss_index_constitution")
   persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
   query = input("Type in your query (type 'exit' to quit):\n")
   while query != "exit":
       query_pdf(query, persisted_vectorstore.as_retriever())
       query = input("Type in your query (type 'exit' to quit):\n")

Ներդրումները ֆիքսում են բառերի միջև իմաստային հարաբերությունները: Վեկտորները մի ձև են, որով դուք կարող եք ներկայացնել տեքստի կտորներ:

Այս կոդը փոխակերպում է փաստաթղթի տեքստային տվյալները վեկտորների՝ օգտագործելով OpenAIEmbeddings-ի կողմից ստեղծված ներկառուցումները: Այնուհետև այն ինդեքսավորում է այս վեկտորները՝ օգտագործելով FAISS՝ նմանատիպ վեկտորների արդյունավետ որոնման և համեմատելու համար: Սա այն է, ինչը թույլ է տալիս վերլուծել վերբեռնված փաստաթուղթը:

Ի վերջո, օգտագործեք __name__ == «__main__» կառուցվածքը՝ հիմնական ֆունկցիան կանչելու համար, եթե օգտատերը ինքնուրույն աշխատեցնում է ծրագիրը.

if __name__ == "__main__":
   main()

Այս հավելվածը հրամանի տող ծրագիր է: Որպես ընդլայնում, դուք կարող եք օգտագործել Streamlit-ը՝ հավելվածին վեբ ինտերֆեյս ավելացնելու համար:

Փաստաթղթերի վերլուծության իրականացում

Փաստաթղթերի վերլուծություն կատարելու համար փաստաթուղթը, որը ցանկանում եք վերլուծել, պահեք ձեր նախագծի հետ նույն պանակում, ապա գործարկեք ծրագիրը: Այն կպահանջի այն փաստաթղթի անվանումը, որը ցանկանում եք վերլուծել: Մուտքագրեք դրա լրիվ անվանումը, ապա մուտքագրեք հարցումներ ծրագրի վերլուծության համար:

Ստորև բերված սքրինշոթը ցույց է տալիս PDF-ի վերլուծության արդյունքները:

Հետևյալ ելքը ցույց է տալիս աղբյուրի կոդը պարունակող տեքստային ֆայլի վերլուծության արդյունքները:

Համոզվեք, որ ֆայլերը, որոնք ցանկանում եք վերլուծել, լինեն PDF կամ տեքստային ձևաչափով: Եթե ձեր փաստաթղթերը այլ ձևաչափերով են, կարող եք դրանք վերածել PDF ձևաչափի՝ օգտագործելով առցանց գործիքներ:

Լեզուների մեծ մոդելների ետևում գտնվող տեխնոլոգիայի հասկանալը

LangChain-ը հեշտացնում է հավելվածների ստեղծումը՝ օգտագործելով մեծ լեզվական մոդելներ: Սա նաև նշանակում է, որ վերացական է այն, ինչ կատարվում է կուլիսներում: Հստակ հասկանալու համար, թե ինչպես է աշխատում ձեր ստեղծած հավելվածը, դուք պետք է ծանոթանաք մեծ լեզվական մոդելների հիմքում ընկած տեխնոլոգիային: