Ինչպես վերլուծել փաստաթղթերը 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-ը հեշտացնում է հավելվածների ստեղծումը՝ օգտագործելով մեծ լեզվական մոդելներ: Սա նաև նշանակում է, որ վերացական է այն, ինչ կատարվում է կուլիսներում: Հստակ հասկանալու համար, թե ինչպես է աշխատում ձեր ստեղծած հավելվածը, դուք պետք է ծանոթանաք մեծ լեզվական մոդելների հիմքում ընկած տեխնոլոգիային: