하이퍼클로바 X 문단 나누기, 임베딩 api issue 정리

svenskpotatis·2024년 7월 26일

RAG 구조

(문단 텍스트 임베딩 생성 시 메타데이터도 같이 임베딩하는데, 실수로 문단 텍스트만 임베딩 생성하는 것처럼 그렸다.)

문단 나누기 api

RAG 를 구현하기 위해서 하이퍼클로바 X의 문단 나누기 api를 사용중이다. 문단 나누기 api는 milvus 에 데이터를 넣기 전에, 긴 회의록을 나눠서 저장하기 위해 사용한다.

ISSUE. 너무 짧은 문단 생성

  • 아래와 같이 너무 짧은 문단이 생성되는 경우가 있다. 프롬프트를 수정했는데도 고쳐지지 않아서 확인이 필요하다.
{이상으로 국지정책실에 대한 업무 보고 보고서 상황에 대한 보고를 마치도록 하겠습니다'}

{참여자 4: 안녕하십니까 서울 지북재단 대표이사 박찬호입니다.'}

{존경하는 위원장님, 보건복지위원회 위원님, 2019년 처음 열리는 상임위에서 금년도 서울시복지단 주요 업무 부분을 드리고 위원님의 고견을 재단정책과 사업에 반영할 수 있는 기회를 주셔서 매우 뜻깊게 생각합니다. 
지난해 1일 동안 우리 재단은 민선 7개의 서울시 복지정책개발, 복지시정의 공공성 강화를 위한 충실한 조력자가 되고자 최선을 다했습니다. 
그 결과 우리 재단의 많은 연구가 서울시 사업이 기초자료로 활용되거나 법사업에 반영되었습니다 
또한 금융복지 상담센터의 가계부채 1조 원 면책 지원 이룸 통장 등이 시민들께 큰 호응을 받았습니다 
올해도 우리 재단은 위원님들의 고견을 받들어 연구와 사업 수행 전 분야에서 서울시복지 시정을 충실히 지원하고자 최선을 다해 노력하겠습니다 
오늘 업무보고 과정에서 재단의 소우관 업무나 사업 계획 중 개선할 사항이나 귀중한 조언을 주신다면 적극 반영해 나가도록 하겠습니다'}

{재단범인 서울시 복지재단 정관 일부 개정 정관안에 대해 보고 드리겠습니다 
서울시 복지재단 정관 일부 개정 정관안은 지난해 7월 17일 보건복지부의 정관 변경 허가 조건을 반영하여 특히 올해 1월 통보된 서울시의 출연기관 2원 연임 개선계획 계획을 반영하여 개정 보완하는 것입니다 
서울시복지재단 정관 일부 계정 정관안의 주요 내용을 간단히 보고들이며 당한 것 같습니다 
첫 번째 보건복지부의 정관 변경 허가 조건을 반영하여 임원 명칭을 상임 비상임으로 통일하고 근로자이사 최초 선임 내용을 추가하며 기타 허가 조건을 명확하게 반영하는 것이며 
둘째 서울시의 개선 요구 상황을 반영하여 임원의 연임 기간을 3년 단위에서 1년 단위로 개정하는 것입니다 
각정 띄어 쓰기와 법령 유형 표시 방법 및 일부 자구 수정을 통해 정관을 명확하게 하는 데 있습니다. 
자세한 내용은 정관계정안 보고 자료를 참고하여 주시기 바랍니다. 
이상으로 보고 마치겠습니다.'}

+) '참여자 n:'에 대한 고민

  • 유지할 경우 장점: 각 참석자의 발화 정보를 프롬프트에 제공할 수 있다.
  • 삭제할 경우 장점: 토큰 수를 줄일 수 있다.

임베딩 api

임베딩 api 역시 하이퍼클로바 X의 api를 사용중이다. 기존에는 기업에서 제공해 준 clir-emb-dolphin 모델을 사용했으나, 토큰 제한 문제로 bge-m3모델로 변경했다.

ISSUE. 임베딩할 텍스트 선택

case 1. (요약 + 문단나눠진 텍스트) 임베딩

  • 장점: 벡터 검색시 유사도 높은 문단과 함께, 회의의 전체 맥락도 고려할 수 있다.
  • 단점: 구현상의 어려움 (현재 mysql과 milvus에 전사본 정보를 먼저 저장하고, 사용자가 요약 버튼을 눌렀을 때에만 요약본이 생성되어 mysql에 저장한다. 이 프로세스를 처음부터 다시 구상해야 한다. )

case 2. (전체 회의록 + 문단나눠진) 텍스트 임베딩

  • 장점: 누락 없는 전체 회의록 기반으로 벡터 검색 가능
  • 단점: 전체 회의록 + 문단나눠진 텍스트에서 전체 데이터의 양이 훨씬 많으면, 사용자 질문과 유사한 문단을 찾는 데 어려움 있을 수 있다.

case 3. (문단나눠진 텍스트) 만 임베딩

3-1. milvus에 요약본을 메타데이터로 저장하고, 프롬프트에 요약본과 문단나눠진 텍스트 제공

  • 장점: milvus 벡터 검색만으로 프롬프트에 제공하는 정보를 모두 가져올 수 있다.
  • 단점: 구현상의 어려움 (case1과 동일), 사용자 채팅시 max token 자주 넘을듯

3-2. mysql에만 요약본 저장하고, 프롬프트에 요약본과 문단나눠진 텍스트 제공

  • 장점: 업로드까지 현재 플로우와 동일

  • 단점:

    • 현재 milvus db 에는 회의별 unique id 가 없어서, mysql과 동일한 id column을 생성해야 한다.
    • 채팅시 milvus db에서 1차로 회의록을 가져오고, 해당 회의록의 요약본을 mysql 에서 2차로 또 가져와야 한다.
    • 사용자 채팅시 max token 자주 넘을듯

0개의 댓글