Inflearn brand logo image

인프런 커뮤니티 질문&답변

rarexband님의 프로필 이미지
rarexband

작성한 질문수

RAG를 활용한 LLM Application 개발 (feat. LangChain)

ppt 문서 학습방법 문의

작성

·

65

·

수정됨

0

안녕하세요, 완강 후 사내법규로 챗봇을 만들어서 잘 활용하고 있습니다! 이런 것이 가능하다고 윗분들에게 보여드렸고, 직원들을 위한 사내용 챗봇 프로젝트를 본격적으로 시작하게 되었습니다. 감사합니다 🙂
관련해서 문의드립니다.

(질문 내용 수정)
사내 주요문서들이 ppt로 되어 있는 경우가 많아 ppt를 RAG로 활용하는 방법 문의드립니다.

  1. 아래 코드를 사용해서 ppt에 있는 텍스트를 docx 파일로 만들었습니다.

    from pptx import Presentation
    from docx import Document
    
    def extract_text_from_pptx(file_path):
        prs = Presentation(file_path)
        text_list = []
        for slide in prs.slides:
            for shape in slide.shapes:
                if hasattr(shape, "text"):
                    text_list.append(shape.text)
        return "\n".join(text_list)
    
    def save_text_to_docx(text, output_path):
        doc = Document()
        for line in text.split('\n'):
            doc.add_paragraph(line)
        doc.save(output_path)
    
    # 실행 예시
    ppt_file = "OOO.pptx"  # 파일명 확인
    text = extract_text_from_pptx(ppt_file)
    save_text_to_docx(text, "ppt_extracted_text.docx")

    문제는, ppt에서 이렇게 도식화 되어 있는 경우에, 도식 순서대로 text로 변환해주지 않는다는 점인데요, 혹시 이런 경우에 도식을 이해해서 text로 변환해주는 방법이 있을까요?

    image.png

     

  2. 위 코드로 text 추출 시, 장표 내 text만 추출이되고, 이미지는 변환이 안되는데요
    '은행거래명세서 보여줘' 라고 질문하면 파란색 이미지 부분이 나오도록 구현하는 방법도 있을까요?

    image.png

     

  3. 아래처럼 이미지와 텍스트를 함께 학습해서 이해시키도록 한 뒤 RAG를 구현할 수 있는 방법이 있을지도 문의드립니다.

    image.png

     

  4. 더 많은 직원들이 streamlit을 조회한다고 할 때, 원활하게 조회되도록 하려면 유료용을 결제하면 되는걸까요? 조회자가 많아 질 경우 추가로 하면 좋은 조치들이 어떤게 있는지 궁금합니다.

     

질문이 많았습니다. 혹시 1:1 등을 신청해야 답변이 가능한 내용일까요! 답변 주시면 감사하겠습니다.

답변 2

1

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 좋은 질문 감사합니다. 사내에 직접 적용하시려고 한다니 지금까지 받은 피드백중에 제일 뿌듯하고 기분좋은 피드백이네요ㅠㅠ 공유해주셔서 감사합니다.

질문에 답변을 드려보자면

  1. pptx자료에서 텍스트를 추출하시려면 무료로 할 수 있는 가장 간단한 방법은 pptx -> pdf 변환 후, 랭체인에서 제공하는 PdfLoader 들을 사용하는 방법이 제일 쉬울 것 같아요. 다만 수동으로 처리하셔야 하는 불편함이 있습니다.

    1. 비용이 조금 나오지만 조금 더 높은 성능을 원하시면 Upstage에서 제공하는 DocumentParser를 추천합니다.

    2. 문서 내에 이미지와 텍스트 등을 html형태로 추출해주기 때문에, 원하시는 항목만 활용할 수 있다는 장점이 있어요. 다만 API 사용에 대한 비용이 부과되는 이슈가 있습니다

  2. 답변을 생성할 때 이미지 자료를 활용하고 싶으시면 gpt-4o와 같은 사진을 이해할 수 있는 멀티모달 AI 모델을 활용할 수 있습니다

    1. 사진을 인식시켜서 설명을 작성하게 하고

    2. 해당 설명을 임베딩 시켜서 vector store에 저장하는 방식입니다.

    3. 사진은 S3를 비롯한 스토리지에 별도로 저장해두고, 답변을 생성할 때 근거로 해당 이미지를 보여주는 방식을 택할 수 있습니다

  3. 텍스트와 이미지를 함께 쓰시는 것도 2번에서 드린 답변을 활용할 수 있을 것 같아요.

    1. 지금까지 경험하기로는 2번과 3번 모두 Upstage의 Document Parser를 사용하는게 가장 빠른 방법이었습니다.

    2. 외국 회사에서들도 다양한 API들을 제공하긴하는데, 한국어 인식이 제대로 안되는 경우가 많더라구요

  4. streamlit이 파이썬을 활용해서 간단하게 배포할 수 있는 방법이긴한데, 인증/인가를 제대로 붙이지 않으면 보안 위험이 있을 수 있어요. 그래서 스트림릿 클라우드보다는 직접 배포하시는게 나을 것 같습니다. 아니면 FastAPI등을 활용해서 서버를 올리고, 해당 서버에 랭체인을 활용한 AI 로직을 추가하고, 별도의 UI를 가져갈 수 있을 것 같아요

     

설명이 더 필요한 부분은 답글로 남겨주시고, 혹시 멘토링을 진행하는 편이 낫다고 생각하시면 신청 부탁드립니다!

강병진님의 프로필 이미지
강병진
지식공유자

아! 추가로 1번에 첨부하신 이미지 같은 경우에는 mermaid diagram을 써서 markdown으로 저장하시는 편이 좋을것같습니다!

rarexband님의 프로필 이미지
rarexband
질문자

안녕하세요, 지난번 알려주신대로 Upstage의 Document Parser를 사용해봤습니다. 결과가 html 형태로 추출되는데, 저는 html 태그가 그대로 보이는게 아니라, 브라우저에서 렌더링된 모습 그대로를 docx 문서로 변환해서, RAG 학습을 시키고 싶습니다. 관련해서 3가지 질문 드립니다.

1. html --> docx 변환
html2docx, pydoc를 사용해봤는데 브라우저처럼 깔끔하게 나오지 않습니다. 방법이 있을까요?


2. ppt 슬라이드 단위 청킹

슬라이드 1장당 1개의 청크를 만들고 싶은데, Document Parser는 슬라이드 페이지 구분없이 통으로 파싱해주는 것 같습니다. 방법이 있을까요?


3. 청크와 이미지 연결
챗봇이 슬라이드 2페이지 내용을 바탕으로 답변을 했다면, 해당 슬라이드의 이미지도 함께 보여주고 싶습니다. 청크와 원본 슬라이드 이미지를 연결할 수 있는 방법이 있을까요?

감사합니다 :)

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 질문에 답변을 드려보자면

  1. 결과가 html이기 때문에, 일반적으로 크롤링 할 때 사용하는 BeautifulSoup을 사용해서 내용만 가져올 수 있을 것 같아요. BeautifulSoup을 활용해서 html을 파싱한 후에 안에있는 내용만 가져오는 방법을 시도해 볼 수 있을 것 같습니다. https://beautiful-soup-4.readthedocs.io/en/latest/

  2. ppt를 우선 pdf로 변환하시면 파이썬의 pdf라이브러리등을 통해서 페이지 단위로 청킹을 하고, 페이지 단위로 document parser를 호출하시면 됩니다

  3. 이게 사실 제일 귀찮은(?) 부분인데요, 제가 시도했던 방법은 document parser를 활용하면 이미지의 좌표를 주는데, 해당 이미지를 MultiModal LLM을 활용해서 이미지를 해석하는 캡션을 만들고, 해당 캡션을 vector store에 저장해서 유사도 검색을 시도하고, 이미지 경로는 S3와 같은 스토리지에 저장한 후에 metadata에 저장해서, 유사도 검색 결과의 metadata에 이미지 경로가 있는 경우에 보여주는 식으로 작업했었습니다.

설명이 부족한 부분이 있으면 추가로 질문 남겨주세요!

0

안녕하세요, 인프런 AI 인턴입니다. rarexband님.

사내용 챗봇 프로젝트를 준비하시다니 멋진 도전입니다! 질문하신 PPT 관련 데이터와 이미지 활용, 그리고 Streamlit 성능 향상에 관한 답변을 드리겠습니다.

  1. PPT 텍스트 학습 방법:

    • PPT 텍스트 추출: Python에서는 python-pptx 라이브러리를 활용하여 PPT 파일 내 텍스트를 추출할 수 있습니다. 이를 통해 텍스트를 추출한 후 RAG를 구성할 수 있습니다. 추출한 텍스트를 사용하여 벡터 데이터베이스에 임베딩하여 저장하면 효과적으로 활용 가능합니다.
    • Office 문서 형식 변환: PPT를 DOCX로 변환하여 텍스트를 추출하고, 이를 토대로 RAG 시스템을 구축하는 방법도 있습니다. 텍스트가 많을 경우 변환 후 처리하는 것이 더 효율적일 수 있습니다.
  2. 이미지 내용 학습:

    • 멀티모달 모델 사용: 이미지를 직접 학습시키기 위해서는 이미지의 내용을 설명하는 주석을 생성하는 것이 필요합니다. OpenAI Vision API와 같은 도구를 사용하여 이미지의 내용을 텍스트 설명으로 변환한 후, 이를 임베딩하여 데이터베이스에 저장할 수 있습니다. 사용자에게 이미지와 함께 해당 설명을 제공하면 도움이 될 것입니다.
    • 옵션으로 고려할 것: 이미지 인식률이 제한적일 수 있기 때문에, 추가적인 설명이나 도메인 전문 지식을 부가하여 사용자에게 명확한 답변을 제공할 수 있도록 하는 것이 필요합니다.
  3. Streamlit의 성능 향상:

    • 서버 스펙 업그레이드: 사용자가 증가함에 따라 서버의 스펙을 업그레이드(예: CPU, 메모리 증가)하는 것도 도움이 됩니다.
    • 유료 계정 이용: Streamlit의 유료 구독 서비스를 이용하면 높은 성능을 제공받을 수 있습니다. 특히, 사용자 수가 많아질 경우, 이러한 서비스를 통해 안정적인 환경을 제공할 수 있습니다.
    • 캐싱 및 최적화: Streamlit의 st.cache 기능을 활용하여 자주 사용되는 데이터나 설정의 캐싱을 통해 성능을 최적화할 수 있습니다.
    • 부하 분산: 가능한 경우, 부하를 여러 서버에 분산하여 처리할 수 있도록 클라우드 플랫폼을 통한 오토 스케일링을 고려할 수 있습니다.

사내 문서를 효과적으로 활용하고, Streamlit을 효율적으로 운영하는 데 이 정보가 도움이 되길 바랍니다. 자세한 기술적 구현이 필요하다면, 각 라이브러리의 공식 문서나 관련 자료를 참고하시면 좋겠습니다. 추가적으로 궁금한 점이 있으시면 언제든지 문의해 주세요!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

rarexband님의 프로필 이미지
rarexband

작성한 질문수

질문하기