자연어 처리_연애 상담 챗봇_프로젝트 (2)

임정민·2023년 2월 16일
5

프로젝트

목록 보기
16/33
post-thumbnail

KR-SBERT를 활용한 연애 상담 챗봇 프로젝트 입니다.

  • 자연어 처리 기술을 활용한 챗봇 미니 프로젝트입니다! 자연어 처리연애 상담 챗봇프로젝트 (1)에 이은 발표 PPT 및 설명입니다.

발표 및 PPT

안녕하세요. **조 발표를 맡게 된 임정민입니다. 반갑습니다.
저희 조의 자연어 처리 프로젝트 주제는 연애 상담 챗봇입니다. 연애 플레이 리스트라는 드라마를 참고해서 새싹 플레이 리스트라는 제목으로 시작하겠습니다.

목차입니다. 순서대로 팀원 소개와 주제 선정 배경, 그 다음으로 챗봇과 AI 스피커에 대해, 이번에 개발한 챗봇 시스템에 대해, 다음으로 연애 상담 챗봇 시현 마지막으로 차후 계획까지 설명드리겠습니다.

저희 팀원별 역할입니다. 미래에 원하는 직무에 맞춰서 역할 분담했고 나중에 포트폴리오 만들 때 활용하게끔 구성했습니다.

주제 선정 배경입니다. 발표를 듣고 계시는 학생분들의 세대, 20~30대 분들이 흥미로워 할만한 가볍고 재밌는 주제로 선정했습니다.또한 파이널 프로젝트 주제가 AI 스피커이기 때문에 AI 스피커를 사용할 때 사용자의 다양한 요청에 대해서 어떻게 처리할 지 공부해보고자 챗봇을 주제를 선택했습니다.

챗봇과 AI 스피커의 개발 관점에서의 차이점에 대한 내용입니다.이번에 다른 조 분들도 챗봇 만들어보셨겠지만, 저희조 또한 만들어 보면서 여러가지 어려운 점, 느낀 점들이 있는데요.

보통 챗봇이 가장 많이 쓰이는 곳은 24시간 업무 대응이 필요한 곳입니다.
예를 들어 인터파크 쇼핑 도우미 톡집사, 현대카드 실시간 상담 챗봇 Buddy 등이 있습니다.

이러한 챗봇들의 특징은 특정한 분야의 정보만 제공한다는 점입니다. 정보 전달 목적의 챗봇이기때문에 사용자의 질문에서부터 높은 확률로 예상가능한 핵심 키워드를 포함할 가능성이 높고 이는 개발하는 관점에서 볼 때 그 핵심 키워드를 기반으로 분류에 초점을 맞춘다면 구조적으로는 크게 어려운 작업은 아니라고 생각합니다.

하지만 AI 스피커는 보통 더 넓은 범위의 다양한 질문의 사용자 input에 대응해야 합니다. 대표적으로 KT 기가지니는 요즘에 배달 음식 주문, 버스 도착 시간 조회, 카카오 택시 호출 등 광범위한 주제들을 분류할 수 있어야합니다. 이런 서비스를 만들때는 사용자의 입력 주제가 한가지에서 두가지로 증가할수록 데이터 전처리 업무는 곱절로 늘어나 성능을 끌어올리는데에 정보 전달 챗봇보다 더 난이도가 있는 작업이라고 생각합니다.

하지만 저희 최종프로젝트는 AI 스피커를 만들어볼 생각이기 때문에 선행학습하는 겸 챗봇과 AI스피커의 그어느 중간지점, 다양한 질문을 받을 수 있는, 상담해주는 챗봇, ‘연애’라는 주제정도만 한정해서 연애 상담 챗봇을 한번 만들어 봤습니다.

저희가 개발한 연애 상담 챗봇 소개해드리겠습니다. 보이시는 귀여운 사진이 저희 챗봇 프로필 사진이구요. AI가 그려준 세상에 단 하나밖에 없는 사진입니다. 챗봇 이름은 R-P(알다시피) 입니다. 연애에 관련한 고민들을 해결해주는 챗봇입니다.일단 어플리케이션 실행하면 다음과 같습니다.


(‘나 남친이랑 헤어졌어’, ‘내일 소개팅 점심 뭐먹을까?’ 시현)

이번 상담 챗봇 개발하면서 만든 기능들입니다.크게 두가지 Point로 첫번째가 친밀감 형성, 두번째가 데이터 수집/재학습 자동화입니다.

Point1 친밀감 형성입니다. 이러한 상담하는 챗봇 혹은 AI 스피커 같은 경우는 사용자가 친밀감을 느낄 수 있고 챗봇을 하나의 인격체로 인식하게 하는 대화 스킬이 중요합니다. 그 첫번째 스킬로 사용자 이름을 주기적으로, 확률적으로 언급해주는 알고리즘입니다. 매우 간단한 기능이지만 이러한 디테일이 하나하나가 챗봇에게 애정을 느낄 수 있는 요소라고 생각합니다.


이에 대한 예시입니다. 사용자의 이름을 일정확률에 따라 언급해줍니다.

두번째 스킬로 랜덤 답변입니다. 같은 의미의 input을 연속적으로 입력했을 때 다양한 답변을 내놓게 하였습니다.

이에 대한 예시로 다음과 같습니다.

세번째로 중복 답변 일시 제거 스킬입니다. 앞서 언급드린 '랜덤 답변' 스킬과 연결지어 동일한 의미의 문장이 연속적으로 들어왔을 때 다양한 답변 중 하나를 출력하되 낮은 확률로 연속적인 답변이 출력되는 것을 방지하고자 최근 내놓은 3가지 답변은 일시적으로 제거하는 알고리즘입니다.

이에 대한 예시는 다음 사진과 같습니다.

Point2 데이터 수집/재학습입니다. 이 기능은 유지보수적인 기능, 새로운 버전이 출시될때 도움이 될 기능입니다. 사용자가 챗봇의 예상을 훨씬 벗어난 입력을 주었을 때 대응하고 이에 대한 데이터 수집을 자동화 할 수 있는 기능입니다. 또한 데이터 분석적으로 보았을 때 서비스 개발 의도와 사용자의 실 사용 목적의 괴리를 확인할 수 있고 나아가 사용자의 니즈에 따라 프로젝트의 방향성을 수정하는데 활용할 수도 있습니다.

사진에 보이시는 것처럼 모델이 학습한 데이터와 크게 동떨어지는 input이면 특정문구가 출력되고 서버에 저장되게 하였습니다.

여기까지가 구현한 기능들을 중심으로한 예시들이고 직접 웹으로 실행하여 보여드리겠습니다.

(챗봇 시현)


다음으로 오늘 발표일 전 학생분들께 구글 폼으로 연애 상담 챗봇의 input들을 수집했었습니다.

그 중 몇개를 뽑아보자면 '모태솔로인데 여자친구 사귀고 싶어요', '첫 만남 때 식사는 더치페이 해야할까요' 등이 있습니다. 생성해주신 데이터 기반으로, 실 사용자의 목적을 기반으로 모델들 재학습시켰고 이를 직접 보여드리면

(챗봇 시현)


여기까지가 4일에 걸쳐 개발한 자연어 처리 기술을 활용한 연애 상담 챗봇 프로젝트였습니다.

오늘 프로젝트 경험을 기반으로 최종 프로젝트에서 STT,TTS 기술까지 접목한 AI스피커 개발하여 선보일테니 많은 기대바랍니다.마지막으로 IP주소 공개해 드릴테니 한번 챗봇 사용해보시면 좋을 것 같고 또 이스터에그 넣어놨으니 한번 찾아보시고 힌트는 자신의 이름입니다. 욕 사용하시면 ip 떠서 밴해드릴꺼니까 욕은 사용하지 말아주세요.날카로운 질문이나 조언해주시면 될 것 같습니다. 감사합니다.

마치며...

현재 진행하고 있는 '새싹(SeSAC) 청년취업사관학교 인공지능 응용SW 개발자 양성과정'에서 목표한 최종프로젝트가 'AI스피커 사용 활성화 컨텐츠 기획/개발'입니다. 그리하여 먼저 AI스피커가 대화하는 원리/지식을 학습하고자 챗봇을 주제로 NLP 프로젝트를 기획하였습니다.

챗봇이라는 주제는 인터넷,도서의 오픈 소스,예제들이 많아서 원리를 학습하는데에 큰 어려움은 없었지만 다음과 같은 지식을 습득하였습니다. 참고한 도서로는 '텐서플로우2와 머신러닝을 활용한 자연어 처리','처음 배우는 딥러닝 챗봇'입니다. 해당 도서들의 챗봇 예제를 비교해가며 학습하였습니다. SequencetoSequence 나 Transformer 등 NLP 모델의 선택지, 혹은 모델이 사용자 input에 대해 문장 유사도를 계산하기 전 CNN을 통해 핵심 키워드별로 선분류하여 성능을 높히는 방법도 있었습니다.

먼저 저희 프로젝트 기준으로 CNN을 통한 주제분류는 '상담'이라는 테마 특성상 사람이 겪을 수 있는 상황/고민들이 너무 다양하다보니 오히려 선분류를 잘못하여 성능이 저하되는 경향을 보여 주제분류모델(CNN)은 사용하지 않게 되었습니다.

그리고 저희 프로젝트에서는 S2S모델 대신 Transformer 계열의 KR_SBERT_SentenceTransformer 모델을 사용하였습니다. '상담'이라는 주제 특성상 사용자의 input이 길어질 여지가 있습니다. 이는 S2S의 단점 중 하나인 문장의 길이 늘어남에 따라 앞쪽의 형태소의 가중치가 낮아지는 패턴이 드러날 것이라고 생각하였기 때문입니다.

이번 프로젝트 기획 단계에서 느낀점은 주제의 독창성도 중요하지만 이러한 챗봇과 같은 정보,예제가 많은 주제로 선정했을 때에는 다양한 원리들을 비교할 수 있고 세부 주제에 맞게 설계할 수 있는 유연함이 큰 장점이라고 느꼈습니다. 이러한 장점이 전체 프로젝트 진행이 수월하게 해주어 이 후 최종프로젝트를 설계할 때 이를 명심해야 겠다고 생각했습니다.

또한 NLP는 데이터의 전처리가 전부라고 해도 될 정도로 데이터의 퀄리티가 성능에 큰 영향을 미치는 것을 깨달았습니다. 작업 초기에 저희 '연애 상담'이라는 주제에 맞는 데이터를 찾지는 못하여 직접 약 1000개의 input-output 답변들을 만들었습니다. 그러다보니 데이터를 생성하는 팀원의 연애 경험에 따라 답변 내용이 치우쳐지거나 데이터 생성량의 한계가 있었고 이는 모델의 성능과 직결되었습니다. 이후 새로운 NLP 프로젝트를 진행하게 된다면 가장 우선적으로 데이터 수집 파이프라인을 구축하는 것을 중심에 두고 임해야 겠다는 생각이 들었습니다.

처음 경험해본 NLP 프로젝트입니다. 최근 기업에서 NLP 기술에 주목하는 이유는 웹상에서 리뷰,후기와 같이 사용자들의 텍스트 데이터들을 분석하여 프로덕트의 문제점,개선점을 파악하고 보완할 수 있기때문이라고 생각합니다. 미래에 저는 웹 개발자로써 사용자의 서비스 경험을 개선시키는 역할을 담당하고 싶기 때문에 이번 NLP 프로젝트가 값지고 흥미로운 경험이였습니다.

다음 프로젝트는 대망의 최종프로젝트입니다. 이번 자연어 처리 프로젝트에 함께한 팀원들과 이어서 진행하게 되었으며 퀄리티 좋은 하나의 온전한 서비스 형태로 퀄리티로 보여드리겠습니다.감사합니다!!!

profile
https://github.com/min731

3개의 댓글

comment-user-thumbnail
2023년 2월 16일

👍

답글 달기
comment-user-thumbnail
2023년 2월 16일

늘 항상 잘 보고 있습니다! 멋있어용!👍

답글 달기
comment-user-thumbnail
2023년 2월 16일

와 멋있어요~

답글 달기