본문 바로가기

BLOG/데이터 리뷰기

[데이터 리뷰] AIHUB(음성/자연어) - 한국어 SNS 대화 데이터

데이터 리뷰 : 데이터 대신 읽어드립니다!
#27 AIHUB(음성/자연어) - 한국어 SNS 대화 데이터

 

 

 

 

 코로나19의 영향으로 언택트 시대가 되면서 점점 온라인상의 대화가 증가하고, 비대면 회의, 상담, 업무 등이 증가하게 되었습니다. 이렇게 의사소통이 대화 음성이나 텍스트로 이루어짐에 따라 관련 대화 데이터도 급속도로 증가하게 되었는데요, 이러한 데이터의 활용성을 높이기 위해 적절한 대화 처리 기술의 도입이 요구되고 있다고 합니다.

 

이와 관련해서 AIHUB에서는 한국어 구어체 텍스트 기반의 자연어처리 AI 기술 개발을 목적으로 한국인의 일상 대화 메신저 채팅 데이터를 구축한 '한국어 SNS 대화' 데이터를 제공하고 있습니다. 따라서 이번 데이터 리뷰기에서는 이 데이터가 어떻게 이루어져 있는지 살펴보고, 어떻게 분석 및 활용하면 좋을지 생각해보도록 하겠습니다!

 

 

 

 

 

 

한국어 SNS 대화 데이터

 

(1) 데이터 정보

  • 제공기관 : (주)포티투마루
  • 데이터 개수 : 200만 개
  • 데이터 형식 : json
  • 데이터 구성 : 대화ID, 대화 참여자 수, 발화 수, 대화 유형, 대화 주제, 참여자 성별, 연령대, 거주지역, 대화 본문, 날짜, 시간 등
  • 다운로드 : https://aihub.or.kr/aidata/30718

 

'한국어 SNS 대화' 데이터는 메신저(카카오톡)에서 이루어진 대화 원문을 수집한 데이터인데요, 200만 개의 데이터를 제공하고 있으며 대화 참여자에 대한 정보도 자세하게 구축되어 있답니다.

 

https://aihub.or.kr/aidata/30718

 

한편, 위와 같이 데이터는 다양한 주제의 한국어 대화 원문 데이터를 수집한 뒤, 개인정보 비식별화 및 정제 작업을 거쳐, 대화 주제를 분류한 후 AI 모델링을 통해 데이터의 유효성을 검증하여 한국어 SNS 데이터셋을 구축했다고 합니다.

 

위에 다운로드 링크로 들어가면 회원가입 또는 로그인 후 데이터를 다운받을 수 있는데요, 데이터를 다운받아서 한번 데이터가 어떻게 이루어져 있는지 살펴보도록 하겠습니다~

 

 

(2) 데이터 리뷰

 한국어 SNS 대화 데이터는 json 파일 형식으로 이루어져 있는데요, json 파일을 열기 위해서 python 언어와 jupyter notebook을 사용하도록 하겠습니다. 

 

import json

with open('korean_sns.json', 'r', encoding='UTF8') as f :
    json_data = json.load(f)
    
datas = json_data['data']
print(len(datas))
datas[0]

 

위 코드는 데이터를 불러온 뒤, 첫 번째 데이터를 출력하는 코드로, 해당 코드를 실행해주면 아래와 같은 결과가 출력됩니다.

 

{'header': {'dialogueInfo': {'numberOfParticipants': 2,
   'numberOfUtterances': 18,
   'numberOfTurns': 8,
   'type': '일상 대화',
   'topic': '개인 및 관계',
   'dialogueID': 'b7d3e9ea-8b8d-596a-8abe-7dedd3ea565c'},
  'participantsInfo': [{'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '남성',
    'participantID': 'P01'},
   {'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '여성',
    'participantID': 'P02'}]},
 'body': [{'utterance': '내일 볼까 나도',
   'utteranceID': 'U1',
   'participantID': 'P01',
   'date': '2019-07-22',
   'turnID': 'T1',
   'time': '01:05:00'},
  {'utterance': '그친구랑',
   'utteranceID': 'U2',
   'participantID': 'P01',
   'date': '2019-07-22',
   'turnID': 'T1',
   'time': '01:05:00'},
  {'utterance': '여자야?',
   'utteranceID': 'U3',
   'participantID': 'P02',
   'date': '2019-07-22',
   'turnID': 'T2',
   'time': '01:05:00'},
...
(생략)
...
  {'utterance': '나도 많다는건 무슨뜻이지??',
   'utteranceID': 'U16',
   'participantID': 'P01',
   'date': '2019-07-22',
   'turnID': 'T7',
   'time': '01:06:00'},
  {'utterance': '너도 많다는거냐',
   'utteranceID': 'U17',
   'participantID': 'P01',
   'date': '2019-07-22',
   'turnID': 'T7',
   'time': '01:06:00'},
  {'utterance': '음ㅋㅋㅋㅋㅋㅋㅋㅋㅋ',
   'utteranceID': 'U18',
   'participantID': 'P02',
   'date': '2019-07-22',
   'turnID': 'T8',
   'time': '01:06:00'}]}

 

데이터를 확인해보면, 크게 'header'와 'body'로 이루어진 것을 살펴볼 수 있는데요, 각각 살펴보도록 하겠습니다.

 

 

#header

'header'
: {'dialogueInfo': {'numberOfParticipants': 2,
   'numberOfUtterances': 18,
   'numberOfTurns': 8,
   'type': '일상 대화',
   'topic': '개인 및 관계',
   'dialogueID': 'b7d3e9ea-8b8d-596a-8abe-7dedd3ea565c'},
  'participantsInfo': [{'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '남성',
    'participantID': 'P01'},
   {'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '여성',
    'participantID': 'P02'}]},

 

header 부분을 보면 대화 정보와 대화 참여자에 대한 정보를 알 수 있는데요, 대화 유형, 주제, 참여자의 나이, 거주지역, 연령대에 대한 정보를 얻을 수 있습니다.

 

그렇다면 해당 정보만 출력해볼까요?

 

print(datas[0]['header']['dialogueInfo']['type'])
print(datas[0]['header']['dialogueInfo']['topic'])

num_participants = datas[0]['header']['dialogueInfo']['numberOfParticipants']
print(str(num_participants) + '명')

for i in range(num_participants) :
    p = datas[0]['header']['participantsInfo'][i]
    print(p['participantID'], ':', p['age'], p['residentialProvince'], p['gender'])

 

일상 대화
개인 및 관계
2명
P01 : 20대 서울특별시 남성
P02 : 20대 서울특별시 여성

 

출력결과를 보면, 첫 번째 대화 데이터에서는 서울특별시에 사는 남자1명, 여자1명 총 2명의 일상 대화라는 것을 알 수 있습니다.

 

 

#body

 

반면, 'body'는 발화 내용이 담겨 있는 부분인데요, 대화 참여자와 대화 내용만 출력해보겠습니다.

 

for text in datas[0]['body'] :
    print(text['participantID'], ":", text['utterance'])

 

P01 : 내일 볼까 나도
P01 : 그친구랑
P02 : 여자야?
P01 : 아 여자안된댔지 ㅋㅋㅋㅋㅋㅋㅋ
P01 : 쏴뤼~
P02 : ㅋㅋㅋㅋㅋㅋㅋㅋ
P02 : #@이모티콘#
P02 : 안되는건 아닌데
P02 : 아니
P02 : 이 아저씨도
P02 : 여자많네
P02 : 뭐야
P02 : #@이모티콘#
P01 : 너가 남자 많은거처럼?ㅋㅋㅋ
P02 : ㅋㅋㅋㅋㅋㅋ....
P01 : 나도 많다는건 무슨뜻이지??
P01 : 너도 많다는거냐
P02 : 음ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

출력된 결과에서 왼쪽에 P01과 P02는 대화 참여자의 인식id, 그 옆엔 대화 내용입니다.

 

대화 내용을 살펴보면 전체 데이터의 한 일부분인 것을 확인할 수 있습니다.

그럼 또 다른 데이터를 3개만 더 살펴볼까요~?

 

일상 대화
개인 및 관계
2명
P01 : 20대 서울특별시 여성
P02 : 20대 경상남도 여성

P01 : 일찍 온 김에 빨래나해야겠당 P02 : 한시간반!!
P02 : 오늘 오후에는 진짜 시간만 봄 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
P02 : 잠의 필요성....
P01 : 근데 지금 또 막상 잘라고하니까 잠 안 온다
P01 : ㅋㅋㅋㅋ
P02 : 난 지금 머리까지 아픔 ㅜㅜ
P02 : 커피 너무 마셨나봐 ㅠㅋㅋㅋㅋㅋㅋ

 

일상 대화
미용과 건강
2명
P01 : 30대 서울특별시 여성
P02 : 30대 울산광역시 여성

P01 : 나 요새 일부러
P01 : 자기전에 얼굴에 스킨에센스수분크림등긍 떡칠하고 자거든
P01 : 오늘 아침에 화장하는데 확실히 다르긴 달랔ㅋㅋ
P02 : 오 잘받나봐
P02 : 나는 떡칠하고자면 여드름나던딬ㅋㅋㅋ
P01 : 점점...
P01 : 없는게 많아져서
P01 : 다 흡수하나봐 ㅜㅜㅜ
P02 : 엌ㅋㅋㅋㅋㅋㅋㅋ아냐 난 원래 좀 예전부터 그랫어
P02 : 막 피부좋게 할려고 애쓰면
P02 : 오히려망하는느낌

 

일상 대화
주거와 생활
2명
P01 : 30대 서울특별시 여성
P02 : 30대 서울특별시 여성

P01 : 수리 내역이 다 있을꺼 아니야
P01 : 소보원에 고소감이야 이건.
P02 : ㅇㅇ
P02 : 내말이
P02 : 이게뭐야 짱나
P02 : 위니아 거지같에
P01 : 그르게..매년 고장으로 고생시키네
P02 : 내말이 미쳐부러
P02 : 냉장고도 복불복인가...
P01 : ㅇㅇ 가전제품도 뽑기 잘해야한다고 했어
P01 : 보상 받았으면 좋겠다..
P02 : 내말이 아후....
P02 : 정신적 피해보상도 받아야해 나 진짜
P02 : 열받아..
P01 : 그러게 그럼 요새 음식을 다 어케해?
P01 : 아직도 냉장고 고장이면?
P02 : 아냐 소리만나고 작동은 되고있으
P02 : ㅡ.,ㅡ
P02 : 센서가 고장이라는데 갈아도 안되도
P02 : 뭘 갈아도 안되

 

데이터를 보면 다양한 주제로 일생생활 속에 있을법한 대화로 이루어진 것을 확인할 수 있고, 3개 데이터 뿐만 아니라 더 데이터를 살펴보면 2명으로 이루어진 대화가 대부분인 것을 알 수 있습니다. 또한 한사람만 대화를 이어가기 보다는 주고받는 대화로 이루어져 있다는 것을 확인할 수 있습니다!

 

 

(3) 데이터 활용

 그렇다면 이 '한국어 SNS 대화' 데이터를 이용하여 어떻게 활용할 수 있을까요?

먼저, 앞서 말했듯이 비대면 의사소통의 수요가 폭발적으로 증가함에 따라 의사소통 관련 서비스도 중요해지고 있다고 하는데요, 이 데이터를 이용하여 정보 검색, 대화 분석, 질의 응답, 명령어 이해, 언어모델 등의 학습 데이터로 사용될 수 있습니다. 특히 영어가 아닌 한국어로 이루어진 대화라는 점에서 큰 메리트가 있는데요, 한국어로 이루어진 데이터를 이용한다면 모델을 학습 후 한국에서의 상용화가 훨씬 더 쉬울 수 있습니다.

 

또한 해당 데이터로 정보 검색, 대화 분석, 요약, 질의 응답 등의 모델을 학습시키면 이를 이용하여 훨씬 더 사람처럼 자연스러운 AI상담, 챗봇 등의 기술이 구현될 수 있습니다. 또한 개인비서, 스마트홈 등 한국어 구어 자연어 처리 엔진 개발에 도움이 될 수 있지 않을까 싶습니다.

 

별개로, AIHUB에 오피스 분야의 대화 데이터를 이용하여 오피스 챗봇 모델을 만든 프로젝트가 현재 블로그에 소개되어 있는데요, 파이썬을 사용한 완전체 코드가 포함되어 있으니 관심이 있으신 분들은 살펴보시기 바랍니다!

( https://dinolabs.tistory.com/274?category=1203530 )

 

[에어] Transformer 모델로 오피스 챗봇 만들기 (파이썬/Colab)

에어 프로젝트 #3 Transformer 모델로 오피스 챗봇 만들기  요즘 여러 회사에서 인공지능 비서의 도입이 증가하고 있는데, 인공지능 비서는 주로 챗봇의 형태로 기본적인 대화부터 하루 일과, 해야

www.dinolabs.ai

 

 

 

 

 

# AIHUB

 

https://aihub.or.kr

 

 오늘 리뷰한 '한국어 SNS 대화' 데이터는 <AIHUB(AI 허브)>에서 다운로드 받은 '음성/자연어' 카테고리의 데이터로, AI 허브는 AI 기술 및 제품, 서비스 개발에 필요한 AI 인프라(AI데이터, AISWAPI, 컴퓨팅 자원)를 지원함으로써 누구나 활용하고 참여하는 AI통합 플랫폼입니다! 따라서 사용자를 위해 개발 및 활용을 위한 인프라 서비스와 AI 활성화를 위한 서비스를 제공하고 있는 것인데요, 현재 위와 같이 음성/자연어, 비전, 헬스케어, 자율주행 등 다양한 카테고리에 걸친 데이터들을 제공하고 있답니다.

 

 

한편, 오늘 살펴본 데이터는 '음성/자연어' 카테고리에 있는 데이터였는데요, 음성/자연어 카테고리는 음성 파일로 이루어진 데이터나 기계독해 등 텍스트와 관련된 데이터를 제공하는 카테고리입니다. 특히 다른 빅데이터 플랫폼에서는 찾아보기 힘든 데이터들이 제공되고 있고, 한국어, 한국인 음성, 한글로 이루어진 텍스트 등 서양보다는 우리나라에 맞춰져 있는 데이터들이 있기 때문에 상당히 활용하기에 적합한 데이터이기도 합니다. 

 

 

또한 각 데이터 다운로드 페이지에 들어가면 위와 같이 데이터의 구축내용과 필요성, 데이터 구조, 활용예시 등의 정보를 파악할 수 있기 때문에 데이터를 다운로드하기 전에 어떠한 형태로 이루어져 있는지 살펴볼 수 있답니다.

 

이렇게 오늘 데이터 리뷰기에서는 AIHUB의 '한국어 SNS 대화' 데이터를 리뷰해보았는데요, 다음 리뷰기에서도 동일한 '자연어/음성' 카테고리의 다른 데이터를 리뷰해보도록 하겠습니다. 이전 데이터 리뷰기에서는 소방, 사회 범죄, 해양수산, 헬스케어, 농수산물 등 여러 플랫폼에서 제공하는 데이터 리뷰기가 있으니, 관심이 있으신 분들은 참조하시기 바랍니다! 그럼 다음 리뷰기에서 만나요! :D