Boostcamp AI Tech (Day 003)
1. 업스테이지 웨비나 Solar LLM
AGI for Work
Document AI가 지양하는 것
기업에는 많은 데이터가 존재한다. 이 데이터를 인공지능(AI)을 통해 처리하려면 디지털화(digitalization) 과정을 거쳐야 한다. 특히, 비정형 데이터는 디지털화가 필수적이다.
Document AI는 비정형 데이터를 효율적으로 처리할 수 있도록 도와줍니다. 그러나, 이러한 과정을 자동화하기 위해서는 다음과 같은 사항을 지양해야 한다.
- 비효율적인 데이터 디지털화 과정:
- 기업 내 많은 비정형 데이터가 존재할 때, 이를 AI로 처리하기 위해서는 먼저 디지털화가 필요합니다. 이 과정이 비효율적일 경우, AI 도입의 효과를 제대로 누릴 수 없다.
- 불완전한 데이터 전처리:
- 디지털화된 데이터가 AI 모델에 적용되기 전에, 적절한 전처리 과정이 필수적입니다. 전처리가 제대로 이루어지지 않으면, AI 모델의 성능이 저하될 수 있다.
- 비정형 데이터의 무시:
- 많은 기업이 비정형 데이터를 제대로 활용하지 못하고 있습니다. 비정형 데이터의 디지털화와 AI 적용을 통해 더 큰 가치를 창출할 수 있다.
Full Stack Large Language Model (LLM)
비정형 데이터를 구조화된 정보로 변환하고, 사용자가 쿼리를 통해 원하는 정보를 효율적으로 얻는 과정
- Unstructured Document: 비정형 문서가 입력된다.
- Layout Analysis: 문서의 레이아웃을 분석한다.
- Embedding Model: 문서의 내용을 임베딩한다.
- VectorDB: 임베딩된 데이터를 벡터 데이터베이스에 저장한다.
- Application: 사용자로부터 쿼리를 받아 응답한다.
- LLM (Large Language Model): 대형 언어 모델이 쿼리를 처리하고 응답을 생성한다.
Retrieval Augmented Generation (RAG)
Retrieval Augmented Generation (RAG)은 정보 검색 시스템과 언어 모델을 결합하여 사용자가 쿼리를 입력하면 검색된 정보를 바탕으로 응답을 생성하는 기술
구성 요소 및 작동 방식
- Query: 사용자가 질문(쿼리)을 입력
- Application: 입력된 쿼리를 받아 처리하는 애플리케이션
- Retrieval:
- Search System: 입력된 쿼리에 대해 관련 있는 정보를 검색
- 검색된 정보는 다음 단계인 생성(Generation)에 사용
- upstage 모델 (LLM):
- Retrieval Augmented Generation: 검색된 정보를 바탕으로 적절한 응답을 생성
-
Response: 생성된 응답을 사용자에게 반환
- 사용자가 쿼리를 입력
- 애플리케이션이 쿼리를 검색 시스템으로 전달하여 관련 정보를 검색
- 검색된 정보는 대형 언어 모델(LLM)로 전달
- LLM은 검색된 정보를 바탕으로 응답을 생성
- 생성된 응답이 사용자에게 반환
Embedding Model의 역할
Embedding Model은 입력된 비정형 문서의 내용을 벡터 형태로 변환하는 역할을 함
- 문서의 내용 이해: Embedding Model은 문서의 텍스트 내용을 이해하고, 의미적으로 유사한 내용들을 비슷한 벡터로 변환
- 벡터화: 문서의 내용을 벡터로 변환하여, VectorDB에 저장할 수 있도록 준비합니다. 벡터는 다차원 공간에서 문서의 의미를 수치화한 표현
- 효율적 검색 지원: 벡터로 변환된 문서는 VectorDB에 저장되며, 이후 검색 시스템에서 쿼리에 맞는 관련 문서를 효율적으로 검색가능
Embedding Model은 비정형 데이터를 구조화된 벡터 형식으로 변환하여, AI 모델이 데이터를 효율적으로 처리하고, 의미 있는 정보를 빠르게 검색할 수 있도록 함
RAG: Layout Analysis
Layout Analysis의 역할
문서를 단순히 문자열로 변환하면, 문서의 구조 정보가 빠지고 오염될 수 있다. 예를 들어, 표나 리스트, 제목 등 문서의 레이아웃 요소들이 손실되기 때문에 원본 문서의 의미를 제대로 전달하기 어렵다. 이를 해결하기 위해 Layout Analysis 과정을 거친다.
왜 Layout Analysis가 필요한가?
- 문서의 구조 보존:
- 단순히 문서를 좌상단부터 쭉 이어붙이는 방식으로 문자열로 변환하면 문서의 구조 정보가 손실됨
- 구조 정보가 손실되면 원본 문서의 의미를 제대로 전달하기 어렵고, 데이터의 품질이 떨어짐
- 레이아웃 정보 보존:
- 문서의 각 요소(제목, 표, 리스트 등)를 분석하여 구조 정보를 HTML 형태로 변환
- HTML 형식은 구조 정보를 보존하면서 문서를 표현할 수 있는 좋은 방법
Layout Analysis의 과정
- 비정형 문서 입력:
- 비정형 문서가 시스템에 입력됨
- 레이아웃 분석:
- 문서의 레이아웃을 분석하여 각 요소(제목, 본문, 표, 리스트 등)를 추출함
- 이 과정에서 문서의 각 부분이 어떤 역할을 하는지 파악함
- HTML 변환:
- 분석된 레이아웃 정보를 바탕으로, 문서를 HTML 형식으로 변환함
- HTML 형식은 문서의 구조 정보를 유지하면서, 텍스트와 레이아웃 정보를 동시에 표현할 수 있음
- 구조 정보 보존:
- 변환된 HTML 문서는 구조 정보를 포함하고 있어, 이후 처리 과정에서 문서의 의미를 정확하게 전달할 수 있음
Key Functionality
- Extracts layouts, tables, and figures from any document: 어떤 문서에서도 레이아웃, 표, 그림 등을 추출
- Current Performance: Top Performance in terms of accuracy: 정확도 면에서 최고 성능을 자랑함
yousukUp | 업스테이지 유튜브 댓글 자동 생성
프로젝트 개요
유튜브 플랫폼에는 많은 채널이 존재한다. 이러한 채널들의 동영상에 달리는 댓글에 자동으로 답글을 생성해주는 LLM(대형 언어 모델) 프로젝트를 진행한다.
프로젝트 목표
- 유튜브 채널 동영상 댓글에 자동으로 답글을 달아주는 LLM 모델을 개발한다.
- 업스테이지 API를 이용하여 정확하고 관련성 높은 답글을 생성한다.
- 댓글 관리를 효율화하여 채널 운영자의 부담을 줄인다.
프로젝트 Architecture
- Query: 유튜브 동영상 댓글이 입력된다.
- Application: 댓글을 받아 처리하는 애플리케이션이다.
- Retrieval:
- Search System: 입력된 댓글에 대해 관련 있는 정보를 검색한다.
- 검색된 정보는 다음 단계인 생성(Generation)에 사용된다.
- upstage 모델 (LLM):
- Retrieval Augmented Generation: 검색된 정보를 바탕으로 적절한 답글을 생성한다.
- Response: 생성된 답글을 유튜브 댓글에 자동으로 달아준다.
이 과정을 통해 유튜브 동영상 댓글에 정확하고 관련성 높은 답글을 자동으로 생성하여, 댓글 관리를 효율적으로 할 수 있도록 돕는다.
프로젝트 결과
- Solar API를 활용하여 특정 유튜브 채널의 댓글을 자동으로 달아주는 서비스를 개발하였음.
- Upstage 관련 (언론보도, 블로그, 유튜브)를 벡터 DB화 하고 Embedding 하였음.
- Upstage Solar-1-mini-chat을 LLM으로 활용하였음.
- 본 시연은 회사와 제품을 변경할 경우, 각 회사의 유튜브 채널을 관리하는 모델로 활용 가능함.
한계점
- 기계적인 접근으로 인해 유튜브로부터 댓글을 게시하는 과정이 제지당할 수 있음.
- Youtube API를 사용하여 개선 완료
개선 방향
- 현재는 1개의 동영상에 대해 답글을 다는 형태로 개발되어 있으나, 다중 동영상에 대한 자동 댓글 게시가 가능하도록 코드를 업데이트 할 예정임.
Docent AI | Solar LLM Webinar
배경 설명
전시를 감상할 때 작품에 대한 설명을 직접 찾아보거나 유료 가이드를 사용해야 함. 혼자 감상할 경우 감상을 공유할 상대가 없어 외로움을 느끼며, 전시회를 다녀온 경험을 공유하는 글을 작성하기가 번거로움. 사용자들에게 전시 감상을 더욱 즐겁고 유익한 경험으로 만들기 위해 출발함.
서비스 개요
- 전시 및 작품 검색:
- 전시 및 작품 검색 기능 제공.
- AI 도슨트와 대화:
- 작품에 대한 해설, 유사 작품 추천, 인터넷 검색 기반 답변, 감상 공유 기능 제공.
- 아카이빙:
- 대화를 바탕으로 감상 후기 생성.
기능 별 상세 설명
전시 및 작품 검색
다양한 전시회를 대상으로 서비스 제공. 국립현대미술관의 5개 전시회에서 전시된 총 136점의 작품에 대한 데이터 수집 및 전처리 작업을 수행함. 작가, 작품명, 제작년도, 작품 설명 등의 데이터를 수집하고, 정확한 검색을 위해 작품 설명에서 작가에 대한 설명과 작품에 대한 설명을 분리함.
AI 도슨트와의 대화
챗봇 기반으로 AI Agent 구현. 사용자와의 채팅 내용에 따라 다양한 기능 수행 (Function Calling).
- 작품 설명: 사전에 수집된 정보를 바탕으로 Solar LLM을 활용해 심층 해설 제공.
- 유사 작품 검색: 벡터 DB 검색 호출 (Solar Embedding) 및 검색 결과 반환.
- 감상 대화: 감상 공유 및 대화.
- 인터넷 검색: RAG (Retrieval Augmented Generation) 기반으로 검색 키워드 추출 및 검색.
아카이빙
대화를 바탕으로 감상 후기를 생성하여 기록함.
whenill.ai | 처음 병원을 방문하는 환자의 기본 정보, 증상 및 의료 정보에 대한 문진표를 작성해주는 보이스 챗봇
Pain Point
1. 환자 입장
- 정보의 비대칭성: 응급실을 가야하나? 나는 무슨과에 가야하지?
- 너무 긴 대기 시간, 진료 시간: 30분~2시간
2. 의사 입장
- 불완전한 정보: 진료 정확성, 효율성 저하
- 의료진의 부담: 정보를 보완하는 과정에서 상당한 시간 소요, 의료진의 업무 부담 증가
Solution
1. 환자 기본 정보 입력
- 주증상
- 성별
- 나이
2. 대화 진행
- STT, LLM, TTS를 통해 보이스 챗봇과 대화 진행
3. 문진표 작성
- 대화 내용을 요약하여 문진표 작성
- 의사에게 전달
시스템 예시
- SP.ai가 문진표를 작성 중입니다.
- 대기 시간: 3.2초 (일시정지)
- 메인으로 돌아가기 또는 문진 종료 후 최종 제출 가능.
대화 예시
- 사용자가 다음 질문에 답변함:
- “배경이 시작된 시점”, “배경의 위치”, “배경이 옮겨가는 느낌이 있나요?”
- “주체적인 통증의 양상”, “통증의 양상이 지속적인가 간헐적인가?”
- “배경의 강도 NRS”, “배경의 상세한 설명”, “배경의 통증 유형”
- “스포츠 활동이 영향을 미치나요?”, “배경의 의심되는 원인”, “과거 질병 역사”
- “언제부터 배가 아프기 시작했나요?”
낮달 | 학위과정 학생들을 위한 논문 읽기 도움서비스
문제상황
논문 읽기에 최적화된 서비스가 없음
- 최신 논문 하나를 읽기 위해서는 그 분야에 대한 배경지식이 필요함
- 여러 논문을 동시에 업로드하고 질문할 수 있는 서비스가 필요함
- 논문 공부를 위해서는 논문을 읽는 것 뿐만 아니라 메모하고 기록할 수 있어야 함
- 논문을 읽고 편집할 수 있는 기능이 제공되어야 함
- 잘못된 지식을 학습하지 않기 위해 신뢰도 높은 답변이 제공되어야 함
- 답변의 출처가 제공되어 사용자가 직접 답변을 검증할 수 있어야 함
낮달 사용 방법
1단계: 논문 업로드
- PDF 업로드
- Layout Analysis를 거쳐 임베딩 저장
2단계: 질문하기
- 질문과 관련있는 논문 선택
- 임베딩 검색을 통해 질문과 관련된 정보를 찾음
- 언어 모델 추론 및 근거 확인
전체 파이프라인
논문 업로드
- PDF를 HTML로 변환
- HTML 태그 제거
- 텍스트 청크와 메타데이터를 추출하여 Vector DB에 저장
질문 답변
- Query를 Vector DB에 전달
- 관련 텍스트 청크와 메타데이터를 LLM으로 전달
- Groundedness Checker를 통해 신뢰도 검증
- 최종 답변을 생성
성능 평가
Q1: 여러 논문에 걸친 지식, 맥락이 필요한 질문도 잘 답변하는가?
- 직접 제작한 QA 벤치마크를 사용하여 성능 측정
Q2: 출처를 올바르게 표기하는가?
- 위 QA 벤치마크에서 출처 표기가 정확한지 확인
HTML 태그 제거
- Vector DB 쿼리 과정에서 임베딩 유사도를 비교할 때 HTML 태그가 노이즈로 작용함
- 질문은 plain text이지만, 임베딩이 HTML 형식인 경우 유사도가 낮아지는 경향 발견
- 이를 해결하기 위해 임베딩 전 HTML 태그를 제거하는 전처리 과정을 도입함
- 답변 정확도: 70%
- 올바른 출처 표기: 80%
Smart Email | 복잡한 이메일, 이제 RAG로 해결하자.
정보 쓰나미의 시대, 너무 많은 이메일의 양…
- 팀원 황태호의 수신 메일의 양:
- 7월 5일: 6개
- 7월 4일: 24개
- 7월 3일: 9개
- 열람한 메일: 46%
- 그중에 정말 필요했던 메일: 22%
- 세미나, 콜로퀴엄, 학회 출장, 증빙, TA Claim, 논문, 교수님 메일…
문제 정의
내가 궁금한 내용을 바로 알려주고 새로운 형태의 정보로 가공할 수 있다면 얼마나 편할까?
- 녹색성장지속가능대학원 3주차 콜로퀴엄 장소가 어디냐고 물어보면, Solar Chatbot은 “KAIST N1 김삿갓 IT 융합빌딩 (102호)”라고 바로 알려줌
- upstage llm 단기 project가 정확히 언제 열리냐고 물어보면, “2024년 7월 4일(목)부터 7월 6일(토)까지 열린다”라고 답변줌
요약
RAG를 통해 많은 양의 이메일을 효율적으로 관리하고, 필요한 정보를 바로 제공받을 수 있음.
프로젝트: 업스테이지 유튜브 댓글 자동 생성
프로젝트 개요
- 유튜브 플랫폼에 많은 채널이 존재함.
- 유튜브 채널 동영상 댓글에 자동으로 답글을 달아주는 LLM 모델 개발.
프로젝트 목표
- 업스테이지 API를 이용하여 정확하고 관련성 높은 답글 생성.
- 댓글 관리를 효율화.
프로젝트 아키텍처
- Retrieval Augmented Generation (RAG)
- 사용자가 애플리케이션에 쿼리를 전송하면 응답을 받음.
- 애플리케이션은 검색 시스템에서 관련 정보를 검색하여 업스테이지 API를 통해 적절한 답글을 생성함.
- 프로젝트 결과
- Solar API를 활용하여 특정 유튜브 채널의 댓글을 자동으로 달아주는 서비스를 개발함.
- 업스테이지 관련 콘텐츠(언론보도, 블로그, 유튜브)를 벡터 DB화 하고 임베딩함.
- Upstage Solar-1-mini-chat을 LLM으로 활용.
- 본 시연은 회사와 제품을 변경할 경우, 각 회사의 유튜브 채널을 관리하는 모델로 활용 가능.
- 한계점
- 기계적인 접근으로 인해 유튜브로부터 댓글을 게시하는 과정이 제지당할 수 있음.
- Youtube API를 사용하여 한계점을 개선함.
- 개선 방향
- 현재는 1개의 동영상에 대해 답글을 다는 형태로 개발되어 있으나, 다중 동영상에 대한 자동 댓글 게시가 가능하도록 코드를 업데이트 할 예정임.
서비스 개요
- 전시 및 작품 검색.
- AI 도슨트와 대화.
- 아카이빙.
기능 설명
- 다양한 전시회를 대상으로 서비스 제공.
- 작가, 작품명, 제작년도, 작품 설명 등의 데이터 수집.
- 정확한 검색을 위해 작가에 대한 설명과 작품에 대한 설명 분리.
- AI 도슨트와의 대화로 작품에 대한 해설 제공.
- 대화를 바탕으로 감상 후기 생성.
솔루션
- 환자 기본 정보 입력: 주증상, 성별, 나이 등의 정보를 입력.
- 대화 진행: STT, LLM, TTS를 통해 보이스 챗봇과 대화 진행.
- 문진표 작성: 대화 내용을 요약하여 문진표 작성, 의사에게 전달.
구현 설명: Chat History를 고려한 쿼리를 만들자
- 사용자: “2024년 8월 7일 열리는 웨비나 주제가 뭐야?”
- AI: “웨비나 주제는 Exploring Real-World LLM Solutions with Solar 입니다.”
- 사용자: “그럼 그거 몇 시에 하는데?”
- AI: “그거 몇 시에 하는데에 관련된 정보는 찾을 수 없습니다.”
이메일을 JSON 형태로 전처리
- 이메일 내용을 JSON 형태로 변환하여 필요한 정보를 효율적으로 추출할 수 있도록 함
- JSON 구조를 통해 이메일의 발신자, 수신자, 날짜, 본문 등 다양한 메타 데이터를 포함시킴
Chat History를 고려한 쿼리를 만들자 (구체적인 예시)
- 사용자: “2024년 8월 7일 열리는 웨비나 주제가 뭐야?”
- AI: “웨비나 주제는 Exploring Real-World LLM Solutions with Solar 입니다.”
- 사용자: “2024년 8월 7일에 열리는 Exploring Real-World LLM Solutions with Solar 웨비나 몇 시에 해?”
- AI: “오후 7시부터 8시 30분까지 합니다.”
Self-Querying Retrieval
- Retrieval 시에 메타 데이터까지 필터할 수 있는 효과적인 방법
- 사용자의 자연언어형태 Query에 대해서 LLM이 작성한 구조화된 Query를 Retriever에 적용하여 메타데이터를 필터링하는 방식
- 예시 1: “제목에 ‘대학원 총학생회’가 들어간 메일 알려줘.”
{ "query": "대학원 총학생회", "filter": "like('subject', '대학원%총학생회')" }
- 예시 2: “나는 황태호야. 내가 2023년 10월 26일에 보낸 KCC 2024 학회 관련 메일 알려줘.”
{ "query": "KCC 2024 학회 관련 메일 알려줘.", "filter": "and(eq('from', '황태호'), eq('year', 2023), eq('month', 10), eq('day', 26))" }
- 예시 1: “제목에 ‘대학원 총학생회’가 들어간 메일 알려줘.”
Self-Querying Retrieval: 메타 데이터를 잘 뽑고 이해해줘.
setup_retriever(mails)
함수로 메타데이터 필드 정보 설정- 예시 코드:
def setup_retriever(mails): metadata_field_info = [ AttributeInfo(name="subject", description="The subject of the email", type="string"), AttributeInfo(name="cc", description="The CC recipients of the email", type="string"), AttributeInfo(name="from", description="The sender of the email. e.g.) doubleyyh@kaist.ac.kr, 대학원 총학생회, 총장, 학생#전체, 학술문화관 DB", type="string"), AttributeInfo(name="to", description="The recipient of the email. e.g.) doubleyyh@kaist.ac.kr, 대학원 총학생회, 총장, 학생#전체, 학술문화관 DB", type="string"), AttributeInfo(name="year", description="The year the email was sent. e.g.) 2022", type="integer"), AttributeInfo(name="month", description="The month the email was sent. e.g.) 01, 02", type="integer"), AttributeInfo(name="day", description="The day the email was sent. e.g.) 01, 05, 28, 31", type="integer"), AttributeInfo(name="hour", description="The hour the email was sent. e.g.) 12, 23, 22", type="integer"), AttributeInfo(name="minute", description="The minute the email was sent. e.g.) 00, 05, 12", type="integer"), AttributeInfo(name="second", description="The second the email was sent. e.g.) 00, 34, 25, 59", type="integer") ]
- 예시 코드:
2. 과제 1 풀기
3. 피어세션
내일 해볼 활동을 정했다. github 스터디를 진행하기로 했다.
- local에서 변경사항 만들고 변경사항을 온라인으로 publish하고 새 레포지토리를 만들기
- sync fork 한 상태에서 readme 수정하고 pull request 하기
4. 회고
부스트캠프가 끝나고 Solar LLM 세미나를 들었다.