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

신고하기

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

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

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

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

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

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

      임시저장함

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

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

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

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

      회원정보 연결

      멀티 턴 대화 토픽 추출 - 연구 결과(3)

      용상 23.11.06
      1,303 1 0
      DEVOTEE 요약
      SKT AI Fellowship 5기 팀이 한국어 언어 모델을 활용해 대화 주제 추적 알고리즘을 개발하였다. 대화 내용에 따라 주제가 업데이트되지 않는 한계점을 타파하기 위해 대화 주제를 기준으로 토픽 데이터셋을 만들고 대화 사이의 주제 변화를 추적하는 시스템을 개발하였다. 이 시스템은 실시간으로 대화의 주제 변화를 추적하고 적용하여 실질적인 대화 유기성을 확보할 수 있도록 도움을 줄 것이다.
      DEVOTEE 추천 블로그

      안녕하세요, 저희는 SKT AI Fellowship 5기 07번 과제 ‘한국어 언어 모델 응용 과제’를 맡게 된 자연어쩔티비내리는호남선 유용상, 정민화, 이승민 입니다.

      어느덧 6개월이 지나 연구가 마무리되어 저희 성과를 전해드릴 수 있게 되어 정말 감회가 뜻깊습니다.


      연구 배경 및 목적


      ChatGPT와 같은 대화형 인공지능 서비스, 다들 사용해 보셨을텐데요.


      이와 같은 서비스를 사용할 때 한 번 했던 대화를 다시 확인할 수 있도록 왼쪽에 세션 제목이 생성되는데,

      현재 대부분의 서비스가 보시는 것처럼 첫 번째 대화 내용에 기반해서 세션 제목이 생성되고, 첫 번째 대화 이후 대화 주제가 변하더라도 그것이 반영되지 않는다는 한계점이 존재합니다.


      화면의 예시 대화를 보시면, 딸기 스무디에 관한 대화 이후 딸기에 들어있는 영양소에 대한 추가적인 대화를 진행하였음에도 불구하고 세션 제목, 즉 대화의 토픽은 갱신이 되지 않는 모습입니다.


      따라서 저희 팀은 이번 프로젝트에서 대화 주제를 기준으로 토픽 데이터셋을 구축하고 토픽 생성 모델과 토픽 추적 알고리즘을 개발하여

      채팅 혹은 통화 내역, 신문 기사 등에서 나타나는 주제의 이동, 확대, 축소를 추적하는 프레임워크를 개발하는 과제를 수행하였습니다.


      위의 대화 내용과 같이 최초 대화에 기반해 생성된 ‘스무디’ 라는 토픽에서 두번째 대화부터 이야기하고 있는 ‘영양소’라는 주제를 포착할 수 있는 알고리즘을 개발하는 것을 목표로 삼았습니다.



      프로젝트를 진행한 과정을 개괄적으로 소개드리겠습니다.


      이번 프로젝트에서 사용한 데이터셋은 GPT4ALL, Dolly, Vicuna 등 질문-응답 구조의 데이터를 한국어로 번역한 kullm 데이터셋입니다.


      이 데이터에 챗지피티 api를 이용해서 각 대화의 내용을 포괄할 수 있는 토픽, 즉 주제 데이터를 새로이 구축하였습니다.

      구축한 질문-응답-주제 데이터를 활용하여 클러스터링과 키워드 추출이라는 두 가지 방법으로 각 대화 토픽의 상위 개념인 상위 토픽을 추출하여 대화 사이의 교집합을 찾을 수 있도록 하였습니다.


      위 과정을 통해 추출한 상위토픽들은 대화에서 토픽을 추출하는 t5 언어모델을 훈련시키는 것과, 공통된 상위토픽을 기준으로 상위-하위 토픽들 간의 연결관계를 나타내는 그래프 데이터 구축에 사용하였습니다.


      이 그래프를 이용하여 실제 주제가 변화하는 멀티 턴 대화 시나리오에서 토픽을 추적할 수 있는 알고리즘을 개발하였고,

      SKT 내부 LLM과의 실제 채팅 시나리오에서 성공적으로 대화의 토픽 변화를 추적하는 것을 결과로 확인할 수 있었습니다.


      이제 각각의 과정을 수행한 방법에 대해 자세히 살펴보도록 하겠습니다.

      먼저 토픽 데이터 구축 과정입니다.



      저희는 질문-응답 구조의 구름 데이터셋을 ChatGPT API를 사용하여 각 대화의 토픽을 생성하였는데,

      이 때 프롬프트에 대화의 내용을 요약하며 포괄하는 토픽을 만들어달라는 것 뿐 아니라 실제 대화와 토픽 예시를 프롬프트에 포함하는 퓨 샷 기법을 사용해 api의 성능을 높이고자 했습니다.


      이렇게 추출한 토픽 데이터가 실제로 원본 대화와 연관이 있는지 검증하기 위해 원본 텍스트와의 공통 부분 길이를 기준으로 산정된 루지-L 점수와 의미적 유사도를 계산하는데

      주로 사용되는 simCSE임베딩 방법을 활용해 토픽의 유효성을 계산하는 새로운 점수를 고안하였습니다.

      이 점수를 기준으로 총 11만개의 원본 데이터 중 9만 8천개를 선정하여 사용하였습니다.



      추출한 토픽들을 diffcse방법을 사용해 768차원의 벡터로 투영한 뒤,

      계산 시간 절약을 위해 UMAP기법을 통해 벡터의 차원을 축소시켜 HDBSCAN기법으로 유사한 의미를 가지는 토픽끼리 클러스터를 형성하였습니다.

      차원축소와 클러스터링에 사용한 유맵, HDBSCAN 방법은 버토픽이라는 토픽 모델링 방법론에서 사용한 것에서 영감을 받아 사용했습니다.


      비지도적 방법으로 클러스터링을 시행했기 때문에 클러스터들을 지칭하는 이름이 존재하지 않고, 일부 클러스터들이 유효하지 않거나 어느 클러스터에도 속하지 않는 토픽들이 있었기 때문에

      저희는 chatgpt api를 통해 클러스터에 대한 이름과 점수를 매겼고, 일정 점수 이하를 얻은 클러스터는 데이터에서 배제하였습니다.


      이를 통해 딸기스무디 제조법, 바나나스무디 만들기, 복숭아 맛 묘사 등의 토픽이 ‘과일’이라는 상위 클러스터에 속하게 되었습니다.



      상위 토픽을 추출하는 두 번째 방법으로는 개별 토픽에서 그 토픽을 포함하는 상위 키워드 최대 3개를 chatgpt api를 사용해 추출하였습니다.

      예시로 ‘딸기 스무디 제조법’이라는 하위 토픽에서 ‘과일’,’음료’,’조리법’이라는 상위 키워드를 추출할 수 있었습니다.




      여러 방법으로 추출한 상위, 하위 토픽 데이터를 통합하여 토픽 추적에 사용할 수 있는 데이터를 구축하였습니다.

      데이터는 크게 두 가지 형태로 구분할 수 있습니다.

      상위 토픽 데이터는 상위 토픽 제목과 그에 속하는 하위 토픽 목록, 상위 토픽에 대한 임베딩 정보로 구성되어 있습니다.

      하위 토픽 데이터는 토픽 제목과 해당 하위 토픽을 포함하고 있는 상위 토픽들, 임베딩 정보로 구축하였습니다.

      데이터를 이런 형태로 구축함으로써 상위 토픽이나 하위 토픽 중 한 가지를 통해 연결된 다른 토픽들을 알 수 있게 하였습니다.



      구축한 토픽 관계 데이터를 통해 저희는 유기적으로 변화하는 대화의 토픽을 추적할 수 있는 알고리즘을 구상하였습니다.


      알고리즘은 크게 4가지 단계로 나뉩니다.

      1. 토픽 임베딩 추출

        먼저 대화-토픽 데이터로 학습시킨 T5 언어모델로 대화에 관한 토픽을 생성한 뒤, diffCSE 모델을 활용해 토픽에 대한 768차원 임베딩 벡터를 추출합니다.

        예를 들어 ‘딸기 스무디를 만들고 싶은데, 재료 목록을 알려줘’ 라는 대화가 입력되었을 경우, 토픽 추출 모델은 ‘딸기 스무디 재료 목록’이라는 토픽 데이터를 생성하고, 이에 대한 벡터를 얻게 됩니다.

      2. 연관 토픽 목록 생성

        사전에 구축한 상위 토픽 데이터에서 추출한 토픽과 가장 유사한 하위 토픽을 추출하고, 그 하위토픽을 포함하는 상위 토픽으로 연관 토픽 목록을 생성합니다.

        저희 그래프에서 ‘딸기 스무디 재료 목록’이라는 토픽 데이터와 포함 관계를 갖는 상위 토픽은 ‘음식 재료’와 ‘재료’입니다.

      3. 후보 토픽 목록 업데이트

        이전 턴의 후보 토픽 목록과 현재 토픽 목록의 유사도를 계산 후, 현재 턴의 연관 토픽 목록과 통합해 현재 턴의 후보 토픽 목록을 구성합니다.

        이전 턴 대화의 후보 토픽 목록에 스무디, 과일과 같은 토픽이 있다면 현재 턴의 대화와도 유사도가 높게 계산되어 후보 토픽 목록에 포함될 것입니다.

      4. 최종 토픽 결정

        이렇게 구성한 현재 턴의 후보 토픽 중 가장 높은 유사도 점수를 갖는 토픽을 현재 턴의 최종 토픽으로 사용합니다.

        최종 토픽은 후보 토픽 목록 중 가장 유사도가 높은 ‘스무디’라는 토픽이 되었습니다.


      저희가 구축한 알고리즘에서는 사용자가 원하는 대로 옵션을 바꾸어 이용할 수 있도록 하였습니다.

      먼저 토픽 후보 목록 구성에 상위 토픽만 사용할 지, 하위토픽도 후보 목록에 포함할 지 선택할 수 있습니다.

      하위 토픽도 후보 목록에 포함할 시 더 정교한 토픽 추출이 가능하게 되지만, 데이터 수가 모자랄 경우 정확도가 떨어질 수 있습니다.


      현재 턴의 연관토픽목록을 다음 턴의 후보토픽목록에 포함시킬지 결정하는 턴 변경 하한선 또한 조정할 수 있도록 하였습니다.

      하한선을 높게 설정할 시 정확한 토픽 추적이 가능하지만 새로운 토픽의 포착이 힘들게 되며, 하한선이 낮을 경우 데이터에 존재하는 더 많은 토픽을 후보 목록에 포함시킬 수 있습니다.


      저희 알고리즘은 사전에 구축한 데이터 내에서만 토픽 추적이 가능하다는 한계점이 존재합니다.

      이 한계점을 극복하기 위해, 실시간으로 토픽 목록을 업데이트하는 기능을 추가하였습니다.

      데이터 내에서 입력된 대화와 유사한 토픽을 찾을 수 없는 경우, 해당 대화의 토픽을 상위토픽 목록에 새로 추가하여 다음 턴부터 반영할 수 있도록 하였습니다


      예시로 현재 턴의 토픽인 '딸기로 요리'라는 토픽과 유사한 데이터가 없을 경우, 다음 턴부터 상위 토픽 목록에 추가되어 유사한 주제의 대화가 지속될 시 후보 토픽 목록에 포함되고 주제에 반영됩니다.



      대화를 하다보면 맞아, 좋지,고마워 등 대화의 주제와 큰 상관이 없는 말들도 하기 마련입니다.

      이런 대화들이 토픽 변화에 영향을 주는 것을 방지하기 위해 메신저 대화에 나타나는 응답표현 연구 논문을 참고하여 단순응답 리스트를 작성하였고,

      토픽에 영향을 주지 않는 대화들과 높은 유사도를 가진 대화가 입력될 경우 토픽 추적을 하지 않도록 하였습니다.


      저희 프로그램의 작동 시간, 데이터 용량, 각종 설정등을 포함한 사양입니다.

      상위 토픽 총 5917건과 하위 토픽 약 8만건으로 토픽 데이터를 구축하였으며, 턴 별 처리시간은 평균 약 1초로 실시간으로 갱신된 토픽을 확인할 수 있습니다.

      데이터를 포함해 각종 설정은 사용자가 자유자재로 바꾸어 사용할 수 있도록 하였습니다.


      데모 영상 유튜브 링크


      저희 알고리즘을 skt LLM 어시스트와의 채팅 시나리오에 실제로 적용해본 결과를 데모 영상으로 제작하였습니다.

      스무디에 관한 대화를 하는 Turn 1~3 동안에는 주제를 스무디로 계속 유지하고 있는데요,

      대화의 주제가 바뀌자 변화를 잘 포착하는 것을 확인하실 수 있습니다.

      또한, '고마워' 와 같이 주제에 영향을 주지 않는 대화가 입력된 경우, 토픽이 변화하지 않는 모습입니다.



      저희 연구는 멀티턴 대화서비스에 활용 가능한 토픽 추적 프레임워크를 구축했다는 점과, LLM 대비 적은 자원으로 대화의 주제 추적을 효과적으로 수행할 수 있다는 점에서 의의를 갖습니다.

      후속 연구로는 데이터에 새로운 주제와 위계관계를 추가하는 것과 채팅 서비스 뿐 아니라 통화내역,언어모델학습용 코퍼스 등 다양한 문헌에 알고리즘을 적용하는 것,

      토픽을 태그로 활용하여 검색기능을 개발하는 것 등이 있을 수 있겠습니다.




      저희 알고리즘을 최근 화제가 되고있는 에이닷 통화녹음 기능에 활용해보았습니다.

      기존의 통화내역 요약 기능도 통화 내용 중 주제의 변화를 자세하고 정확하게 요약하고 있지만,

      저희 알고리즘 또한 동일한 대화 내역에 대해서 LLM을 사용하지 않고 대화 내용을 빠르고 정확하게 추적할 수 있는 것을 확인하였습니다.


      저희가 연구에 활용한 ChatGPT API 프롬프트 목록입니다.



      연구를 마치며

      저희의 여정은 여기까지였습니다. AI Fellowship을 진행하는동안 훌륭한 멘토님께 많이 배웠고,

      현실 세계에서 사람들에게 도움이 되고, 기업 입장에서 이윤을 창출할 수 있는 기술은 무엇일지 많은 아이디어를 얻어갈 수 있어 정말 행복한 시간이었습니다.


      멘토님, 운영자분들, 관계자 및 심사위원분들께 정말 감사합니다!!

      댓글 0

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

      용상 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기