Skip to content

Latest commit

 

History

History
137 lines (114 loc) · 9.34 KB

220116.md

File metadata and controls

137 lines (114 loc) · 9.34 KB

Day 97

파이썬으로 배우는 게임 개발 실전편

Appendix 1

게임 소프트웨어 런처

import tkinter
import penpen_pygame
import Galaxy_Lancer
import python_racer

def key_down(e):
    key = e.keysym
    if key == '1':
        penpen_pygame.main()
    if key == '2':
        Galaxy_Lancer.main()
    if key == '3':
        python_racer.main()

root = tkinter.Tk()
root.title("Game Center 2080's")
root.resizable(False, False)
root.bind('<KeyPress>', key_down)
canvas = tkinter.Canvas(width = 800, height = 800)
canvas.pack()
img = tkinter.PhotoImage(file='Python_workspace\python_game\Appendix1\gc2080.png')
canvas.create_image(400, 400, image=img)
root.mainloop()

런처란 여러 소프트웨어를 쉽게 관리할 수 있도록 소프트웨어 리스트를 표시하고 마우스나 키보드를 조작해 이를 간단하게 실행할 수 있도록 한 도구 소프트웨어를 가리킨다.

위의 프로그램을 실행하고 [1], [2], [3] 키로 지금까지 만든 펭귄미로, 슈팅게임, 레이싱 게임을 실행할 수 있다.

파이썬으로 만든 프로그램을 다른 프로그램에 임포트해서 사용할 수 있도록 하려면 if __name__ == '__main__': 구문을 넣어 주어야 한다.

파이썬으로 챗봇 만들기

Chapter 1

챗봇의 필요성

비즈니스 관점

  • 접근성 : 접근성이 매우 뛰어나다. 챗봇은 기본적인 정보만으로도 신속하게 요점을 파악할 수 있다.
  • 효율성 : 사용자가 어디서 뭘하든 챗봇을 통해 뭔가를 할 수 있다.
  • 가용성 : 챗봇은 365일 24시간 내내 이용이 가능하다.
  • 확장성 : 챗봇이 고객이 원하는 것을 처리할 수 있다면 수많은 고객의 질문을 동시에 처리할 수 있다.
  • 비용 : 비용 절감에 큰 효과가 있다.
  • 통찰력 : 챗봇은 머신러닝과 데이터 과학이라는 최신 기술을 이용하여 사람이 할 수 없는 그 일을 해낼 수 있다.

챗봇을 통해 해결할 수 있는 문제는 무엇인가?

  • 간단한 질문과 대답으로 해결할 수 있는 문제인가?
    • 새로운 문제를 접했을 때, 이 문제를 전부 해결하기 위해 노력하는 것 보다 풀고자 하는 문제의 범위를 제한적으로 유지해라.
    • 답을 하기 위해 한계를 정하자.
  • 정보를 반복적으로 검색하거나 분석해야 하는 문제인가?
    • 챗봇의 목적은 사람들을 보다 효율적이고 생산적으로 만들어 주는 것임을 기억하자.
    • 챗봇은 반복적인 것을 자동화하는 데 사람보다 뛰어난 능력을 가지고 있다.
  • 챗봇의 태스크가 자동화되고 고정될 수 있는가?
    • 챗봇이 해결하려는 문제가 자동화될 수 있도록 노력하라.

QnA 챗봇

FAQ 페이지에 존재하는 답변들에 대한 사용자의 다양한 형태의 질문들을 이해할 수 있도록 학습된 챗봇을 생각해보자.

  • 간단한 질문과 대답으로 해결할 수 있는 문제인가?
    • 그렇다. FAQ는 단순하게 자주 묻는 질문과 그와 관련된 답변일 뿐이기 때문이다.
  • 정보를 반복적으로 검색하거나 분석해야 하는 문제인가?
    • 그렇다. FAQ는 데이터베이스의 정보를 가져와 가능한 역동적으로 웹 사이트에 게시되어야 한다. 그러나 아무리 잘 구성되어 있어도, 사용자는 자신이 찾고 있는 답을 발견하기 위해 모든 질문을 하나씩 검토해야만 할 것이기 때문이다.
  • 챗봇의 태스크가 자동화되고 고정될 수 있는가?
    • 그렇다. FAQ 봇은 질문을 받아 분석하고, 알맞은 답변을 데이터베이스에서 가져와 사용자에게 돌려주어야하는데 이는 자동화가 가능하고, 고정되어 변하지 않는 태스크이다.

챗봇과 함께 시작하기

챗봇을 만들기 전에 해야할 세 가지 단계가 있다.

  1. 챗봇이 수행하길 원하는 태스크 혹은 시나리오를 모두 생각하고, 사용자가 그 태스크를 요청할 수 있는 모든 다른 형태의 관련 질문을 수집해야 한다.
  2. 수집한 모든 질문(인텐트)들은 사용자가 어떻게 표현하느냐에 따라 여러 가지 형태의 모습을 갖고 있다.
  3. 사용자의 인텐트를 인식한 후 어떤 일들이 일어나야 하는지에 대한 논리적 흐름을 정하여야 한다.

챗봇에서의 결정 트리(Decision Trees)

결정 트리는 분류와 회귀 모두 가능한 지도 학습 모델 중 하나를 말한다. 결정 트리는 스무고개를 하듯이 예/아니오 질문을 이어가며 학습한다.

챗봇에서 결정 트리 사용하기

  • 결정 트리는 챗봇의 문맥 속에서 사용자 질문의 정확한 답을 찾는 데 도움을 줄 수 있다.
  • 챗봇을 만들 때 결정해야 하는 사항이 많을 수록 if else 코드가 자주 나오는데, 이런 코드들은 복잡한 대화의 흐름을 표현하기에 알맞게 인코딩 될 필요가 있다.

결정 트리가 어떻게 도움이 되는가?

  • 주어진 문제에 대한 전체 그림을 볼 수 있다. 결정 트리를 보면 무엇이 누락됐는지, 문엇이 수정되어야 하는지 쉽게 이해할 수 있다.
  • 디버그 속도가 향상된다.
  • 인공지능이 아직은 수많은 데이터를 스스로 학습하여 100% 성능을 발휘할 수 있는 단계가 아닌데, 결정 트리는 기계가 무언가를 학습하고 수행하며 어려운 부분들이 있을 때 도움이 될 수 있다.

챗봇/봇 개발 프레임워크 사이트

https://woebot.io

  • (챗봇을 통해 사용자의) 기분 추적 가능
  • (챗봇을 통해 사용자의) 기분이 좋아지도록 도와줌
  • (챗봇을 통해 사용자의) 기분 패턴을 확인하고 통찰력을 얻을 수 있음
  • (챗봇을 통해 사용자의) 긍정적이고 에너지 넘치게 하는 법 제공

https://qnamaker.ai/

  • FAQ, URL 및 구조화된 문서를 기반으로 한 간단한 질의-응답 챗봇을 몇 분 만에 구현, 학습하고 배포할 수 있음
  • 익숙한 채팅 인터페이스를 사용한 응답 테스트 및 세분화

https://dialogflow.com/

  • 챗봇 마니아들 사이에서 널리 알려진 api.ai
  • AI로 구동되는 음성 및 텍스트 기반 대화 인터페이스를 구축하여 제품과 상호작용하는 새로운 방법을 제공
  • 구글 Assistant, 아마존 Alexa, 페이스북 메신저와 같은 다양한 플랫폼과 연동됨
  • 사용자가 입력한 대화의 인텐트를 효과적으로 분석하여 이해할 수 있음

https://rasa.com

  • 대화 소프트웨어 구축을 위한 프레임워크
  • 챗봇이 할 수 있는 행동을 파이썬 코드로 구현 가능
  • 챗봇의 응답 논리는 if else를 통해서가 아닌, 대화 예시를 통해 학습된 확률론적 모델에 기초함

https://wit.ai

  • 이 사이트를 통해 대화 혹은 메시지 기능을 수행하는 애플리케이션 혹은 제품을 쉽게 개발할 수 있다.
  • wit.ai를 이용하여 챗봇, 스마트 홈 등을 개발할 수 있다.
  • wit.ai는 Dialogflow의 동작 방식과 유사하나 기능 수가 Dialogflow에 비해 적다.

https://www.luis.ai/

  • 챗봇, 앱, IoT 장치들에 자연어 처리를 탑재한 머신러닝 기반의 서비스
  • 지속적으로 개선되는 엔터프라이즈급 맞춤형 모델을 신속하게 생성

http://botkit.ai

  • 시각적 대화의 구현
  • 통계와 메트릭 기본 제공
  • 페이스북, 마이크로소프트, IBM Watson, Slack, Telegram 등과 손쉽게 통합 가능

챗봇의 구성요소와 사용되는 용어들

인텐트(Intent)
챗봇이 입력 문장이 어떤 의도인지 분류하기 위한 기준이다. 즉, 사용자가 챗봇과 대화하며 원하거나 요청하는 것이라고 할 수 있다. 예를 들어 사용자가 챗봇에 "영화표를 예매해줘"라고 말하면 사람은 이해할 수 있겠지만 챗봇은 이를 이해할 수 없기 때문에 "book_movie" 인텐트라는 이름으로 정의해주는 것이다.

엔티티(Entities)
인텐트와 관련된 메타 데이터를 엔티티라고 한다.
예들 들어 "영화표를 예매해줘"에서 "표를 예매하는 것"이 인텐트이고, "영화"가 엔티티에 해당될 수 있으며, 필요에 따라 항공편, 콘서트 등 여러 가지 주제들이 엔티티가 될 수 있다. 또한 여러 개의 인텐트에 모두 사용할 수 있는 보편적 엔티티를 정의할 수도 있다.

어터런스(Utterances)
어터런스는 어떠한 인텐트에 대해 사용자가 다르게 말할 수 있는 여러 가지 표현들을 의미한다. 인텐트 한 개에 최소 5개에서 최대 10개까지의 어터런스를 보유하는 것이 권장되지만, 그 외의 값을 보유할 수도 있다.

챗봇 학습시키기
학습의 기본적인 의미는, 기존에 정의된 인텐트, 엔티티, 어터런스를 통해 새로운 어터런스를 분류하고 그에 따른 신뢰 점수를 제공하는 것을 말한다.
어터런스를 이용하여 시스템을 학습시킨다는 것은 지도 학습이라는 것을 의미하기도 한다.

신뢰 점수(Confidence Score) 사용자의 어터런스가 어떤 인텐트에 속하는지 확인하기 위해서, 우리가 구현한 모델은 신뢰 점수를 이용하게 된다. 이 점수는 사용자의 인텐트가 어느 분류인지를 머신러닝 모델이 얼마나 확신하는지를 나타낸다.