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

신고하기

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

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

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

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

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

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

      임시저장함

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

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

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

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

      회원정보 연결

      🌟 알려지지 않은 미지를 탐험하다: Co-STORM으로 정보를 찾는 새로운 방법

      y9yk 25.06.24
      561 2 1
      DEVOTEE 요약
      복잡한 정보 탐색에서 ‘알려지지 않은 미지(Unknown Unknowns)’를 효과적으로 발견하기 위해 Co-STORM이 개발되었습니다. 이 시스템은 여러 AI 에이전트 간의 협력적 담화와 사용자 상호작용을 결합해 정보의 깊이와 참신성을 강화하며, 특히 중재자 역할을 통해 새로운 관점을 제시하고 우연한 정보 발견을 가능하게 합니다. 평가 결과, Co-STORM은 검색 엔진과 기존 AI 시스템을 능가하며, 사용자가 더 깊이 있는 학습과 통찰에 도달할 수 있도록 돕는 혁신적 정보 탐색 도구로 인정받았습니다.

      정보의 바다에서 길을 잃으셨나요?

      여러분은 끝없이 펼쳐진 정보의 바다에서 길을 잃어본 적이 있나요?

      학술 연구를 하거나, 시장을 분석하거나, 중요한 의사 결정을 해야 할 때 복잡한 정보들 속에서 우리는 종종 난관에 부딪히곤 합니다.


      알려진 미지 vs 알려지지 않은 미지

      무엇을 찾아야 할지 명확히 알고 있는 '알려진 미지(Known Unknowns)'는 이제 어렵지 않습니다.

      최신 AI 챗봇이나 검색 엔진을 통해 쉽게 답을 찾을 수 있죠. "GPT-4의 최신 업데이트는 무엇인가요?"와 같은 구체적인 질문에는 정확한 답변을 얻을 수 있습니다.

      하지만 진짜 어려운 건 우리가 무엇을 모르는지조차 모르는 영역, 바로 '알려지지 않은 미지(Unknown Unknowns)'를 탐색할 때입니다.

      이는 단순히 정보를 검색하는 것이 아닌, 우리가 미처 생각하지 못했던 새로운 관점과 지식을 발견하는 것을 의미합니다.


      기존 정보 시스템의 한계

      그렇다면 왜 기존의 시스템들은 이러한 '알려지지 않은 미지' 탐색에 한계를 보였을까요?

      • AI 챗봇의 한계: 구체적인 질문에는 강하지만, 사용자가 미처 생각하지 못한 영역을 발견하는 데는 부족합니다.

      • 질의응답 시스템의 수동성: 사용자가 모든 질문을 직접 해야 하다 보니, 새로운 관점을 발견하기 어렵습니다.

      • 검색 엔진의 한계:

        • 사용자의 질문에 수동적으로만 반응합니다.

        • 기존 관점만 강화하는 쪽으로 대화를 만들어냅니다.

        • 특히 사전 지식이 부족한 사용자는 더 큰 어려움을 겪습니다.

      이러한 한계를 극복하기 위해 Co-STORM - Collaborative Synthesis of Topic Outlines through Retrieval and Multi-perspective Question Asking이 탄생했습니다.

      Co-STORM은 사용자가 '알려지지 않은 미지'를 효과적으로 탐색하고, 새로운 지식의 지평을 넓힐 수 있도록 도와주는 혁신적인 도구입니다.


      Co-STORM: 협력적 담론을 통한 새로운 학습 방식

      앞서 살펴본 바와 같이, 기존 정보 시스템들은 우리가 무엇을 모르는지조차 인지하지 못하는 '알려지지 않은 미지(Unknown Unknowns)'를 탐색하는 데 한계를 가지고 있었습니다.

      이러한 문제에 대한 해답을 찾기 위해 Co-STORM은 근본적인 아이디어, 즉 협력적 담론을 통한 학습 - Learning through Collaborative Discourse에 집중했습니다.

      이 아이디어는 일상생활 속에서 흔히 접할 수 있는 교육 시나리오에서 영감을 받았습니다.

      아이들이나 학생들이 부모나 교사와의 대화를 듣고 참여하면서 자연스럽게 지식을 습득하고 이해를 깊어지게 하는 방식을 여러 언어 모델(LM) 에이전트 간에서도 이루어질 수 있도록 차용하게 한 것이죠.

      사용자가 모든 질문을 던져야 하는 기존의 질의 응답 시스템과는 달리, 이런 방식을 택하게 되면서 사용자는 “알려지지 않은 미지”의 정보를 우연히 발견하며 학습을 진행할 수 있게 되었습니다.


      협력적 담론

      Co-STORM은 사용자가 능동적으로 참여하거나 대화를 관찰하면서 “알려지지 않은 미지”를 발견하고 복잡한 정보를 탐색하며 학습할 수 있도록, “협력적 담론”이라는 방법론을 활용합니다.

      실제로 이 방법론은 아래와 같은 플로우로 구현되어 있으며 → 플로우의 끝에서 다양한 관점이 녹아있는 훌륭한 리서치 보고서를 얻을 수 있다는 것을 확인할 수 있습니다.

      Co-STORM 동작 플로우

      이 플로우 전체 과정 중에 가장 중요한 5가지 주요 과정은 다음과 같습니다.

      1) 역할 만들기(Role Creation) 과정

      Co-STORM은 다음과 같은 4가지 주요 역할을 수행할 수 있는 에이전트를 마련하고 있습니다.

      A. CoStormExpert (전문가 에이전트)

      class CoStormExpert(Agent):
          def __init__(self, topic, role_name, role_description, ...):
              # 각 전문가는 특정 역할과 관점을 가짐
              self.role_name = role_name  # 예: "AI Researcher", "Industry Expert"
              self.role_description = role_description  # 전문 분야 설명

      역할:

      • 특정 관점에서 정보를 제공하고 분석

      • 검색을 통해 근거 있는 답변 생성

      • 대화에 전문적 깊이 추가

      B. Moderator (사회자)

      class Moderator(Agent):
          def __init__(self, topic, role_name="Moderator", ...):
              # 대화의 흐름을 관리하고 새로운 관점 주입

      역할:

      • 대화가 정체되거나 반복될 때 새로운 질문 생성

      • 사용되지 않은 정보를 기반으로 새로운 관점 주입

      • 대화의 균형과 다양성 유지

      C. SimulatedUser (시뮬레이션된 사용자)

      class SimulatedUser(Agent):
          def __init__(self, topic, role_name="Guest", intent=None, ...):
              # 실제 사용자 상호작용을 시뮬레이션

      역할:

      • 실제 사용자의 의도에 따른 질문 생성

      • 자동화된 실험을 위한 사용자 행동 시뮬레이션

      D. General Knowledge Provider (일반 지식 제공자)

      self.general_knowledge_provider = CoStormExpert(
          role_name="General Knowledge Provider",
          role_description="Focus on broadly covering the basic facts about the question."
      )

      역할:

      • 기본적인 사실과 배경 정보 제공

      • 다른 전문가들이 특화된 관점을 제시할 수 있도록 기반 마련

      2) 전문가 생성 및 역할 배정 과정

      플로우 전체에서 활약하는 전문가 에이전트는 아래와 같이 1) 일반적인 전문가와 2) 특정 초점에 맞는 전문가를 생성할 수 있도록 구분되어 있으며,

      class GenerateExpertModule(dspy.Module):
          def forward(self, topic: str, num_experts: int, background_info: str = "", focus: str = ""):
              if not focus:
                  # 일반적인 전문가 생성
                  output = self.generate_expert_general(
                      topic=topic, background_info=background_info, topN=num_experts
                  ).experts
              else:
                  # 특정 초점에 맞는 전문가 생성
                  output = self.generate_expert_w_focus(
                      topic=topic, background_info=background_info, focus=focus, topN=num_experts
                  ).experts

      각 전문가 에이전트는 주제에 대한 배경 정보를 갖추는 것과 더불어 다양성, 대립성, 관련성, 균형을 유지할 수 있도록 생성된다는 것을 확인할 수 있습니다.

      class GenerateExpertGeneral(dspy.Signature):
          """You need to select a group of diverse experts who will be suitable to be invited to a roundtable discussion on the given topic.
          Each expert should represent a different perspective, role, or affiliation related to this topic.
          You can use the background information provided about the topic for inspiration. For each expert, add a description of their expertise and what they will focus on during the discussion.
          No need to include speakers name in the output.
          Strictly follow format below:
          1. [speaker 1 role]: [speaker 1 short description]
          2. [speaker 2 role]: [speaker 2 short description]
          """
      
          topic = dspy.InputField(prefix="Topic of interest:", format=str)
          background_info = dspy.InputField(
              prefix="Background information about the topic:\n", format=str
          )
          topN = dspy.InputField(prefix="Number of speakers needed: ", format=str)
          experts = dspy.OutputField(format=str)
      
      class GenerateExpertWithFocus(dspy.Signature):
          """
          You need to select a group of speakers who will be suitable to have roundtable discussion on the [topic] of specific [focus].
          You may consider inviting speakers having opposite stands on the topic; speakers representing different interest parties; Ensure that the selected speakers are directly connected to the specific context and scenario provided.
          For example, if the discussion focus is about a recent event at a specific university, consider inviting students, faculty members, journalists covering the event, university officials, and local community members.
          Use the background information provided about the topic for inspiration. For each speaker, add a description of their interests and what they will focus on during the discussion.
          No need to include speakers name in the output.
          Strictly follow format below:
          1. [speaker 1 role]: [speaker 1 short description]
          2. [speaker 2 role]: [speaker 2 short description]
          """
      
          topic = dspy.InputField(prefix="Topic of interest:", format=str)
          background_info = dspy.InputField(prefix="Background information:\n", format=str)
          focus = dspy.InputField(prefix="Discussion focus: ", format=str)
          topN = dspy.InputField(prefix="Number of speakers needed: ", format=str)
          experts = dspy.OutputField(format=str)

      전문가 생성 원칙:

      • 다양성: 서로 다른 관점, 역할, 소속을 가진 전문가들

      • 대립성: 반대 입장을 가진 전문가들 포함

      • 관련성: 주제와 직접적으로 연결된 전문가들

      • 균형: 다양한 이해관계자들 포함

      3) 사용자 참여 과정 (사용자 개입 여부 판단)

      다양한 전문가 에이전트 간의 협력적 담론이 이어지다보면, 실제 인간의 대화처럼 질문과 답변이 균형있게 이루어지지 않는 케이스가 종종 발생할 수 있습니다.

      (e.g., 가령 연속된 답변을 지속한다거나, 편향적인 주제에 대해서만 이야기가 흐를 수 있습니다.)


      이러한 문제에서 벗어나기 위해 사용자가 대화의 중간에 참여할 수 있는 조건을 마련해두고, 이를 활용할 수 있도록 기능이 마련되어 있습니다.

      def _should_generate_question(self, conversation_history: List[ConversationTurn]) -> bool:
          consecutive_non_questioning_turn = 0
          for conv_turn in reversed(conversation_history):
              if conv_turn.utterance_type not in ["Original Question", "Information Request"]:
                  consecutive_non_questioning_turn += 1
              else:
                  break
          return (
              consecutive_non_questioning_turn
              >= self.runner_argument.moderator_override_N_consecutive_answering_turn
          )

      사회자 개입 조건:

      • 연속된 답변 턴이 moderator_override_N_consecutive_answering_turn (기본값: 3) 이상일 때

      • 대화가 정체되거나 반복될 때 새로운 질문으로 방향 전환

      4) 대화 턴 관리 및 역할 배정 과정

      Co-STORM에서는 대화 턴을 아래와 같은 우선순위를 통해 관리하고 있습니다.

      • 1순위 - 시뮬레이션된 사용자

        • (참고) simulate_user=True, 이 옵션은 연구목적으로 사용되고 있습니다.

      • 2/3순위 - 사회자 개입

        • 답변이 3회 (기본값) 이상 이어질 때 → 새로운 관점을 가지고 있는 질문을 해줄 수 있는 사회자를 개입시킵니다.

        • 참고로 질문이 있을 경우, 사용자가 개입할 수 있습니다.

      • 4순위 - 전문가 순환 시스템

        • 마지막 대화가 질문이 아닐 경우, 계속 답변할 수 있는 전문가를 순차적으로 투입하고 있습니다.

        • 투입된 전문가들은 답변을 이어서 진행하게 됩니다.

      def get_next_turn_policy(self, conversation_history: List[ConversationTurn]) -> TurnPolicySpec:
          next_turn_policy = TurnPolicySpec()  # 기본 정책 객체 생성
          
          # 우선순위 1: 사용자 시뮬레이션 (최우선)
          if simulate_user:
              next_turn_policy.agent = self.simulated_user
          
          # 우선순위 2: 사회자 강제 개입
          elif self.next_turn_moderator_override:
              next_turn_policy.agent = self.moderator
          
          # 우선순위 3: 사회자 자동 개입 (연속 답변 감지)
          elif self._should_generate_question(conversation_history):
              next_turn_policy.agent = self.moderator
              next_turn_policy.should_reorganize_knowledge_base = True
          
          # 우선순위 4: 전문가 순환 시스템 (기본)
          else:
              next_turn_policy.agent = self.general_knowledge_provider
              if not self._is_last_turn_questioning(conversation_history):
                  next_turn_policy.agent = self.experts.pop(0)
                  self.experts.append(next_turn_policy.agent)

      5) 전문가 동적 업데이트 과정

      대화 턴 배정 시 마지막 대화가 다시 질문이 되면, 해당 질문에 적절한 답변을 내놓을 수 있는 전문가들을 아래와 같이 다시 설정하게 됩니다.

      *실제로 focus, background_info가 다시 요청된 질문에 따라서 갱신되게 되며, 갱신된 정보를 토대로 새로운 전문가들이 생성되고 설정되게 됩니다.

      def _update_expert_list_from_utterance(self, focus: str, background_info: str):
          expert_names = self.generate_expert_module(
              topic=self.runner_argument.topic,
              background_info=background_info,
              focus=focus,
              num_experts=self.runner_argument.max_num_round_table_experts,
          ).experts
          self.experts = self._parse_expert_names_to_agent(expert_names)

      동적 업데이트 조건:

      • 새로운 질문이 제기될 때 (_is_last_turn_questioning)

      • 대화의 초점이 변경될 때

      • 더 적합한 전문가들이 필요할 때


      Co-STORM의 성능 평가 결과

      Co-STORM의 성능 평가는 자동 평가와 인적 평가의 두 가지 방식으로 이루어졌습니다.

      자동 평가 (Automatic Evaluation)

      • 데이터셋

        • WildSeek 데이터셋을 사용하여 실제 사용자의 정보 탐색 기록과 목표를 기반으로 평가했습니다.

        • WildSeek 데이터셋은 복잡한 정보 탐색 작업을 연구하기 위해 실제 사용자가 지정한 주제와 목표를 바탕으로 구축된 데이터입니다.

      • 비교 대상

        • RAG Chatbot과 STORM + QA 시스템을 기준으로 Co-STORM의 성능을 비교했습니다.

          • RAG Chatbot은 검색 엔진에서 정보를 검색하고 일문일답 형식으로 사용자와 상호작용합니다.

          • STORM + QA는 주어진 주제에 대한 일반적인 보고서를 생성한 후, 사용자의 후속 질문에 검색 엔진을 통해 답변을 제공합니다.

      • 평가 지표

        • 보고서 품질

          • 관련성(Relevance), 넓은 범위(Breadth), 깊이(Depth), 참신성(Novelty)을 포함한 네 가지 지표로 평가했습니다. 정보 다양성(Information Diversity)도 측정했습니다.

        • 담화 품질

          • 질문하는 발화(utterance)에 대해서는 참신성(Novelty), 의도 일치(Intent Alignment), 반복 없음(No Repetition)을 평가했습니다.

          • 질문에 답하는 발화에 대해서는 일관성(Consistency)과 참여도(Engagement)를 평가했습니다.

          • 고유한 인용 URL의 수도 기록하여 정보 다양성을 나타냈습니다.

      • 결과

        • Co-STORM은 보고서 품질에서 특히 깊이(Depth)와 참신성(Novelty) 측면에서 기준선(RAG Chatbot 및 STORM + QA)을 뛰어넘는 성능을 보였습니다.

          이는 Co-STORM이 여러 에이전트 역할을 시뮬레이션하는 협업 담화를 통해 깊이 있고 생각을 자극하는 논의를 가능하게 하기 때문입니다.

        • 담화 품질 측면에서 Co-STORM의 질문-응답 발화는 일관성(Consistency)과 참여도(Engagement)에서 기준선보다 훨씬 뛰어났습니다.

        • 멀티-전문가(multi-expert) 및 중재자(moderator) 역할이 시스템 성능에 긍정적인 영향을 미친다는 것을 확인했습니다.

          특히 중재자 역할을 제거하는 것이 전문가 수를 줄이는 것보다 더 큰 부정적인 영향을 미쳤습니다.

          중재자는 사용자가 생각하지 못했던 '알려지지 않은 미지' 영역의 정보를 탐색하도록 담화를 유도하는 중요한 역할을 합니다.

      인적 평가 (Human Evaluation)

      • 참가자 및 설정

        • 다양한 배경을 가진 20명의 자원봉사자가 참여했으며, Co-STORM을 Google 검색 또는 RAG Chatbot과 비교하는 두 그룹으로 나뉘어 진행되었습니다.

        • 참가자들은 동일한 도메인 내에서 두 가지 주제에 대해 정보를 탐색하고 경험을 평가했습니다.

      • 평가 지표

        • 관련성, 넓은 범위, 깊이, 참신성/우연한 발견(Serendipity)에 대해 5점 척도로 평가했습니다.

        • 필요한 노력, 사용자 참여, 에코 체임버 문제 해결, 전반적인 경험에 대한 선호도를 질문했습니다.

      • 결과

        • 참가자의 70%가 Co-STORM을 검색 엔진보다 선호했고, 78%는 RAG Chatbot보다 Co-STORM을 선호했습니다.

        • Co-STORM은 사용자가 더 넓고 깊이 있는 정보를 발견하는 데 도움을 주었으며, 특히 검색 엔진 및 RAG Chatbot에 비해 정보의 넓이와 깊이 측면에서 높은 평가를 받았습니다.

        • 또한, Co-STORM은 우연한 정보 발견(serendipitous discovery)을 용이하게 하고 필요한 정신적 노력을 줄여주었습니다.

          한 참가자는 "Co-STORM은 거의 완전한 자동화를 가능하게 하며, 사용자가 생각지도 못한 주제를 제시함으로써 훨씬 더 나은 이해를 돕는다"고 언급했습니다.


      결론

      Co-STORM은 사용자가 '알려지지 않은 미지(unknown unknowns)'의 정보를 탐색하고 학습하는 데 도움을 주기 위해 개발된 혁신적인 정보 탐색 지원 시스템입니다.

      협업적 담화 기능과 사용자 상호작용 지원, 그리고 전문가 동적 업데이트 기능을 결합하여 복잡한 정보 탐색과 학습 과정을 획기적으로 개선하는 데 성공했습니다.

      더불어 이런 기능을 토대로 사용자가 복잡한 정보 탐색 과정에서 ‘알려지지 않은 미지’를 발견하고 학습하는 방식을 혁신하는 새로운 패러다임을 제시하고 있습니다.

      이는 정보 과부하 시대에 사용자들이 더욱 심층적이고 통찰력있는 지식을 습득할 수 있도록 돕는 강력한 도구로서 그 잠재력을 증명하고 있다고 봅니다.


      References

      댓글 0

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

      y9yk 님의 최신 블로그

      더보기
      동영상 기고하기