이번 프로젝트의 목표

지금까지 해왔던 것

1. 데이터 분석

  1. 데이터 분석

    {5BFEBBDF-158A-48FA-91A9-55985912D4BD}.png

    공고 번호, 공고 차수, 사업명, 사업 금액, 발주 기관, 공개 일자, 입찰 참여 시작일, 입찰 참여 마감일, 사업 요약, 파일형식, 파일명, 텍스트가 data_list.csv 파일에 있었다.

    {DFDEB5EE-797F-44A1-96CD-96E1F781210A}.png

    혹시 해서 비어있는 리스트를 확인해보니 공고 번호, 공고 차수, 사업 금액, 입찰 참여 시작일, 입찰 참여 마감일이 비어 있는 곳이 있었다.

  2. 데이터 빈 부분 채워넣을 방법 나라장터 기반 openapi를 사용해 채우는 것이 1차 목표

    {F8BCE1B0-5B5D-4CD9-8B64-060B9BD4C118}.png

    현재 그 방법을 사용하기에 너무 신경 쓸 부분이 많음

    {E72DE94E-98C2-4C82-82AF-BAB31CBB940E}.png

    우선 기본으로 매뉴얼을 수동으로 설정해 채워넣는 방식으로 설정

  3. 확장자 및 라이브러리 선택

    기존 데이터는 hwp 파일 96개, pdf 파일 4개로 이루어져 있다.

    이를 결정하기 위해 여러 시도를 감행했다.

    1. HTML 형식으로 변환하는 방식을 시도

      {D69DC90F-2485-4214-8A07-E59E39B0D41F}.png

      {33259483-0688-4C28-A83C-88907BCEE152}.png

      해당 방식은 변환 속도가 오래 걸리는 문제 발생

    2. 원본 파일을 그대로 사용하는 방식

      hwp 파일의 경우 텍스트 추출이 원활하지 않은 문제가 생김

    3. pdf 형식으로 변환하여 사용하는 방식

      pdf 형식은 비교적 텍스트 추출이 안정적이며, 처리 과정의 일관성을 유지할 수 있다고 판단

      {DDFA22FC-A3F6-48A4-977D-90EB47E0D126}.png

2. 가상환경 설정

  1. 주피터허브를 연결 후 사용

    {2D09FF8C-79AE-4985-9CC2-05604D377584}.png

    주피터 사용을 확인하기 위해 한글화, 다크모드, 편의성 개선 등을 사용해봤지만, 이 서버를 변형할 수 있는 것은 할 수 없으므로 우선 어떻게 할지 생각 후, 이를 어떻게 연결할지 고민했다.

    그 중 다크모드는 선택할 수 있었지만, 한글 패치나 편의성의 경우 주어진 권리가 없어서 크게 건드릴 수 없었다.

  2. 깃허브 연결

    {ED162F71-98BE-42D8-8A5E-AD073DD03D27}.png

    각자의 아카이브 파일을 만들어 불러온 후 필요한 데이터를 넣기로 결정

    {7DDB0312-5551-4E24-A0E2-2E2B5AC6674A}.png

    각자 브랜치를 만들어 데이터 분석 및 전체적인 구조를 한 번씩 만들어 더 좋은 성능을 지닌 것으로 결정하기 위해 각자 RAG를 만들어 생성하려 구조를 짰다.

  3. 깃허브에 여러 설정 확인

    깃허브를 다루는 방법이 서툴러 기본적인 명령어 및 깃푸시/풀 등을 공부, 그리고 주피터허브와 깃허브, 로컬 데이터를 연결하기 위해 어떤 데이터가 있는지 공부했다.

    로컬 데이터를 연결하는 것은 힘들었지만, 주피터허브와 깃허브를 연결해 전체적인 구동을 쉽게 할 수 있었다.

3. 전체적인 RAG 구조 중 시도해본 것

  1. doc 구조로 변경

    전체 구성을 doc_id, 텍스트, 메타데이터 순으로 넣었으며, 메타데이터 내에는 사진 내 내용만 넣었다.

    {329C8C43-AAAD-4D34-9FAB-7B048873D901}.png

    doc_id는 공고 번호와 공고 차수를 합쳐 생성, 텍스트는 추출된 텍스트를 넣었다.

    doc 구조를 사용한 이유 : 청킹은 텍스트로 나누고 고유 id 값과 메타데이터는 유지되기 때문

  2. 청크 단위

    페이지 단위, 섹션 단위 등 다양한 단위를 나눴지만, 그 중 제일 좋은 성능을 보여줄 수 있었던 것은 토큰 단위 청킹이다.

    사용하지 못한 이유

  3. 프롬프트 작성

    다양한 프롬프트를 작성해 성능을 올리려 했다.

    1. 셀프체크 프롬프트

      생성에서 셀프체크를 통해 다시 확인하는 프롬프트

      사용하지 않은 이유 : 시간이 오래 걸릴 뿐더러 오히려 성능이 떨어지는 경우 발생

    2. 리랭킹 프롬프트

      Grader 이후 생성된 문서에 점수를 부여하는 프롬프트

      {CE69C24B-9925-4F75-8E25-BB2DA8C8570F}.png

      사용하지 않은 이유 : 시간이 오래 걸리는 것에 비해 성능이 크게 오르지 않아서

  4. 질문 리스트/GT

    전체적인 질문/답변 리스트 생성

    해당 질문은 RAGAS 스코어를 측정하기 위해 생성

    {DAF19FB2-C5EB-4446-9001-2A96192EEA4B}.png