본문 바로가기
AI 빅데이터/AI 동향

[LangChain] GPT로 Summary와 QA 해 보기

by 마고커 2023. 4. 21.


LangChain은 LLM을 App에서 활용할 수 있게 해 주는 도구다. GPT-3나 BLOOM과 같은 초거대AI에게 질의해서 결과를 가져와 App을 구성할 수 있다. LangChain의 컴퍼넌트들은 기회될 때 보기로 하고, 여기서는 간단한 예제만 실행해 보고자 한다.

 

예제는 안톤 체홉의 '개를 데리고 다니는 여인'의 pdf 파일을 불러다가 요약하고 질의를 해 보는 것이다.

우선 필요한 패키지들을 설치하고..

!pip install OpenAI langchain PyPDF2 tiktoken faiss-cpu grobid-client

 

환경을 setup 한다.

import os 
os.environ["OPENAI_API_KEY"] = "너의 open ai key"

# 체홉의 pdf를 가져와서
!wget https://learnenglish-new.com/wp-content/uploads/2022/05/The-Lady-with-the-Little-Dog-by-Anton-Chekhov-book-PDF.pdf

# load 
from PyPDF2 import PdfReader
reader = PdfReader("The-Lady-with-the-Little-Dog-by-Anton-Chekhov-book-PDF.pdf")

# 본문을 읽어 들인다.
raw_text = ""

for i, page in enumerate(reader.pages):
    text = page.extract_text()
    if text:
        raw_text += text

raw_text[:1000]

 

요약부터 진행해 보자

 

from langchain import OpenAI
from langchain.chains import AnalyzeDocumentChain
from langchain.chains.summarize import load_summarize_chain

llm = OpenAI(temperature=0)

summary_chain = load_summarize_chain(llm, chain_type="map_reduce")

summarize_document_chain = AnalyzeDocumentChain(combine_docs_chain=summary_chain)
summarize_document_chain.run(raw_text)

 

OpenAI는 GPT-3 davinci 모델을 불러서 실행한다. 빠르고 가격이 싸지만 결과 품질은 떨어질 수 있다.

 

' 드미트리 드미트리치 구로프와 안나 세르게예브나는 얄타에서 만나 열정적인 관계를 시작합니다. 
죄책감과 발각에 대한 두려움에도 불구하고 그들은 비밀리에 계속 만나 비밀과 속임수의 속박에서 
벗어나는 방법에 대해 논의합니다. 그들은 새롭고 화려한 삶이 그들을 기다리고 있기를 희망합니다.'

 

그럭저럭 요약을 잘하는 것 같다. 이제 QA를 실행해본다.

 

from langchain.chains.question_answering import load_qa_chain

qa_chain = load_summarize_chain(llm, chain_type="map_reduce")
qa_document_chain = AnalyzeDocumentChain(combine_docs_chain=qa_chain)

qa_document_chain.run(
    input_document=raw_text,
    question="안나와 드미트리가 함께 간곳은?")

 

그럴싸하게 대답하는 것 같다. 그들이 함께 간 곳은 얄타가 맞다.

 

" 드미트리 드미트리치 구로프와 안나 세르게예브나는 얄타에서 만나 사랑에 빠지지만 
둘 다 다른 사람과 결혼했다는 사실로 인해 관계가 복잡해집니다. 그들은 함께 바다를 
감상하고 공공 장소에서 키스를하며 하루를 보내고 Anna의 남편이 그녀를 보내면 
그녀는 떠나야합니다. 구로프는 모스크바로 돌아 왔지만 결국 안나 세르게예 브나를 
만나기 위해 S----로 여행을 떠납니다. 그들은 지방 극장에서 재회하고 포옹하지만 
두 남학생이 방해를받습니다. 안나는 모스크바의 구로프를 찾아가 비밀과 속임수의 속박에서 
벗어나는 방법을 논의하지만 해결책을 찾지 못합니다."

 

그러나, 그들이 얼마나 얄타에 있었냐는 물음에 그저 위와 유사한 대답을 한다.

 

qa_document_chain.run(
    input_document=raw_text,
    question="how many days they stayed in Yalta?")

 

' 드미트리 드미트리치 구로프와 안나 세르게예브나는 얄타에서 만나 사랑에 빠지고, 
함께 바다를 감상하고 공공장소에서 키스를 하며 하루하루를 보냅니다. 결혼한 상태임에도 
불구하고 두 사람은 모스크바에서 두세 달에 한 번씩 비밀리에 만남을 이어갑니다. 
그들은 비밀과 속임수의 속박에서 벗어날 방법을 고민하지만 궁극적으로 새롭고 화려한 삶이 
그들을 기다리고 있다는 희망을 잃지 않습니다.'

 

GPT-3의 문제인가 싶어서 GPT-3.5로 모델을 바꾸어봐도 결과는 유사했다.

GPT 모델의 문제일까 싶어서 chatpdf.com 에서 pdf파일을 올려 물어보았을 때는 잘 대답해준다.

 

 

아마 뭔가 설정을 잘못하지 않았을까 싶기도 한데, 무료 계정 비용 줄어드는 속도가 만만치 않아서 여기까지만 테스트 해 보기로 한다. Summary나 QA를 잘하냐의 문제가 아니라 내 App에서 여러가지 방법으로 AI를 녹여낼 수 있다는 것이 중요하다. 현재는 javascript와 python을 지원한다.

 

참고로 QA 십수번, Summary 두세번 한 비용은 아래와 같다. 어휴...

 



댓글