- chatGPT로는 요약할 수 있는 문서의 토큰수가 제한적임
- Langchain을 이용해 문서를 일정 크기로 분할하여 각각 요약진행하고, 마지막에 최종요약으로 나올 수 있도록하는 시스템을 만들고자함
# 랭체인 설치
pip install langchain
⤬ 메타의 라마트, 알파카, 비쿠냐 등 좋은 성능을 보이는 다른 언어모델로도 쉽게 활용가능함
⤬ 또한 API 요금이 부담된다면 다른 언어모델로도 사용 가능
loader.load-method
를 실행해 대본이 추출되도록 함transcript
라는 변수에 저장함.# 유튜브 대본 불러오는 api
pip install youtube-transcript-api
글을 쪼개서 MAX Token 이하의 여러 문서들로 만들자
- 문서를 max token보다 작도록 여러개의 덩어리로 분할
- 여러개의 덩어리들 각각의 요약을 진행
- GPT에게 요약 조각들을 합쳐서 최종 요약을 해달라고 요청
- 최종 요약본 완성
# flag 요약되는지 확인, api 저장, summerize 저장
if "flag" not in st.session_state:
st.session_state["flag"] = True
if "OPENAI_API" not in st.session_state:
st.session_state["OPENAI_API"] = ""
if "summerize" not in st.session_state:
st.session_state["summerize"] = ""
# 대본 쪼개기
text_splitter = RecursiveCharacterTextSplitter(chunk_size=4000, chunk_overlap=0)
text = text_splitter.split_documents(transcript)
#요약 실행
chain = load_summarize_chain(llm, chain_type="map_reduce", verbose=False,
map_prompt=prompt, combine_prompt=combine_prompt)
st.session_state["summerize"] = chain.run(text)
st.session_state["flag"]=False
#번역을 위해 추가
from googletrans import Translator
# 영어 번역
def google_trans(messages):
google = Translator()
result = google.translate(messages, dest="ko")
return result.text
LLM 모델 설정
GPT 3.5 Turbo 모델로 지정해 실습 넣기
chain 이라는 이름의 인스턴스 생성
chain 안에는 텍스트가 스플릿된 결과가 들어있음
chain.run 안에 요약을 진행할 텍스트 리스트를 넣어주면 요약 진행 완료