본문 바로가기

BLOG/데이터 리뷰기

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

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

 

 

 

 

 코로나19의 장기화로 언택트 시대가 됨으로써, 인터넷 또는 sns 메신저를 통해 비대면  의사소통의 수요가 매우 증가했는데요, 이로 인해 온라인 상에 축적되는 의사소통 관련 텍스트 데이터가 엄청난 솓도와 규모로 축적되고 있다고 합니다. 하지만 이렇게 많은 텍스트 데이터를 본문 그대로 사용하여 활용하자면 그 양이 많기 때문에 대화 데이터의 활용성을 높이기 위해서는 대화 요약 기술의 도입이 요구된다고 합니다.

 

이와 관련해서 AIHUB에서는 뉴스, 기사 등의 문어체에 비해 생략이나 변형이 많고, 대화의 문맥을 고려해야 할 특수성이 있는 대화 요약 기술 개발을 위한 학습 데이터 구축을 목적으로 한 '한국어 대화 요약' 데이터를 제공하고 있습니다. 그렇다면 이번 데이터 리뷰기에서는 이 데이터가 어떻게 이루어져 있는지 살펴보고, 어떻게 분석 및 활용하면 좋을지 생각해보도록 하겠습니다!

 

 

 

 

 

 

한국어 대화 요약 데이터

 

(1) 데이터 정보

  • 제공기관 : 바이브컴퍼니
  • 데이터 개수 : 35만 개
  • 데이터 형식 : json
  • 데이터 구성 : 대화ID, 대화 참여자 수, 발화 수, 대화 유형, 대화 주제, 참여자 성별, 연령대, 거주지역, 대화 본문, 날짜, 시간, 요약문 등
  • 다운로드 : https://aihub.or.kr/aidata/30714

 

'한국어 대화 요약 데이터'는 말 그대로 메신저에서 이루어진 대화 원문을 수집하여 해당 원문과 요약된 문장을 텍스트로 제공한 데이터인데요, 35만 개의 데이터를 제공하고 있으며 대화 참여자에 대한 정보도 자세하게 구축되어 있답니다.

 

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

 

 

(2) 데이터 리뷰

 한국어 대화 요약 데이터는 json 파일 형식으로 이루어져 있는데, 이를 열기 위해서 다양한 방법이 있지만 python과 jupyter notebook을 이용하여 json 파일을 열어보도록 하겠습니다. 아래와 같이 코드를 작성해주세요~

 

import json
#          아래에 파일이름 적기
with open('filename.json', 'r', encoding='UTF8') as f :
    json_data = json.load(f)
    
datas = json_data['data']
print(datas[0])

 

위에 코드는 json 파일을 열고 전체 데이터를 불러온 뒤, 첫 번째 데이터를 출력하는 코드인데요, 입력한 뒤 실행을 해주면 아래와 같이 첫 번째 데이터가 출력됩니다.

 

{'header': {'dialogueInfo': {'numberOfParticipants': 3,
   'numberOfUtterances': 13,
   'numberOfTurns': 7,
   'type': '일상 대화',
   'topic': '개인 및 관계',
   'dialogueID': '80055531-e45e-5b9a-849d-acfa9b3bd672'},
  'participantsInfo': [{'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '여성',
    'participantID': 'P01'},
   {'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '여성',
    'participantID': 'P02'},
   {'age': '20대',
    'residentialProvince': '서울특별시',
    'gender': '여성',
    'participantID': 'P03'}]},
 'body': {'dialogue': [{'utterance': '나 개웃겨',
    'utteranceID': 'U1',
    'participantID': 'P01',
    'date': '2020-07-04',
    'turnID': 'T1',
    'time': '02:13:00'},
   {'utterance': '담주에 친구만나서',
    'utteranceID': 'U2',
    'participantID': 'P01',
    'date': '2020-07-04',
    'turnID': 'T1',
    'time': '02:13:00'},
.
.
.
   {'utterance': '저한테 알려주세요...',
    'utteranceID': 'U13',
    'participantID': 'P02',
    'date': '2020-07-04',
    'turnID': 'T7',
    'time': '02:14:00'}],
  'summary': '다음 주에 친구 만나서 기초 주식 알려주기로 했다며 적당히 오르기만 할 거 추천만 해 줄 거라고 하고 있다.'}}

 

출력된 데이터를 보면, 크게 'header', 'body', 'summary'로 나누어져 있는 것을 확인할 수 있는데요, 하나씩 살펴보도록 하겠습니다.

 

 

#header

 

 먼저, 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'])

 

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

 

코드를 실행하면 위와 같이 출력되는데요, 첫 번째 데이터는 일상 대화 유형, 주제는 개인 및 관계, 참여자 수는 3명이며, 3명의 대화 참가자 모두 20대의 서울특별시에 거주하는 여성이라는 것을 알 수 있습니다.

 

 

#body

 

 다음으로 'body'는 대화 내용이 들어가 있는 부분인데요, 대화 본문과 참여자 ID 정보를 알 수 있습니다. 그렇다면 대화 참여자와 대화 정보만을 출력해보도록 하겠습니다.

 

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

 

P01 : 나 개웃겨
P01 : 담주에 친구만나서
P01 : 주식 알려주기로햇어
P02 : ㅇㄴㅋㄱㅋㅋㅋㅋㅋㅋㅋ
P02 : 전문가네
P01 : 걍 기초만 알려주는거지 머ㅋㅋㅋㅋㅋㅋㅋㅋ
P02 : 좋은것같은데 같이 공부하거 알려주고 하면?
P01 : 처음하면 먼가
P01 : 천원만 올라도 기쁘니까
P01 : 천원만 잃어도 슬프고
P01 : 적당히 오르기만 할거 추천만해주게..
P03 : 올ㅋㅋㅋ
P02 : 저한테 알려주세요...

 

출력된 결과를 보면 왼쪽에는 발화자 ID, 오른쪽은 대화 원문입니다.

해당 데이터를 읽어보면 일상 대화 중 주식에 관한 대화인 것을 알 수 있습니다!

 

 

#summary

 

 마지막으로 'summary'는 'body'에 속하는 데이터이기도 한데요, summary에는 말 그대로 위 대화를 요약한 요약문이 들어있답니다. 그러면 요약문을 출력해보겠습니다.

 

print(datas[0]['body']['summary'])

 

'다음 주에 친구 만나서 기초 주식 알려주기로 했다며 적당히 오르기만 할 거 추천만 해 줄 거라고 하고 있다.'

 

출력한 요약문인데요, 원문에 있는 단어들을 적절히 이용하여, 첫 문장부터 마지막 문장의 흐름대로 내용이 요약된 것을 확인할 수 있습니다. 또한 핵심이 되는 내용들은 포함하고 요약문에 들어가지 않아도 될 내용들은 버리면서 요약문이 딱 핵심만 알 수 있도록 간결하게 요약되었다는 것을 느낄 수 있습니다.

 

 

 이렇게 'header', 'body', 'summary'에 대해 살펴보았는데요, 3개의 데이터만 뽑아 더 살펴볼까요~?

 

P01 : 세상 사는 게 다 그런 것 같아
P02 : 세상 사는 게 다 그렇다는건?
P01 : 모두 비슷비슷한 것 같아
P02 : 그래도 부자들은 뭔가 다르지 않을까?
P01 : 그럴 수도 있고
P01 : 부자라고 해도 귀찮은 건 귀찮고
P01 : 해결 안되는 건 안되는 거지 뭐
P01 : 물질과 관계없이 인간들 고민은 다 똑같은 것 같아.

>> 세상 사는 게 물질과 관계없이 다 비슷한 것 같다.

 

P01 : 이일 하면서
P01 : 연애는 사치네 ㅜㅜ
P01 : 이제 왕이 맘좀 알겟다
P02 : 왴ㅋㅋㅋ무슨말 ㅋㅋㅋ
P02 : 연애하지말라는 말?ㅋㅋㅋㅋㅋ
P01 : 웅ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
P02 : ㅋㅋㅋㅋㅋㅋ그치
P02 : 바쁘고 정신없는 와중에
P02 : 애인이 징징 대봐
P01 : 진짜 신경쓸게 넘많아ㅜㅜ
P01 : 열받을듯
P02 : 그렇다고 하더라궄ㅋㅋㅋㅋㅋㅋㅋ
P02 : 그래도 섭섭한걸?1

>> 일이 바쁘고 정신 없는데 애인이 징징 거리면 신경쓸 게 너무 많아서 연애는 사치라고 했던 마음을 이제 알 것 같다.

 

P01 : 오늘부터.다이어트 해야지
P02 : 웅웅
P02 : 전심 안먹엇어
P02 : 배고 안고파
P01 : 너.이제부터.토요일만.먹고 일요일은.먹지마
P02 : ㅋㅋㅋ이제
P02 : 부타
P02 : 안먹을까야
P02 : 다시 휴가까지
P02 : 다엿
P02 : 고고띠

>> 오늘부터 휴가까지 다시 다이어트를 해야겠다고 한다.

 

대화 내용과 요약문을 읽어보면 상당히 요약문이 잘 구축되어 있다고 볼 수 있네요~

 

한편, 코드를 이용하면 모든 데이터를 확인할 수 있으니, 관심이 있으신 분들은 코드를 이용하시기 바랍니다!

 

 

(3) 데이터 활용

 그렇다면 이 '한국어 대화 요약' 데이터를 어떻게 활용하면 좋을까요~? 

우선 이 데이터는 영어가 아닌 한국어(한글)로 이루어진 데이터라는 점에서 크게 의미가 있는데요, 지금껏 이러한 데이터가 한글로 잘 구축되지 않았어서 그 데이터 수가 적거나, 영어 데이터를 이용하여 분석되곤 했습니다. 따라서 한글로 이루어진 발화 데이터셋이라는 점에서 큰 의미가 있고, 이를 이용하여 개발한 서비스를 한국에서 상용화시킬 수 있을 것으로 예상된답니다.

 

한편, 대화를 요약한 데이터다 보니, 이 데이터셋으로 학습시킨 인공지능을 이용하여 대화나 토론의 주제를 파악하는 곳에 사용될 수 있을 거라 예상되는데요, 뉴스 기사 요약, 음성 대화 요약, 상담 내용 파악 등에 사용될 수 있지 않을까 싶습니다! 사람의 직접 요약하거나 주관적인 견해가 포함된 요약보다는 핵심내용을 잘 파악하여 요약하는 것이 훨씬 더 빠르게 핵심적으로 요약할 수 있다고 생각합니다. 뿐만 아니라 대화의 핵심 내용을 정확하고 신속하게 파악해야 하는 분야에서도 충분히 활용할 수 있을 것으로 예상한답니다 :D

 

한편, 요약과 관련된 프로젝트가 현재 블로그에 있는데요, 뉴스 기사 본문을 요약한 것으로, 완전체 코드가 포함되어 있으니 관심이 있으신 분들은 살펴보시기 바랍니다!

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

 

[에어] TextRank 로 크롤링한 뉴스 기사 요약 모델 만들기 (파이썬/Colab)

에어 프로젝트 #4 TextRank로 크롤링한 뉴스 기사 요약 모델 만들기 현재 온라인의 주요 플랫폼에서는 여러 분야의 다양한 정보들을 뉴스기사, 포스팅, 영상 등 다양한 형태로 제공하고 있다. 예를

www.dinolabs.ai

 

 

 

 

 

 

 

# AIHUB

 

https://aihub.or.kr

 

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

 

 

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

 

 

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

 

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