오늘날 정보를 취득하고 이해하는 방식이 급격히 변화하면서, 문서로부터 직접 정보를 추출하고 질문에 답하는 시스템의 필요성이 더욱 증가하고 있습니다. 이러한 필요를 충족시키기 위해, 우리는 PDF 문서를 직접적으로 활용할 수 있는 인터랙티브 질의응답 시스템인 ChatPDF를 소개합니다. 이 시스템은 사용자가 업로드한 PDF 파일에 기반하여 질문에 답할 수 있도록 설계되었습니다.
주요 기능
1. PDF 파일 업로드 및 텍스트 추출
- 사용자는 웹 인터페이스를 통해 PDF 파일을 업로드할 수 있습니다. 업로드된 파일은 PyPDFLoader를 사용하여 텍스트로 변환됩니다.
def pdf_to_document(uploaded_file):
temp_dir = tempfile.TemporaryDirectory()
temp_filepath = os.path.join(temp_dir.name, uploaded_file.name)
with open(temp_filepath, "wb") as f:
f.write(uploaded_file.getvalue())
loader = PyPDFLoader(temp_filepath)
pages = loader.load_and_split()
return pages
이 코드는 사용자가 업로드한 PDF 파일을 서버에 임시 파일로 저장하고, PyPDFLoader를 사용하여 페이지 별로 텍스트를 추출합니다.
2. 텍스트 분할
- 추출된 텍스트는 RecursiveCharacterTextSplitter를 통해 작은 부분으로 나누어져 처리가 용이하도록 합니다. 이는 효과적인 정보 검색을 위해 중요합니다.
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 300,
chunk_overlap = 20,
length_function = len,
is_separator_regex = False,
)
texts = text_splitter.split_documents(pages)
3. 텍스트 임베딩과 벡터 저장소 생성
- OpenAIEmbeddings와 Chroma 벡터 저장소를 사용하여 문서의 텍스트를 벡터로 변환하고 저장합니다. 이를 통해 효율적인 정보 검색이 가능해집니다.
embeddings_model = OpenAIEmbeddings()
db = Chroma.from_documents(texts, embeddings_model)
4. 질의응답 시스템
- 사용자는 질문을 입력할 수 있고, RetrievalQA 체인을 통해 질문에 가장 잘 맞는 답을 찾아 제공합니다.
question = st.text_input('질문:')
if st.button('질문하기'):
with st.spinner('Wait for it...'):
llm = ChatOpenAI(model_name="llama3", temperature=0)
qa_chain = RetrievalQA.from_chain_type(llm,retriever=db.as_retriever())
result = qa_chain({"query": question})
st.write(result["result"])
장점 및 활용 가능성
ChatPDF는 학술 자료, 기업 보고서, 기술 문서 등 다양한 PDF 문서에 적용 가능합니다. 사용자는 복잡한 데이터베이스나 검색 알고리즘에 의존하지 않고 직접 문서에 질문함으로써 필요한 정보를 빠르게 얻을 수 있습니다.
ChatPDF는 문서 기반 정보 추출 및 질의응답 시스템의 새로운 지평을 열어줍니다. 이 시스템을 통해 사용자는 간편하게 중요 정보를 추출하고 상호작용할 수 있습니다. 앞으로도 이러한 기술의 발전이 기대되며, 다양한 분야에서의 응용 가능성이 매우 높습니다.
'IT > AI' 카테고리의 다른 글
다양한 딥러닝 프레임워크 소개: TensorFlow와 PyTorch 이외 다른 프레임워 (0) | 2024.04.29 |
---|---|
Python에서 BLIP 모델을 사용하여 이미지 캡셔닝 수행하기 (0) | 2024.04.25 |
AI Chat Bot 비교 (0) | 2024.04.17 |
[AI]Raspberry Pi 에 Tensorflow 설치 (0) | 2022.05.16 |
[AI] TensorFlow 개요 (0) | 2022.05.16 |