엔티티
엔티티(Entity)란 봇이 이해할 수 있는 용어를 체계적으로 정리한 데이터 사전입니다. 엔티티가 정의되어 있다면, 봇은 사용자 발화로부터 사용자의 의도에 맞는 동작 수행을 위한 주요 데이터를 추출할 수 있게 됩니다.
Definition.
사용자 발화란? 사용자가 봇과 커뮤니케이션하기 위해 내뱉는 말 또는 텍스트 등을 의미합니다. 챗봇의 경우에는 입력하는 텍스트 데이터이고, 스피커봇의 경우에는 실제 사용자의 음성일 수 있습니다. 사용자 발화는 블록 내 [사용자 발화 패턴 설정] 영역을 통해 입력됩니다.
엔티티의 구조
아래 그림처럼 엔티티 구조를 미리 설계한 후 발화등록 작업을 진행하시면 제작 과정이 훨씬 수월해집니다.
엔티티의 종류
챗봇 관리자센터에서 엔티티는 작업자가 직접 정의하는 '나의 엔티티'와 자주 사용하는 엔티티를 미리 정의해놓은 '시스템 엔티티'로 나누어집니다. 특히, '나의 엔티티'에서는 봇이 알아 들어야 하는 주요 용어들을 대표 엔트리로 설정할 수 있으며, 동의어를 추가할 수도 있습니다. 엔티티의 동의어가 중복 등록될 경우 봇에서 판단하기가 어렵기 때문에 원하는 응답이 되지 않을 수 있습니다. 따라서 동의어가 중복되지 않도록 계획적인 설계가 필요합니다.
Tip.
봇을 생성한 직후에는 '시스템 엔티티'만 설정되어 있기 때문에 알아들을 수 있는 용어가 제한적입니다.
봇의 특성에 맞도록 '나의 엔티티'를 잘 정의하여 많은 용어를 이해할 수 있도록 하는 것이 좋습니다.
‘시스템 엔티티’에 이미 등록되어 있고 ON처리 되어 있는 동의어를 ‘나의 엔티티’에서 추가로 등록할 경우 원하는 응답이 되지 않을 수 있습니다. 이 경우 ‘시스템 엔티티’를 사용하여 주시기 바랍니다.
나의 엔티티
'나의 엔티티'는 작업자가 직접 설정한 엔티티입니다.
엔티티는 대표 엔트리를 입력한 후 '동의어'를 입력하는 방식으로 데이터를 완성합니다. 동의어는 필수가 아니지만, 추가로 등록할 경우 사용자 입력발화에서 봇이 인식하는 엔티티의 범위를 넓힐 수 있습니다. 동의어로 엔티티가 인식될 경우 해당 대표 엔트리가 최종값으로 인식되어, 발화 입력 화면에서 출력됩니다.
엔티티명은 공백 없이 입력 가능하며 자음만 입력하는 것은 불가합니다. 대표 엔트리와 동의어는 문자간 최대 1자의 공백 입력이 가능하며 자음만으로 구성할 수 있습니다.
또한, 정해진 구조의 CSV, xlsx 파일형식으로 대량의 엔트리를 손쉽게 등록할 수도 있습니다. 구성에 변경이 없다면 반복적으로 덮어쓰기가 가능하기 때문에 효율적으로 관리할 수 있습니다. 단, 엔트리는 최대 6,000개까지 입력 가능합니다.
Information.
엔트리 업로드 파일(샘플) 다운받기(CSV, xlsx)
※ CSV파일은 utf-8로 인코딩 모드를 맞춰주어야 합니다.
시스템 엔티티
챗봇 관리자센터에서는 날짜, 시간, 지명과 같이 일반적, 공통적으로 통용되는 개념들에 대해서는 작업자가 일일이 입력할 필요가 없도록 미리 정의해 둔 엔티티들을 제공하고 있습니다. 이를 ‘시스템 엔티티’라 부릅니다.
아래는 시스템 엔티티 예시입니다.
엔티티명 | 설명 | 예시 | 발화 예시 |
---|---|---|---|
@sys.date | '날짜'에 해당하는 엔티티를 태깅합니다. | 오늘, 내일, 어제, 2018년 1월15일, 1월 1일, 수요일 | 오늘 뉴스 들려줘 1월 1일은 무슨 요일이야 |
@sys.date.period | 날짜 중에서 '기간 범위'에 해당하는 엔티티를 태깅합니다. | 이번주, 올해, 주말, 2019년, 1월, 1일부터 10일까지 | 이번주 사수자리 운세 알려줘 올해 무슨 해야 |
@sys.date.lunar | 날짜 중에서 '음력'에 해당하는 엔티티를 태깅합니다. | 음력 1월1일, 음력 2019년 5월 5일, 올해 음력 5월 16일, 음력 설날 | 음력 1월 1일이 언제야 음력 2019년 5월 5일 양력으로 며칠이야 |
@sys.date.period.lunar | 날짜 중에서 '음력 기간'에 해당하는 엔티티를 태깅합니다. | 음력 1월, 음력 6월, 음력 8월 | 정월은 음력 1월을 말합니다 음력 8월은 음력에서 여덟 번째 달이다 |
@sys.time | '시간'에 해당하는 엔티티를 태깅합니다. ※시간흐름에 따른 date 정보 속성값도 포함됨 | 30분, 7시, 10분 뒤, 오전 6시, 30초, 정오 | 7시 알람 맞춰줘 알람 정오 지워줘 |
@sys.time.period | 시간 중에서 '시간대'에 해당하는 엔티티를 태깅합니다. ※시간흐름에 따른 date 정보 속성값도 포함됨 | 오전, 아침, 새벽, 저녁, 1시부터 2시까지 | 오전 알람 삭제해줘 아침 뉴스 틀어줘 |
@sys.date.time | 날짜 중에서 '날짜와 시간' 조합에 해당하는 엔티티를 태깅합니다. | 내일 7시, 현재, 모레 오후 11시, 내일 오전 7시, 오늘 1시, 1월1일 오후 2시 | 내일 7시 알람 맞춰줘 현재 상영작 알려줘 |
@sys.date.time.period | 날짜 중에서 '기간 범위와 시간' 조합에 해당하는 엔티티를 태깅합니다. | 오전, 아침, 새벽, 저녁, 1시부터 2시까지 | 오전 알람 삭제해줘 아침 뉴스 틀어줘 |
@sys.number | '숫자'에 해당하는 엔티티를 태깅합니다. | 1, 삼, 다섯, 열명, 30개 | 삼 더하기 삼 볼륨 다섯 키 낮춰 줘 |
@sys.number.times | 숫자 중에서 '회차'에 해당하는 엔티티를 태깅합니다. | 11회차, 40회, 1화, 2부, 1편, 3차, 834회 | 미우새 1부 틀어줘 로또 당첨 번호 제 834회 알려줘 |
@sys.number.percent | 숫자 중에서 '퍼센트'에 해당하는 엔티티를 태깅합니다. | 20퍼센트, 30프로, 백퍼센트, 50% | 블라인드 20퍼센트 정도 열어줘 블라인드 30프로만 내려줘 |
@sys.number.ordinal | 숫자 중에서 '순서'에 해당하는 엔티티를 태깅합니다. | 1번, 첫 번째, 열 번째, 백 번째 | 플레이리스트 1번 틀어줘 네 번째 playlist 재생 |
@sys.number.age | 숫자 중에서 '나이'에 해당하는 엔티티를 태깅합니다. | 1살, 18세, 스무살, 20세 | 내 아이는 1살입니다 스무살에 대학에 입학했어요 |
@sys.number.birthyear | 숫자 중에서 '출생년도'에 해당하는 엔티티를 태깅합니다. | 1995년생, 85년생, 72년도생 | 1996년생 운세 알려줘 87년생 운세 알려줘 |
@sys.number.decade | 숫자 중에서 '년대(~년대)'에 해당하는 엔티티를 태깅합니다. | 1900년대, 2000년대, 80년대, 90년대 | 90년대 인기 팝 들려줘 1990년대 발라드 틀어줘 |
@sys.number.album | 숫자 중에서 '앨범(~집)'에 해당하는 엔티티를 태깅합니다. | 1집, 2집, 3집, 10집 | winner 2집 재생해줘 자우림 10집 틀어줘 |
@sys.number.rank | 단위 중에서 '순위'에 해당하는 엔티티를 태깅합니다. | 1위, 100위, 1등 | 실시간 이슈 10위 알려줘 멜론 차트 10위부터 틀어줘 |
@sys.unit.duration | 단위 중에서 '기간/시간'을 의미하는 엔티티를 태깅합니다. | 1시간, 1시간 반, 1개월, 4주, 일주일, 이주일, 5년 2개월, 5개월, 5개월 20일, 이틀, 30분 동안, 3일동안, 4분 30초동안 | 1시간 타이머 시작 빗소리 10분 동안 틀어줘 |
@sys.unit.length | 단위 중에서 '길이'에 해당하는 엔티티를 태깅합니다. | 5mm, 1cm, 10cm, 1m, 1km, 100km, 1야드, 100피트, 20인치, 1마일 | 1m 간격으로 앉아주세요 서울부터 부산까지 거리는 325km입니다 |
@sys.unit.area | 단위 중에서 '넓이'에 해당하는 엔티티를 태깅합니다 | 1제곱미터, 25m², 100km², 1헥타아르, 200헥타아르, 1yd², 200ft², 25평, 30에이커 | 서울의 면적은 605.2km²입니다 152 제곱미터는 몇 제곱킬로미터입니까 |
@sys.unit.weight | 단위 중에서 '무게'에 해당하는 엔티티를 태깅합니다. | 1g, 1kg, 10kg, 100mg, 100g, 1톤, 100파운드, 10온스, 7그레인, 1돈, 1근, 10냥, 10관 | 1kg 상자에 넣어주세요 금 1돈은 정확히 3.75 그램입니다. |
@sys.unit.volume | 단위 중에서 '부피'에 해당하는 엔티티를 태깅합니다. | 1세제곱미터, 1cc, 10ml, 500ml, 10데시리터, 1리터, 100cc, 1갤론, 100cm³, 10m³, 10in³, 10ft³, 1yd³, 1홉, 1되, 1말 | 물 1세제곱미터는 약 1 톤 물의 중량이다 1cc는 0.001 리터를 의미한다 |
@sys.unit.pressure | 단위 중에서 '압력'에 해당하는 엔티티를 태깅합니다. | 1기압, 20프사이, 20파스칼, 20헥토파스칼, 20킬로파스칼, 20메가파스칼, 100밀리바, 100바, 1수은주밀리미터, 1mmH₂O, 10inHg, 10inchH₂O | 1기압은 몇 파스칼입니까? 1bar는 100kPa 입니다. |
@sys.unit.temperature | 단위 중에서 '온도'에 해당하는 엔티티를 태깅합니다. | 17°c, 20도, 33.8°f | 거실 난방 20도로 맞춰줘 거실 난방 온도 22도로 맞춰줘 |
@sys.unit.speed | 단위 중에서 '속도'에 해당하는 엔티티를 태깅합니다. | 100m/s, 1마하, 10km/h, 1knot | 100m/s는 0.1km/s 입니다 10000km/h는 8.17마하입니다.. |
@sys.unit.data | 단위 중에서 '정보(데이터량)'에 해당하는 엔티티를 태깅합니다. | 1바이트, 100기가바이트, 100GB, 1TB | 1바이트는 8비트 입니다 1TB는 1024GB입니다. |
@sys.unit.energy | 단위 중에서 '에너지 단위'에 해당하는 엔티티를 태깅합니다. | 1헤르츠, 1킬로헤르츠, 1메가헤르츠, 1기가헤르츠, 100데시벨, 10ampre, 10암페어, 10마력 | 1Mhz는 1000kHz 입니다 |
@sys.unit.currency | 단위 중에서 '통화'에 해당하는 엔티티를 태깅합니다. | 천원, 5천원, 1달러, 100엔, 100위안, 1유로, 오백 파운드, 1파운드, 10프랑, 10센트 | 1달러 환율이 어떻게 돼? 1파운드가 한화로 얼마야 |
@sys.text | 되묻기 상황에서 '유저가 입력한 문장 전체'를 태깅합니다. | ||
@sys.location | 지역 중에서 '국내 지역'에 해당하는 엔티티를 태깅합니다. | 제주도, 강원도, 서울, 송파구, 잠실동 | 제주도 날씨 알려줘 내일 강원도 날씨 |
@sys.nation | '국가명'에 해당하는 엔티티를 태깅합니다. | 대한민국, 프랑스, 일본, 영국, 미국 | 1월 7일 대한민국 날씨 알려줘 지금 프랑스 파리 몇시야? |
@sys.state | 지역 중에서 '해외 주 단위'에 해당하는 엔티티를 태깅합니다. | 캘리포니아, 버몬트, 뉴저지, 콜로라도 | 지금 캘리포니아 몇 시야 미국 뉴저지 시간은 어떻게 돼요 |
@sys.city | 지역 중에서 '해외도시명'에 해당하는 엔티티를 태깅합니다. | 뉴욕, 도쿄, 워싱턴 D.C., 베이징, 런던 | 오늘 뉴욕 날씨 좋아? 워싱턴 D.C.와 베이징의 시차 알려줘 |
@sys.fortune.starsign | '별자리 이름'에 해당하는 엔티티를 태깅합니다. | 물병자리, 물고기자리, 게자리 | 이번주 물병자리 운세 알려줘 1월 이달의 사자자리 운세 어때 |
@sys.fortune.zodiac | '띠 이름'에 해당하는 엔티티를 태깅합니다. | 돼지띠, 쥐띠, 소띠 | 이번주 돼지띠 운세 알려줘 토끼띠는 몇 년생이야 |
@sys.person.name | '인물 : 개인'에 해당하는 엔티티를 태깅합니다. | 아이유, 박지성, 김광석 | 아이유 인기곡 들려줘 박지성에 대해서 알려줘 |
@sys.person.group | '인물 : 그룹명'에 해당하는 엔티티를 태깅합니다. | 엑소, exo, 퀸, queen, 블랙핑크, blackpink, 방탄소년단, bts | 방탄소년단 최신 앨범 틀어줘 퀸 1991년 앨범 틀어줘 |
@sys.currencyname | '통화명'에 해당하는 엔티티를 태깅합니다. | 달러, 엔, 유로, 오스트레일리아달러, 베트남동, 파운드 | 미국의 통화는 달러입니다 영국의 화폐단위는 파운드입니다. |
@sys.currency.code | '통화 코드'에 해당하는 엔티티를 태깅합니다. | USD, JPY, EUR, AUD, VND, GBP, ZWD | 일본 화폐인 '엔'의 통화코드는 JPY입니다. |
@sys.sports.name | 스포츠 정보 중에서 '종목명'에 해당하는 엔티티를 태깅합니다. | 야구, 축구, 태니스, 태권도 | 오늘 축구 경기 있어? 내일 야구 일정 알려줘 |
@sys.sports.league | 스포츠 정보 중에서 '리그명'에 해당하는 엔티티를 태깅합니다. | 프리미어리그, NBA, KBO리그, mlb | 작년 프리미어리그 순위 알려줘 이번달 KBO리그 경기 있어? |
@sys.sports.team | 스포츠 정보 중에서 '팀명'에 해당하는 엔티티를 태깅합니다. | 리버플, 토트넘, 맨체스터 유나이티드, KIA 타이거즈 | 2018년 1월15일 리버풀 경기 알려줘 토트넘 경기에 손흥민 나왔어? |
@sys.sports.stadium | 스포츠 정보 중에서 '경기장'에 해당하는 엔티티를 태깅합니다. | 잠실 종합 운동장 야구장, 수원 월드컵 경기장, 대구 스타디움, 문학 경기장 | 상암월드컵 경기장 축구 경기 있어? 대구 스타디움 경기장 오늘 일정 없어? |
@sys.tv.name | TV 정보 중에서 '프로그램명'에 해당하는 엔티티를 태깅합니다. | 무한도전, 라디오 스타, 런닝맨 | 오늘 라디오 스타에 누구 나와? 런닝맨 멤버 알려줘 |
@sys.tv.channelname | TV 정보 중에서 '채널명'에 해당하는 엔티티를 태깅합니다. | tvn, mbc, kbs 1tv, ocn, jtbc | 지금 tvn에서 뭐 해? mbc 편성표 알려줘 |
@sys.radio.name | 라디오 정보 중에서 '프로그램명'에 해당하는 엔티티를 태깅합니다. | 음악캠프, 정오의 희망곡, 별이 빛나는 밤에, 정지영 라디오 | 배철수의 음악캠프에 나온 노래 들려줘 정지영 라디오 선곡표 들려줘 |
@sys.radio.channelname | 라디오 정보 중에서 '채널명'에 해당하는 엔티티를 태깅합니다. | MBC FM 4u, SBS 러브FM, kbs1 라디오 | mbc fm 4u 틀어줘 sbs 파워 fm 틀어줘 |
@sys.movie.name | 콘텐츠 정보 중에서 '영화명'에 해당하는 엔티티를 태깅합니다. | 신과 함께, 킹스맨, 어벤져스 인피니티 워 | 신과 함께 관객수 알려줘 영화 킹스맨 장르 알려줘 |
@sys.organization.name | 콘텐츠 정보 중에서 '제작사'에 해당하는 엔티티를 태깅합니다. | 디즈니, 월트디즈니픽쳐스, 마블 스튜디오, 롯데엔터테인먼트 | 디즈니에서 제작한 영화 알려줘 마블 스튜디오에서 만든 영화 뭐 있어? |
@sys.theater.name | 콘텐츠 정보 중에서 '극장명'에 해당하는 엔티티를 태깅합니다. | CGV천호점, 메가박스, 롯데시네마 | cgv천호점 상영영화 알려줘 메가박스 개봉작 알려줘 |
@sys.broadcast.name | 콘텐츠 정보 중에서 '방송사'에 해당하는 엔티티를 태깅합니다. | KBS, MBC, SBS, 극동방송, 불교방송 | 극동방송 틀어줘 불교방송 틀어 주세요 |
@sys.url | 문장에서 'URL'에 해당하는 패턴을 태깅합니다. | https://www.kakaocorp.com, http://www.kakaocorp.com, www.kakaocorp.com | 카카오의 공식사이트는 https://www.kakaocorp.com 입니다. |
@sys.bussiness.number | 문장에서 '사업자등록번호'에 해당하는 패턴을 태깅합니다. | 120-81-47521 | 카카오의 사업자등록번호는 120-81-47521 입니다. |
@sys.phone.number | 문장에서 '전화번호'에 해당하는 패턴을 태깅합니다. | 010-1234-5678, 02-2456-7890 | 전화번호는 010-1234-5678 입니다. |
@sys.licenseplate.number | 문장에서 '차량번호'에 해당하는 패턴을 태깅합니다. | 12 가 1234, 123 가 1234 | 차량번호는 12 가 1234 입니다. 123 가 1234 번호가 제 차량입니다. |
상세한 설정 방법은 엔티티 설정하기를 참조하시길 바랍니다.
엔티티 설정하기
엔티티 등록하기
아래와 같이 두 가지 방법으로 챗봇 관리자센터에 엔티티를 등록할 수 있습니다.
엔티티에서 등록하기
엔티티 버튼을 눌러 엔티티를 미리 정의할 수 있습니다.
미리 정의해 둔 엔티티가 있다면, 발화를 입력할 때마다 손쉽게 해당 엔티티를 사용자 발화 패턴에서 태깅이 가능하도록 밑줄 하이라이트가 표시 됩니다.
엔티티 태깅 중 새 엔티티 추가하기 버튼을 통해 등록하기
봇 작업자는 발화 입력 후 중요하게 생각하는 단어를 즉시 엔티티로 만들 수 있습니다. 입력된 발화 중 특정 단어를 드래그하면 태깅이 가능한 엔티티 메뉴를 볼 수 있습니다. 필요에 따라 팝업창 하단의 새 엔티티로 추가하기 버튼을 통해 추가 엔티티 설정이 가능합니다.
나의 엔티티 작성 예시
엔티티 작성의 좋은 예
엔티티를 잘 작성한다는 것은 사용자의 발화문에서 의미있는 단어를 추출해내는 기초 작업을 튼튼히 하는 것을 뜻합니다. 그래야 발화 패턴을 인식하는 자연어처리 로직을 십분 활용할 수 있고, 다양한 발화 형태 속에 존재하는 중요한 단어를 보다 정확히 발췌할 수 있습니다. 올바르게 작성된 엔티티 예시는 아래와 같습니다.
Tip.
의미있는 데이터 중심으로 엔티티를 구분 합니다. 예) cafe_name(카페명), coffee_name(커피메뉴), user_action_order(사용자행동패턴), service_type(주문서비스방식))
엔티티 간 단어들이 중복되지 않고, 의미가 겹치지 않도록 합니다.
엔티티 목록만 보아도 누구나 의미를 쉽게 유추할 수 있도록, 엔티티명을 명확하게 정의합니다.
엔티티 작성의 나쁜 예
봇 디자이너가 사용자 발화의 모든 형태를 정확한 매칭(exact matching)으로 잡아내겠다는 의지로 모든 발생 가능할 단어를 엔티티로 등록해버리면 발화 패턴이 매우 복잡해집니다. 뿐만 아니라 향후 엔티티 유지보수 또한 어려워지게 됩니다. 결국엔 하나의 등록으로 충분한 발화패턴을, 굳이 수십여개로 만들어내야하는 엔티티 작성 부담을 불필요하게 발생시킬수 있습니다. 엔티티 작성의 핵심 포인트는, 사용자 발화입력 패턴을 잡아내는데 있어서 가장 필수적인 단어(또한, 여러 형태로 변경 가능한 단어)를 엔티티로 일괄 등록하는 것 입니다.
부적절한 엔티티 작성 예시는 아래와 같습니다.
Tip.
'좀, 그렇게, 어떻게' 등 발화문장에서 큰 의미가 없는 모든 발생가능한 단어들을 엔티티로 등록하는 것은 피하도록 합니다. 엔티티 태깅을 통해 중요 정보를 추출해내는 관점에서 크게 중요하지 않기 때문입니다.
유의미한 데이터로 구성한 카테고리가 아닌, 사용자 발화 중 중요하지 않은 단어들을 모두 번거롭게 등록할 필요는 없습니다. 향후 의미없는 작업노고를 발생시키는 원인이 됩니다. 예) '네', '갑니다', '주세요', '안되겠네' 등과 같은 서술어미 종류
Last updated