로컬 LLM으로 공고 요약 전송 봇 만들기

로컬 llm으로 좋은 결과를 뽑아내기 위한 사투

필만이 2024. 8. 15. 16:34

배경 : 공고 데이터에서, 내용요약, 키워드 추출, 지원금액, 신청기간을 뽑아내는 작업을 하기로 했다.
내용요약, 키워드 추출은 쉽게 해냈지만, 지원금액, 신청기간은 극악의 난이도를 자랑했다.
그 이유는 10장 내외의 pdf에서 한 군데만 있는 특정 정보(지원금액, 신청기간)를 추출해야 했기 때문이다.

 

로컬 LLM 프로젝트 빌딩시 어려웠던 점

  • https://makenow90.tistory.com/44

  • 정리 : 프로젝트 하는데 실력으로 극복할수 없는(경험이 중요한) 멀티 변수 다뤄야하고, 좋은 GPU의 하드웨어 자원 그리고 아주 뛰어난 언어학적 재능까지 필요한 상황이다. 

    복잡해 보이지만
    LLM 프로젝트를 시작하기에 앞서 한가지 근본적인 질문을 던졌다.

    "그래서 그 프로젝트 가능은 한거야?"

    이 질문에 대한 대답은 현존하는 최강의 LLM 모델인 GPT가 해줬다.
    데이터를 입력했고, 질문을 하니 GPT 4o는 90%의 정확도로 대답해줬다.

    GPT가 할 수 있으면 나와 작은 로컬 LLM도 결국에는 할 수 있을것이다.

    그렇게 이 프로젝트를 시작했다.  

신청(마감)기간 뽑아내기

  1. 그냥 질문하기(llama3.1:8b)
    "신청 마감기간 알려줘" 
    -> 정확도 20~30% (문서 10개중 2~3개 정답)
    평가 : 생각보다 정확도 수준이 심각했다.
  2. 여러 단어를 주고 찾게하기(llama3.1:8b)
    "예산 or 연구비 or 사업비 or 지원금 or 지원내용 or 지원규모를 알고 싶습니다."
    -> 정확도 40~50%
    평가 : 정확도 올라가나, 가끔 모든 단어를 다찾으려고 하는등 오류 발생(시간증가)

  3. 오늘 날짜 변수로 건네주고 그 이후 답변 받게함 (llama3.1:8b)
    -> 답을 못찾는 경우 오늘 날짜를 마감 날짜로 뽑음

  4. 여러 변수 조절
    temperature(창의력 첨가) , score_threshold(문서에서 관련성 있는 문서 뽑을때, 관련성 조절)
    -> 정확도 50% 전후

  5. pdf에서 글씨만 뽑는 방식에서 표는 마크다운 형태를 유지하며 뽑는 방식으로 변경
    -> 정확도 60% 전후
    해석 : pypdf 말고 다른 모듈을 사용했다.

  6. 후 빡친다! RTX 1660 사용중이였는데 모델돌리는 시간이 너무 길고 자주 팅김. 결정적으로 VRAM 부족으로 llama3.1:70b 모델을 사용할수가 없었다. 따라서 RTX 3090 구매 후 부착
    ->  정확도 60% 전후 .
    해석 : 정확도 증가는 없었지만 테스트 시간은 압도적으로 빨라짐.

  7. 텍스트 일괄 추출에서, 텍스트 따로+ 표 따로(마크다운 형식) 추출
    -> 정확도 60~65% 수준
    해석 : 여전히 상용화하기 많이 어려운 정확도이다.

  8. 원본을 보고 신청기간은 주로 표에 있다는 깨달음을 얻고 표 데이터만 문맥으로 줌.
    -> 정확도 95~100% 수준. llama3.1:8b 모델로 GPT 4o를 뛰어넘음. 쇼크!

결론 : 열심히 노력해서 경우의 수를 찾으면, 타노스(GPT 4) 도 이길 수 있다.
굉장한 노가다긴 한데, 그만큼 노하우가 많이 필요한 분야같다.