IBM의 Client Engieering 팀에서 Technology Engineer Intern으로 LLM 모델을 사용해 다량의 자동차 관련 도메인 논문을 요약하고 제안해주는 챗봇 개발 프로젝트에 참여했습니다.
비동기를 적용해 데이터 전처리 파이프라인의 실행시간이 90% 감소되었고, 답변 정확도를 10% 올릴 수 있었습니다.
주요 역할로는 데이터 전처리를 담당했습니다. 데이터 정형화 및 임베딩, 벡터 db적재등의 데이터 파이프라인을 개발했습니다. Pdf 라이브러리와 OCR 엔진을 사용해 pdf논문들을 정형화하고, 레이크하우스에 적재 한 후, Langchain을 활용해 텍스트 임베딩 및 벡터DB에 정형화한 데이터를 저장했습니다.
고객과 직접 대면하며, 도면 작성 및 코드 모듈화 또한 담당했습니다. 비전문가 대상으로 기술적인 내용을 전달하기 위해 데이터 전처리와 답변 생성과정을 기술 설명과 함께 도면으로 작성해 전달했습니다. 또한, 코드를 모듈화하고 문서를 작성해, 작성한 코드의 사용 방법을 명확히 했습니다.
LLM에 데이터를 활용하기 전에 데이터의 정확도가 중요하기 때문에, PDF에서 원하는 텍스트를 깔끔하게 추출하는 부분이 중요했습니다. 텍스트와 이미지, 표를 구분하고, 그 중 텍스트를 추출해 Intro, Body, Conclusion으로 나누어 적재했습니다. 문서의 메타데이터를 추출하고, 논문 사이트에서 제공한 메타데이터와 결합해, DB에 저장했습니다.
추출한 텍스트를 기반으로 주어진 항목에서 llm을 활용해 분류(classification)를 진행했습니다. 항목이 제대로 분류되는지 여러차례 테스트 후, 분류한 항목과 문서 데이터를 임베딩해 벡터 DB에 저장했습니다.
llm이 벡터 db를 기반으로 질문에 해당하는 텍스트들을 요약해 답변을 생성했습니다. 어플리케이션에서 기본적인 llm 파라메터와 가중치를 설정할 수 있도록 해, 고객이 직접 조정할 수 있도록 했습니다.
Python, LLM (llama2, granite 등), GCP, streamlit, Spark, Langchain
개발 중 벡터 DB에 데이터를 적재하기 까지의 소요시간이 길어, 전처리 테스트 진행에 어려움을 있었습니다.
AWS, Databricks 등의 대기업에서 진행하는 LLM 인프라 구성 세미나와 강의 자료를 찾아보았습니다.
→ 전처리 단계보다는 데이터를 활용한 LLM 구성에 초점을 두어, 관련내용을 찾아보기 어려웠습니다.
Langchain을 활용해 RAG패턴을 구현하고자 했기에, Langchain의 공식 문서를 참고했습니다.
→ 기능은 존재했지만, 해당 내용에 대한 예시가 존재하지 않았습니다. 관련 블로그도 찾아봤지만, 새로 개발된 내용인지, 사용 예시를 찾을 수 없었습니다.
API 문서와 class 구조 문서를 보며, 다양한 테스트 케이스를 생성해 결과값을 확인하며 method 구조를 파악했습니다. 비동기를 함께 적용해 속도를 개선했습니다.
✅ 빠른 데이터 전처리로 인해 여러차례 테스트와 정성적인 평가, 피드백을 적용할 수 있었고, 이후 답변 정확도가 10% 상승했습니다.
비전문가인 고객에게 기술적인 내용을 전달하는데 어려움이 있었습니다.
프로젝트 초기, 명확한 기술 설명 없이 반복적인 기술 용어 사용으로 소통에 어려움이 있었습니다.
→ 피드백 및 QnA 시간을 가졌습니다. 부족한 부분을 보완하고자, 도면 및 문서 작성을 계획했습니다.
데이터 전처리 및 LLM답변 생성 구조 도면을 맡았습니다. 도면에 데이터가 흐름과 형태를 한눈에 보여주는 데 중점을 두었고, 단계마다 사용된 기술을 간단히 알 수 있도록 했습니다. 더불어 각 단계에 적어둔 기술의 기본적인 설명을 추가 페이지로 첨부해 이해를 도왔습니다.
이후 코드도 함께 전달하기 위해, 데이터 전처리 코드의 모듈화를 담당했습니다. 반복되는 구조와 변수명을 정리하고, 패키지로 만들어 외부에서 호출이 용이하게 했습니다. 고객도 사용할 것을 염두에 둬서 해당 코드의 목적을 명확히 알 수 있도록 문서를 작성했습니다.
→ 팀원들에게 피드백을 받아 작성한 도면과 문서가 기술적인 배경이 부족해도 이해하기 쉬운지 확인하고, 개선했습니다.
✅ 고객이 정리한 코드와 문서가 파악하기 쉽다고 반응했습니다.
기술적인 내용을 전달하는 소통 방법에 대해 배울 수 있었습니다. 또한, 팀원들과 계속 피드백을 주고받으며 부족한 부분을 보완할 수 있었습니다.