로봇김삿갓

cdc wiki
로봇김삿갓 (토론 | 기여)님의 2020년 12월 14일 (월) 16:53 판 (상세설계 내용)
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 머신러닝을 활용한 시 추천 어플리케이션 개발

영문 : Development of poem recommendation application using machine learning.

과제 팀명

로봇 김삿갓(Robot KimSatGat)

지도교수

이병정 교수님

개발기간

2020년 9월 ~ 2020년 12월 (총 4개월)

구성원 소개

서울시립대학교 공간정보공학과 20159300** 김*중(팀장)

서울시립대학교 컴퓨터과학부 20149200** 김*석

서울시립대학교 컴퓨터과학부 20149200** 류*현

서울시립대학교 컴퓨터과학부 20149200** 이*근

서론

개발 과제의 개요

개발 과제 요약

◇ 코로나 시대, 메마른 감성으로 일상을 살아가는 사람들에게 적절한 위로와 격려를 하고자 본 프로젝트를 진행하게 되었음. 머신러닝을 활용하여 한글 시를 자연어 처리하여 시의 분위기에 맞는 주제를 태깅 및 데이터베이스에 저장함. 이후, 스마트폰 애플리케이션에서 사용자 데이터를 기반으로 상황에 맞는 적절한 시를 추천하는 것을 목표로 함.

개발 과제의 배경

◇ 코로나 레드, 블루로 감정에 대한 위로가 필요함. 그래서 ‘시’로 위로를 하면 좋겠다고 판단하였음. 
◇ 많이 사용하는 스마트폰의 앱을 통해서 시를 제공하기로 결정.
◇ 개인에게 맞춤형 시 내용을 제공하기 위해 머신러닝을 활용.
◇ 한글 시들에 대한 머신러닝 분석, 시에 대한 관심 재고. 
◇ 사용자가 시를 직접 창작하고 이를 게시할 수 있도록 하여 참여형 커뮤니티를 형성.

개발 과제의 목표 및 내용

◇ 머신러닝으로 한글 시 분석하여 3가지 주제(날씨, 감정, 시간대)에 대한 태깅.
◇ 태깅된 시를 데이터베이스에 저장하고, 앱에서 시 데이터 호출.
◇ 초기 로그인 API 사용자 정보와 간단한 설문조사를 바탕으로 시 맞춤 추천.
◇ 어플리케이션 사용자가 시를 작성하여, 작성된 자작시를 DB에 저장. 해당 시를 다른 사용자에게 추천.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황
    • 머신러닝: 컴퓨터는 데이터를 분석하고 스스로 학습하는 과정을 거치고 나면 패턴을 인식할 수 있는 능력을 갖추게 된다. 이렇게 되면 입력하지 않은 정보에 대해서도 판단, 결정할 수 있게 되는 것이며, 이것이 바로 기계 학습이다. 다시 말해, 방대한 양의 데이터 가운데 비슷한 것끼리 묶어내고 서로 관계있는 것들의 상하구조를 인식하여 이것을 바탕으로 앞으로의 행동을 예측하는 기술인 것이다.
      • 장점: 더 빠른 의사 결정, 실시간 데이터 처리로 높은 적응성, 알고리즘 활용 비즈니스, 인간이 알지 못하는 더 깊은 통찰력 얻음, 대량의 데이터 처리와 정확한 결과 예측으로 인한 높은 효율성
    • Django: 2005년부터 시작된 Python의 오픈 소스 웹 프레임워크이자 풀 스택 프레임워크. Django 소프트웨어 재단은 소셜 댓글 서비스 디스커스(Disqus)를 만든 곳. Python을 이용해 제작. Django는 Python 기반 웹 프레임워크 중에 가장 널리 퍼져있다.
      • 장점: ORM을 기본적으로 제공, MVT 패턴에서 Model 의 경우 데이터베이스와 연동이 편함, 기본적으로 Model에 해당하는 DBMS는 SQLite를 사용하여 Django Admin 기능을 통해 쉽게 조회/편집이 가능,관리자 페이지를 기본적으로 제공, 자주 사용되는 로직들을 묶어서 기본적으로 제공, 만들어진 엔티티에 따라 권한 목록을 알아서 제공.
    • SQLite: SQLite는 MSSQL, MySQL과 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 오프라인에서 응용 프로그램에 넣어 사용하는 비교적 가벼운 임베디드 데이터베이스이다. 일반적인 RDBMS에 비해 대규모 작업에는 적합하지 않지만, 중소 규모라면 속도도 손색이 없다. 또, API는 단순히 라이브러리를 호출하는 것만 있으며, 데이터를 저장하는 데 하나의 파일만을 사용하는 것이 특징이다. 안드로이드 SDK에도 기본 탑재되어 있으며, 안드로이드 앱의 데이터 관리에 필수적인 컴포넌트라 할 수 있을 정도로 널리 사용되고 있다.
      • 장점: 로컬에서의 간단한 DB 구성, 작은 크기와 간결함, 크로스 플랫폼, 라이센스의 자유, 비용 절감(오픈소스 프로젝트), 특히 로컬에서 구동되는 DB이기 때문에, 네트워크 구성 비용, 방화벽이나 네트워크 주소 변환등의 관리 비용이 들지 않음
    • Android OS: 안드로이드(Android)는 리눅스 커널을 기반으로 구글에서 제작한 스마트폰과 같은 플랫폼의 모바일 운영 체제와 미들웨어 및 중요 애플리케이션이 포함된 소프트웨어 집합이다. 구글은 새로운 운영 체제의 버전 공개와 동시에 소스를 공개하고 있다. 이렇게 공개된 소스를 AOSP라고 한다.
      • 장점: 자바기반, 오픈소스, 완벽한 컴포넌트, 높은 점유율, 높은 이식성, 쉬운 연동
  • 특허조사 및 특허 전략 분석
http://www.kipris.or.kr/ 특허조회에서 ‘머신러닝’,‘지도학습’, ‘자연어 처리’, ‘시 추천’ 키워드를 포함한 조사 결과 관련 특허는 존재 하지 않았음.
◇ 지도학습 머신러닝을 활용한 한글 자연어처리 활용도와 높은 분석력 강조
◇ 안드로이드 어플리케이션을 활용하여 사용자에게 시 추천함 시도들 강조

시장상황에 대한 분석

  • 경쟁제품 조사 비교
경쟁2.png
  • 마케팅 전략 제시
Swot2.png
◇ 다른 앱에서는 사용자 기분에 대한 맞춤 시 제공을 하지 않으므로 이 부분을 강조한다.
◇ 별도의 인증이나 결제 없이 카카오 로그인만으로 이용 할 수 있음을 강조한다.
◇ 안드로이드 스마트폰 이라면 최신 기종이 아니라도 이용 가능함을 강조한다.
◇ 쉽고 빠르게 시를 즐길 수 있음을 강조한다.
◇ 다양한 분위기의 시를 제공하고, 직접 시를 작성하여 평가받는 커뮤니티 제공 서비스를 강조한다.

개발과제의 기대효과

기술적 기대효과

◇ 지도학습 뿐만 아니라 비지도학습, 강화학습을 통한 머신러닝 분석을 진행했을 때, 그 결과를 비교하여 한글 데이터 분석에 대한 정밀함을 예측하고 발전할 수 있음
◇ 추후 안드로이드 뿐만 아니라 iOS, Windows같은 다중 플랫폼에서 개발하여 다양한 플랫폼에서 더 많은 사용자가 어플리케이션을 이용하여 확장된 사용자 커뮤니티를 생성 할 수 있음

경제적, 사회적 기대 및 파급효과

◇ 시를 읽으며 사용자들에게 감정적인 위로와 치료를 제공 할 수 있음
◇ 시인들이 활동할 수 있는 공간을 만들어주어 디지털시대에 좋은 경제적 환경을 마련해줌
◇ 사용자의 기분에 맞추어 시를 제공하는 머신러닝을 통해 인간감정에 대한 예측에 대한 정밀한 연구를 진행해볼 수 있음

기술개발 일정 및 추진체계

개발 일정

개발일정2.png

구성원 및 추진체계

  • 김*중(팀장): 안드로이드 백엔드 개발, 문서작성
  • 김*석: 크롤링, 서버 제작 및 관리
  • 류*현: 안드로이드 프론트엔드 개발
  • 이*근: 데이터 전처리, 머신러닝 모델 설계

설계

설계사양

제품의 요구사항

  • 사용자 요구사항
◇ 안드로이드 스마트폰으로 어플리케이션을 실행한다.
◇ 카카오 계정을 연동하여 앱 로그인을 실행한다.
◇ 주어진 질문1, 질문2를 수행하여 자신의 감정 상태를 표기한다.
◇ 질문 결과 표출되는 시를 확인 할 수 있다. 
◇ 표출되는 시에 대하여 좋아요를 선택 할 수 있다.
◇ 표출되는 시에 대하여 댓글을 남기길 수 있다.
◇ 내가 직접 시를 작성할 수 있다.
◇ 드로우어를 열어 원하는 옵션을 선택 할 수 있다.
◇ 내가 추천 받았던 시 목록을 확인 할 수 있다.
◇ 내가 좋아요를 눌렀던 시 목록을 확인 할 수 있다.
◇ 내가 작성한 시 목록을 확인 할 수 있다.
  • 사용자 요구사항 만족을 위한 기능 정의 및 기능별 정량목표
◇ 안드로이드 스튜디오 통합개발환경을 사용하여 개발을 진행한다. 이후 릴리즈를 통하여 APK를 작성한다.
◇ 카카오 SDK 서버를 통한 카카오 계정을 연동하여 앱 로그인을 구현한다. Oauto2.0과 토큰 기반의 인증을 사용한다.
◇ 주어진 질문1, 질문2를 수행한 결과를 API 서버로 전달하여, 사용자의 감정(Feeling)별의 점수를 산출하고 이에 맞는 시 분위기(Tag)를 가진 시를 나타내도록 한다.
◇ 질문 결과 표출되는 시는 데이터베이스의 시 데이터에서 가져오도록 한다. 데이터베이스는 OracleDB로 구현한다. 
◇ 표출되는 시에 대하여 ‘좋아요’는 ImageButton으로 구현하고 API, DB 서버에 반응하도록 한다.
◇ 표출되는 시에 대하여 ‘댓글’을 구현하고 API, DB 서버에 반응하도록 한다.
◇ 내가 직접 시를 작성하는 레이어는 프래그먼트가 아닌 별도의 액티비티에서 작성하도록 한다.
◇ 드로우어를 열어 원하는 옵션을 선택 하기 위해 안드로이드 Navigation Drawer를 활용한 메뉴를 구현하도록 한다.
◇ ‘내가 추천 받았던 시 목록’을 확인 할 수 있도록 Fragment 상에서 표출되도록 구현한다.
◇ ‘내가 좋아요를 눌렀던 시 목록’을 확인 할 수 있도록 Fragment 상에서 표출되도록 구현한다.
◇ ‘내가 작성한 시 목록’을 확인 할 수 있도록 Fragment 상에서 표출되도록 구현한다.

설계 사양

  • APP:
 ◆ Android: API 19이상 / Java, Kotlin(Kakao API 사용 코드)
  • Server:
 ◆ API - Google Cloud E2 Micro VM (Google, Django, RestAPI)
 ◆ DB - Oracle ATP Database (Oracle)
 ◆ GPU - NIPA-GPU Quadro RTX 6000 (정보통신산업진흥원)
  • Machine Learning:
 ◆ Python(Customized KoNLPy 라이브러리): 자연어 처리를 위한 토큰화 작업을 위해 여러 토큰화 라이브러리 중 한국어 형태소 처리에 특화되었고 지속적인 업데이트를 하는 것으로 확인된 Customized KoNLPy를 사용함.
 ◆ Word Embedding, Interger Encoding, padding: 시 데이터의 단어 토큰들의 의미를 유지하며 연관성을 비교하기 위해 Word Embedding을 사용하였고 embedding vector를 만드는 과정에서 Interger Encoding 기법을 사용. 딥러닝 모델의 입력을 위해 Padding을 통해 시 본문의 길이를 일정하게 변환.  
 ◆ LSTM(Long Short-Term Memory, 장단기메모리): Neural Network를 구성하는데 초기에는 MLP(MultiLayer Perceptron)를 이용해 구현했으나 DTM(Document-Term Metrix, 문서-단어 행렬)은 단어의 빈도를 기반으로 하는 단점이 존재함. 따라서 단어 순서를 고려할 수 있는 RNN으로 변경했고, 이후 RNN의 장기 의존성 문제(오래된 데이터일수록 영향력이 현저히 줄어든다)가 있어 대안으로 LSTM을 최종적으로 사용함. 시퀀스를 입력받아 시 본문 전체 데이터를 고려해 특성을 추출하고 감정을 분류.
 ◆ Tensorflow, Keras: 머신러닝 모델 학습에는 Tensorflow와 Tensorflow에 내장되어 있는 Keras 라이브러리를 활용하여 구현.

개념설계안

기술로드맵2.png
◇ 시 데이터를 전처리하고, 학습모델에 입력하여 시의 분위기를 자동으로 파악하도록 한다.
◇ Django와 SQLite로 개발한 클라우드 서버로 분위기가 파악된 시 데이터들이 저장되고 앱과 연동한다.
◇ 안드로이드 어플리케이션에서는 Rest API 통신 방식으로 데이터베이스에 접근하고 값을 받아온다.
◇ 사용자는 시를 짓고 저장할 수 있으며, 시 평가와 시 추천의 커뮤니티를 생성할 수 있게 한다.

상세설계 내용

{ |class="wikitable" style="font-weight:bold; text-align:center;" |- ! 기능 ! 설명 |- | 네트워크 구조 | style="font-weight:normal;" | 프로젝트 초기에 학습한 모델의 Evaluation에 시간이 많이 들 것이라 예상하였고, 보다 성능이 좋은 GPU 서버에 Evaluation 작업을 할당하여 작업시간을 줄이려 시도.
하지만 예상한 것보다 Evaluation에 드는 시간이 많지 않아 (API 서버에서 500자 시를 Evaluation할 시 1초 이내로 처리됨) 구조를 단순화하고 작업을 줄이기 위해 Evaluation 작업을 API서버에서 처리하고 GPU서버에서는 학습만 담당하는 구조로 변경.
이외에는 인증을 위해 카카오 API 서버와 E2 Micro VM을 연결. |- | 서버의
기능 제공을 위한 RESTful API 구현 | style="font-weight:normal;" | REST는 Representational State Transfer의 약자로 엄격한 의미로의 REST는 자원을 정의하고 자원에 대한 주소를 지정하는 방법들의 모음.
웹 상의 자료를 HTTP 위에서 쿠키를 통한 세션 트랙킹같은 별도의 전송 계층 없이 전송하기 위한 간단한 인터페이스이므로 간단한 정보 전달을 하는 로봇 김삿갓 서버 구성에 적합. 로봇 김삿갓의 API를 REST로 부르기 위해서는 몇 가지 필수 제약조건을 지켜야 함.

- 인터페이스 일관성 (Uniform)
1. identification of resouces
2. manipulation of resources through representation
3. self-descriptive messages
4. hypermedia as the engine of appliacation state (HATEOAS)
- 무상태 (Stateless)
- 캐시 처리 가능 (Cacheable)
- 계층화 (Layered System)
- 클라이언트/서버 구조

로봇 김삿갓에는 Uniform Interface의 self-descriptive 조건과 HATEOAS 조건을 달성하지 않았으므로 엄밀한 의미로의 REST는 아니지만,
URI의 형태로 자원을 제공하는 Stateless 한 API로 간단한 의미로서의 REST를 구현했다 볼 수 있음. |- | 서버 인증을 위한
카카오 소셜로그인과
토큰 기반 인증 | style="font-weight:normal;" | OAuth는 사용자들이 웹 어플리케이션에게 비밀번호를 제공하지 않고 다른 기관이나 기업에에 인증을 대리하게 하고,
인증 후에 그 권한만을 웹 어플리케이션에서 사용할 수 있게 하는 프로토콜.
카카오에서도 OAuth를 이용한 로그인 API를 제공하는데 이를 이용해 로봇 김삿갓의 로그인 과정을 구현하였고, 로봇 김삿갓 API의 이용을 위한 인증은 세션 기반이 아닌 토큰 기반 인증으로 구현. 아래는 로그인 과정의 흐름.1. 먼저 클라이언트에서 카카오 API서버에 인증 요청을 보낸다.2. 인증이 성공하였다면 카카오 API 서버에서 이 유저만을 위한 토큰을 발급해준다.3. 클라이언트는 로봇 김삿갓 API 서버에 이 토큰을 보내 로그인 처리를 요청한다.4. 로봇 김삿갓 API 서버는 클라이언트로부터 받은 토큰이 올바른 토큰인지 확인하기 위해 카카오 API 서버로 토큰 검증 요청을 보낸다.5. 카카오 API 서버는 토큰의 검증 결과를 회신한다.6. 클라이언트에게 받은 토큰이 올바른 토큰이었다면, 로봇 김삿갓의 API 이용을 위한 토큰을 클라이언트에게 발급해준다. |- | 보안을 위해 HTTPS 프로토콜 사용 | style="font-weight:normal;" | 안드로이드 버전 9.0(Pie)부터 SSL 보안이 적용되지 않은 서버와의 통신을 막아놓았기 때문에 로봇 김삿갓 앱(클라이언트)와 서버 통신을 위해, 서버에 HTTPS를 적용. |}

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

내용

포스터

내용

관련사업비 내역서

내용

완료작품의 평가

내용

향후계획

내용

특허 출원 내용

내용