데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      OpenLab - OpenLLM, Advanced RAG를 이용한 chatbot 구현

      tica 24.07.14
      650 3 0
      DEVOTEE 요약
      OpenLLM 스터디 모임에서는 Advanced RAG 챗봇 개발을 위한 기능 구현을 진행했습니다. 7명 중 6명이 필요한 기능을 현업에서도 활용 가능한 수준으로 완료했습니다. 마지막 모임에서는 multi-query 기능을 적용하여 검색 정확도를 높이는 방법을 구현해 보았습니다.
      DEVOTEE 추천 블로그

      OpenLLM 스터디 모임 경과를 정리하면서 현재까지 구현된 Advanced RAG 챗봇 내용을 함께 공유드립니다.


      스터디 모임 경과

      주제 : OpenLLM 6차 오프라인 모임(종료)

      일시 : 7/17 20:00 ~ 21:00

      장소 : 판교사옥

      참석 : 멤버 7명 중 7명


      스터디 내용

      1) 결론 : 각자 필요한 기능 구현 7명 중 6명 완료(7명 전원 코드 개념 이해)

      2) 결론 정리

      • 최초 모델은 EEVE-Korean-Instruct-10.8B-v1.0-GGUF 를 사용

      • 임베딩 모델은 BAAI/bge-m3 사용

      • PDF 로딩에는 PyPDFLoader() 이 유연하다

      • post/pre retriever 를 사용하면 성능이 향상된다

      3) 현업 활용

      • 방장을 포함한 멤버 7명 중 6명이 현업에서 사용할 수 있는 수준의 코드 구현 또는 설계 완료

      스크린샷 2024-07-18 오후 5.41.03.png


      OpenLLM 스터디 5차 과제

      1. summary.

      지금 까지 Advanced RAG의 기법 중 post retrieval에 해당하는 BM25 , reranking을 사용해 봤는데요

      이번은 pre retrieval 기법 중 하나인 multi-query 를 적용 해 보았습니다.

      2. Multi Query

      LLM에 query를 input으로 주어, 주어진 query와 유사한 n 개의 query를 생성.

      이 n+1개의 query로 retrieval 하여 정확도를 높이는 방법 입니다.

      image.png

      3. implementation

      사용하고 있는 llamaIndex는 multi query가 구현 되어 있지 않음

      하기와 같이 multi query class를 구현하여 이를 처리 하였음

      특이 사항은 LLM이 주는 답변을 parsing해야 하는 수고를 줄이기 위해

      prompt에 json 형식으로 주기를 요청했고 prompt 말미에 하기와 같이 올바른

      json 방식을 유도 하였음

      [

      {{ "문장":

      class MultiQueriesRetriever:
      
      	def __init__(self, base_retriever, model, model_name):
      		self.base_retriever = base_retriever
      		self.model = model
      		self.model_name = model_name
      	
      	def _get_top_n_unique(self,topks, n):
      		sorted_topks = sorted(topks, key=lambda x: x.score, reverse=True)
      		unique_nodes = []
      		seen_ids = set()
      		for node_with_score in sorted_topks:
      			if node_with_score.id_ not in seen_ids:
      			unique_nodes.append(node_with_score)
      			seen_ids.add(node_with_score.id_)
      			if len(unique_nodes) == n:
      				break
      		return unique_nodes
      	
      	def _gen_queries(self, question) -> List[str]:
      	
      		prompt = f"""주어진 문장에 대해 동일한 내용을 갖는 유사한 한글 문장 5개를 생성합니다. json 형태로 생성해 주세요. json 내용이외의 내용은 생성하지 마세요.
      		문장: {question}
      		[
      			{{ "문장": """
      		
      		res = self.model.chat.completions.create(
      		model=self.model_name,
      		messages=[
      			{"role": "system", "content": "당신은 한글 생성 모델입니다. 요청한 내용에 맞게 문장을 생성해 주세요. "},
      			{
      			"role": "user",
      			"content": prompt
      			}
      		],
      		temperature=0.,
      		max_tokens=512,
      		top_p=1
      		)
      		
      		questions=[question]
      		try:
      			responses=json.loads(res.choices[0].message.content)
      			for i,element in enumerate(responses):
      				questions.append(element['문장'])
      		except:
      			print(f'{res=} not proper response from llm')
      		return questions
      		
      		def get_topk(self,question,n):
      			questions=self._gen_queries(question)
      			topks=[]
      			for i,q in enumerate(questions):
      				topks+=self.base_retriever.as_retriever(similarity_top_k=n).retrieve(q)
      			topks=self._get_top_n_unique(topks,n)
      			
      			return topks

      실행

      image.png

      source code

      첨부 중 multiquery.py 와 chatbot.py 만 기존 4차 구현 대비 수정 되었습니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      tica 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기