[Session 02] 동물 찾기 다섯 고개
동물 찾기 다섯 고개
학습 목표
질문에 대한 답변을 분석하여 사용자가 생각하는 동물을 찾도록 하는 인공지능 모델을 제작할 수 있다.
문제해결 상황
엔트리봇은 얼마 전 자신이 생각한 인물을 맞히는 인공지능 누리집을 알게 되었습니다. 엔트리봇은 인공지능이 어떻게 내가 생각한 인물을 맞혔을까? 너무 궁금했습니다. 어떻게 하면 내가 생각한 것을 맞히는 인공지능을 만들 수 있을까요?
문제해결 방법
먼저 동물찾기 다섯 고개에 사용할 동물들을 선정한다. 각 동물의 이름을 클래스로 설정한 후 동물의 특징을 입력한다. 각 동물의 특징을 묻는 질문을 화면에 제시하고 사용자가 생각한 동물에 맞는 답변을 한다. 예를 들어 "어디에 사세요?" 라는 질문에 "바다", "바다입니다", "바다지", "바다에 살아요", "바다 속" 등의 입력이 들어와도 "바다"로 분류되어 상어, 문어 등의 바다 동물의 텍스트 분류 인식률이 높아지게 된다. 텍스트 분류 인식률이 일정 이상을 보이는 동물에게는 1점을 부여하고, 다섯 가지 질문을 마치면 점수가 가장 높은 동물을 정답으로 제시한다. 오류가 발생하는 경우를 고려하여 적절한 답변을 제공한다.
학습준비물
인터넷에 연결할 수 있는 PC 또는 노트북
데이터 수집 아이디어
엔트리봇은 얼마 전 자신이 생각한 인물을 맞히는 인공지능 누리집을 알게 되었습니다 .엔트리봇은 인공지능이 어떻게 내가 생각한 인물을 맞혔을까? 너무 궁금했습니다. 어떻게 하면 내가 생각한 것을 맞히는 인공지능을 만들 수 있을까요?
2-1 인공지능 모델 학습하기
인터넷 스무고개의 원리를 생각해보며 각 질문의 답변에 따라 동물의 점수를 매겨 생각한 동물을 찾아주는 프로그램을 제작하고자 한다.
본 프로그램에서는 6가지 동물로 동물의 가지 수를 제한하였으며 다음과 같이 인공지능을 설정한다.
텍스트 모델 이름은 ‘동물 찾기 다섯 고개’로 입력한 후 다음과 같이 클래스명을 정하여 샘플 데이터를 입력한다.
1) [모델 학습하기]가 완료되면 텍스트에 ‘바다, 하늘, 육지’를 각각 입력한다.
2) 특성에 따라 대체적으로 20% 이상의 값이 나오는 것을 확인할 수 있다. 추후 프로그래밍할 때 20% 이상의 값에 점수를 부여한다. 다리의 개수를 묻는 질문에는 학습 결과가 좋지 못한 것을 알 수 있다. 이는 숫자를 인식하지 못하기 때문이라 생각되며, 숫자를 글자로 둘, 넷, 여덟으로 대신하면 결과 값이 높아지는 것을 알 수 있다.
2-2 장면 구성하기
제시된 동물 중 하나를 선택하는 장면에서부터 각 질문에 대한 화면을 하나씩 만들어야 하므로 다양한 장면이 사용된다. 하지만 질문1부터 질문5까지의 화면은 같은 화면에 타이틀만 바뀌므로 쉽게 구성할 수 있다.
글상자를 추가하기 위해서는 [오브젝트 추가] - [글상자] 탭으로 이동하여 글꼴과 글자모양을 선택하고, 글상자의 내용을 입력하여 사용한다.
각 장면의 구성을 보면 다음과 같다.
질문2 ~ 질문5는 질문1을 복사하여 [글상자]의 내용만 수정하여 사용한다. 각 질문에 사용하는 블록 역시 질문의 내용만 변경되므로 먼저 질문1의 프로그래밍을 완료한 후에 장면을 복제하여 사용하면 효율적이다.
각 질문 장면의 [글상자] 내용은 다음과 같다.
2-3 엔트리 프로그래밍
|
1) 각 동물의 점수를 부여하기 위하여 [속성] 탭의 [변수] - [변수 추가하기] 버튼을 클릭한다. |
|
2) 변수 이름을 각각 상어, 기린, 박쥐, 호랑이, 문어, 독수리로 입력하여 동물 변수를 만들어준다. |
|
3) [시작] 장면에서 [어린이] 오브젝트를 선택한 후 다음과 같이 [‘대답’]숨기기 블록을 이용하여 대답을 숨기고, 각각의 동물 변수의 초기값이 0이 되도록 프로그래밍 한다. |
4) [동물 찾기 다섯 고개]의 설명을 위해 다음과 같은 블록을 추가하여 화면의 동물 중 하나를 마음 속으로 생각하도록 한다.
|
5) 설명이 끝나면 보다 정확한 결과가 나올 수 있게 질문에 대한 답변의 설명이 나오는 [설명서] 장면으로 이동하도록 [‘설명서’ 시작하기] 블록을 추가 한다. |
6) [설명서] 장면으로 이동하여 [어린이] 오브젝트를 선택한 후 [장면이 시작되었을 때]의 블록을 추가하고 그 아래 [주의 사항]을 알려주도록 블록을 추가한다.
|
7) [어린이] 오브젝트를 클릭했을 때 질문을 받을 수 있도록 프로그래밍 한다. |
8) [질문1] 화면으로 이동하여 [어린이]를 선택한 후 [장면이 시작되었을 때] 블록을 추가하고 첫 번째 질문을 묻고 대답 기다리기 블록을 추가한다. 그 아래 [대답] 블록과 [인공지능] 카테고리의 ['엔트리'을(를) 학습한 모델로 분류하기] 블록을 이용하여 질문에 대한 답변을 인공지능이 해석하도록 한다.
|
9) [만일 ~이라면] 블록을 이용하여 인공지능이 판별한 값이 0.2(20%)보다 크면 점수 1점을 더하도록 프로그래밍한다. 이렇게 하면 질문의 답에 따라 각 동물변수에 점수를 매길 수 있게 된다. 먼저 인공지능의 [‘상어’에 대한 신뢰도] 블록을 이용하여 다음과 같이 블록을 구성한다. |
|
10) 구성한 블록에 오른쪽 마우스를 클릭한 후 [코드 복사 & 붙여넣기]를 이용하여 블록을 붙여 넣어 다음과 같이 프로그램을 완성한다. |
11) [질문1] 장면 탭을 선택하여 오른쪽 마우스를 클릭하고 [복제하기]를 이용하여 같은 장면을 4개 복제한다. 각 장면의 이름을 [질문2], [질문3], [질문4], [질문5]로 설정하고 [‘엔트리’ 묻고 대답 기다리기] 블록에 아래와 같이 질문을 바꿔 입력한다.
|
12) 각 질문 장면 블록 하단에 [‘장면’ 시작하기] 블록을 추가하여 다음 질문이 있는 장면으로 이동하게 한다. |
13) [결과] 장면에서 [어린이] 오브젝트를 선택하여 결과 발표 메시지를 보여준 후 각 동물 변의 점수가 3점 이상이면 정답을 말하도록 다음과 같이 프로그래밍한다. 여기서는 상어 변수 값에 따른 결과를 먼저 입력한다.
14) 여기에서 [만일 ~(이)라면 아니면] 블록을 활용한 이유는 인공지능이 판별하지 못하는 예외의 상황(예를 들어 모든 동물의 점수가 3점 미만일 경우)이 발생하였을 때 해당 상황에 적절한 메시지를 출력하기 위해서이다. [만일 아니면] 블록을 이용하여 [아니면] 블록에 다음과 같이 프로그래밍한다.
15) 인공지능이 오답을 말했을 경우를 대비해 블록 마지막에 다음과 같은 블록을 추가한다.
동물 찾기 다섯 고개에 사용된 전체코드는 다음과 같다.
[시작 화면]-어린이
[설명서 화면]-어린이
[설명서 화면]-어린이
*질문 화면에 따라 처음 시작되는 “묻고 대답 기다리기 블록”의 질문 내용을 변경하고 답변이 끝나면 다음 질문으로 이동하도록 프로그램의 마지막에 “장면 시작하기” 블록을 변경한다.
[결과]-어린이
[정리]
지금까지 입력받은 텍스트를 학습된 인공지능 모델을 활용하여 텍스트를 분류하는 예제를 살펴보았다. 예제를 통해 사용자가 입력한 텍스트를 인공지능이 어떻게 분류해내는지 원리에 대해 알아보았고, 이를 응용하면 인터넷에서 사용되는 욕설이나 비속어를 걸러내어 청정한 인터넷을 만들 수 있다는 것을 이해할 수 있었다. 또한 다섯 고개 프로그램은 사용자의 응답에 따라 인공지능과 사람과의 소통의 가능성을 보여주었다. 이는 챗봇을 이용하여 상담 등의 서비스에 인공지능을 활용할 수 있다는 것을 의미한다. 위의 예제 프로그램에서 익힌 내용을 생활 속에 적용하여 더욱 멋진 프로그램을 개발하기를 기대해본다.
[과제]
고운 말 나쁜 말 자판기에서 인공지능이 나쁜 말로 판별한 단어를 고운 말로 바꿔 주거나 바꿔 쓸 수 있는 단어를 제시하는 프로그램을 구상해 보자.