Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PHP로 Slack Bot 만들기
전창완
PHP로 어디까지 개발해봤니
전창완

- Oponiti & Allbus 서버 개발자

- Wandu Framework
발표자 소개
Slack Bot
Slack?
Slack Bot
1.슬랙은 회사 업무용 메신저.

2.이 안에 다양한 API를 제공.

3.그 중에 Bot을 위한 RTM(Real Time Messaging) API가 존재.
Slack Bot?
Slack Bot
Slack Bot?
Slack Bot
1.RTM(Real Time Messaging) API 를 통해서 원하는 형태의 봇을 제작 가능.

2.최소한의 Input/Output 로직을 제공.

3.너무 간단하게 사용할 수 ...
왜 시작하게 되었나요?
Slack Bot
1.업무에 필요한 로직들을 누구나 실행할 수 있었으면..

2.배포도 해주었으면..

3.야근할 때 떠들 사람이 필요해서.. (저희 회사는 야근을 하지 않습니다. 진짜로.)
왜 PHP로 만들었어요?
Slack Bot
1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요.

2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요.

3.그런데 왜 P...
왜 PHP로 만들었어요?
Slack Bot
1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요.

2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요.

3.그런데 왜 P...
왜 PHP로 만들었어요?
Slack Bot
1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요.

2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요.

3.그런데 왜 P...
Slack RTM API
동작원리
Slack RTM API
1.Socket으로 통신. (아주 단순)

2.https://api.slack.com/rtm
동작원리
Slack RTM API
1.채널에 봇을 초대합니다.

2.그 채널에 메시지가 올라옵니다.

3.Slack이 메시지를 Client로 전송합니다. (API)

4.Client에서 프로그램 로직이 동작합니다.

5...
동작원리
Slack RTM API
1.채널에 봇을 초대합니다.

2.그 채널에 메시지가 올라옵니다.

3.Slack이 메시지를 Client로 전송합니다. (API)

4.Client에서 프로그램 로직이 동작합니다.

5...
잊을만 하면 나오는 라이브러리
React PHP
Slack RTM API
1.Event Driven PHP Library.

2.Promise Pattern 사용.

3.어 왠지 비동기 스러울 것 같다..
됐고, 그냥 일단 만들어 봅시다.
Slack API 관리페이지
Slack RTM API
1.https://api.slack.com/bot-users

2.Bot을 추가합니다.
Composer Package
Slack RTM API
1.coderstephen/slack-client 패키지 사용.

(https://github.com/sagebind/slack-client)

2.composer...
<?php

use ReactEventLoopFactory;

use SlackPayload;

use SlackRealTimeClient;



require __DIR__ . '/vendor/autoload.php'...
결과
Slack RTM API
말하기
Slack RTM API
1.이제 듣는 법을 알았으니 말하는 법도 익혀봅시다.

2.Payload에 text는 봇이 듣게된 말입니다.

3.Payload에 channel은 봇이 말을 듣게된 채널입니다.
<?php

use ReactEventLoopFactory;

use SlackChannelInterface;

use SlackPayload;

use SlackRealTimeClient;



require __DI...
말하기
Slack RTM API
정리
Slack RTM API
1.이 두가지를 잘 응용해봅시다.
정리
Slack RTM API
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
넹
놀고 있어요
스파게티 어때요?
맑아요
“마늘아 밥 추천좀”
정리
Slack RTM API
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
넹
놀고 있어요
스파게티 어때요?
맑아요
“마늘아 밥 추천좀”
=
전부 “===“로 비교할 순 없잖아요..
그래서 하나 더
자연어 처리 쬐끔
어떻게 접근해 볼 수 있을까
자연어처리
1.알다시피, “===“를 통해 비교하면 우리의 봇은 우리가 오타라도 나면 벙어리가 됩니다.

2.제대로 NLP(Natural Language Processing)를 하려면 굉장히...
조금만 다르게 생각해봅시다.
자연어처리
봇사용자
질문
대답
조금만 다르게 생각해봅시다.
자연어처리
검색엔진사용자
질의
검색결과
조금만 다르게 생각해봅시다.
자연어처리
검색엔진사용자
질의
응답
검색엔진을 응용하면

문제를 해결할 수 있겠다!
검색엔진을 알아보자
자연어처리
1.검색엔진을 깔아서 사브작사브작하면 문제 해결이 됩니다.

2.그치만, 검색엔진이 해결하는 문제와 우리가 해결하는 문제
는 다릅니다.

3.검색엔진은 긴 문장들로 이루어진 문서들을 찾습니...
검색엔진을 알아보자
자연어처리
1.검색엔진을 깔아서 사브작사브작하면 문제 해결이 됩니다.

2.그치만, 검색엔진이 해결하는 문제와 우리가 해결하는 문제
는 다릅니다.

3.검색엔진은 긴 문장들로 이루어진 문서들을 찾습니...
검색엔진을 알아보자
자연어처리
1.검색엔진의 구조를 살짝 들여다 봅시다.

2.대충 찾아보니 형태소 분석기라는 녀석을 사용해서 토큰화 시키고, 클러스터링이 어쩌구 저쩌구… 문서 유사도가 어쩌구 저쩌구

3.3가지 키워드...
형태소 분석기
한글 형태소 분석기
형태소 분석기
1.http://konlpy-ko.readthedocs.io/ko/v0.4.3/

2.KoNLPY… 또 파이썬이냐…
한글 형태소 분석기
형태소 분석기
1.한나눔 형태소 분석기 (https://kldp.net/hannanum / C, Java)

2.꼬꼬마 한글 형태소 분석기 (http://kkma.snu.ac.kr/documents ...
한글 형태소 분석기
형태소 분석기
1.한나눔 형태소 분석기 (https://kldp.net/hannanum / C, Java)

2.꼬꼬마 한글 형태소 분석기 (http://kkma.snu.ac.kr/documents ...
한글 형태소 분석기
형태소 분석기
1.OSX에서 brew에 php56-mecab(또는 php70-mecab)이 이미 있습니다. 그냥 다운받으세요.

2.mecab-ko-dic을 설치합니다. (https://bitbuck...
MeCab
형태소 분석기
MeCab
형태소 분석기
1.MeCab은 일본어 라이브러리라서 문서가 다 일본어로 나와요.

2.php5.x와 7.x의 동작방식이 달라요.

3.https://github.com/wandu/mecab (제가 이미 다 해...
<?php

use WanduMecabMecab;



require __DIR__ .'/vendor/autoload.php';



$mecab = new Mecab('/usr/local/lib/mecab/dic/me...
MeCab
형태소 분석기
https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-
nXeRF6D80udfcwY/edit?usp=sharing
유사도
어떻게 개선될까요?
유사도
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
넹
놀고 있어요
스파게티 어때요?
맑아요
“마늘아 오늘의 추천 메뉴”
어떻게 개선될까요?
유사도
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
“마늘아 오늘의 추천 메뉴” = 마늘 + 아 + 오늘 + 의 + 추천 + 메뉴
= 마늘 + 아 + 밥 + 추천 + 좀
형태소 분석기 ...
어떻게 개선될까요?
유사도
마늘아
마늘아 뭐하니
마늘아 밥 추천좀
마늘아 오늘의 날씨
“마늘아 오늘의 추천 메뉴” = 마늘 + 아 + 오늘 + 의 + 추천 + 메뉴
= 마늘 + 아 + 밥 + 추천 + 좀
“마늘아 밥 추...
어떻게 개선될까요?
유사도
1.유사하다는 말은 사람만 이해할 수 있는 말입니다.

2.이 유사한 기준을 수치로 바꿔야 컴퓨터가 이해할 수 있습니다.

3.그래서 유사도 함수를 사용합니다.
유사도(Similarity) 함수
유사도
1.유클리디안 거리

2.피어슨 상관계수

3.자카드 계수

4.타니모토 계수
Jaccard Similarity
유사도
1.우린 “Jaccard Similarity” 방식을 이용할 겁니다.

2.그냥 두 집합의 유사도를 구할 수 있다고 생각하면 됩니다.
Jaccard Similarity
유사도
1.또 집합이 많아지면 유사도를 계산하는데 엄청나게 많은 시간을 소요합니다.

(봇한테 말을 걸었는데 10분후에 답장이 오는 그런 사태..)

2.이 시간을 줄이기 위해 MinH...
뭐라는 거지…
Jaccard Similarity
유사도
1.그냥 이런게 있다 정도만 알아두시고, 실제로 써보실 땐 코드로 작성해놨으니 가져다 쓰세요.

2.https://github.com/ModernPUG/garlicbot/blob...
하여간 지금까지 이야기한걸

대충 소스에 녹여봅시다.
실습

(https://github.com/modernpug/garlicbot)
실제 봇의 처리과정
마무리
1.Pre-Processing

•오타 보정과 같은 일을 함.

2.Feature Engineering

•Tokenizing (n-gram/ skipgram / word2vec 등 활용 가능...
정리
마무리
1.우리는 Feature Engineering과 Modeling의 극히 일부를 구현한 것 뿐입니다.

2.제대로 하려면 아직도 갈길이 많습니다.
더 공부하고 싶다면..
마무리
1.[발표] 코끼리 냉장고에 집어넣기 : 실시간 추천엔진을 노트북에서 돌게 만들어보자 - 하용호

(http://www.numberworks.io/blog/2015/9/17/--1)

2....
Q & A ?
Upcoming SlideShare
Loading in …5
×

PHP로 Slack Bot 만들기

5,272 views

Published on

보통 Node나 Python으로는 봇을 많이 만드는데 PHP로는 잘 만들지 않습니다. 하지만 PHP로도 쉽게 만들 수 있습니다. PHP로 아주 약간의 자연어로 대화가능한 봇 만드는 방법을 소개합니다.

12월 Modern PHP User Group에서 발표한 내용입니다.

Published in: Software
  • Don't forget another good way of simplifying your writing is using external resources (such as ⇒ www.WritePaper.info ⇐ ). This will definitely make your life more easier
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I have always found it hard to meet the requirements of being a student. Ever since my years of high school, I really have no idea what professors are looking for to give good grades. After some google searching, I found this service ⇒ www.HelpWriting.net ⇐ who helped me write my research paper. The final result was amazing, and I highly recommend ⇒ www.HelpWriting.net ⇐ to anyone in the same mindset as me.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hi there! I just wanted to share a list of sites that helped me a lot during my studies: .................................................................................................................................... www.EssayWrite.best - Write an essay .................................................................................................................................... www.LitReview.xyz - Summary of books .................................................................................................................................... www.Coursework.best - Online coursework .................................................................................................................................... www.Dissertations.me - proquest dissertations .................................................................................................................................... www.ReMovie.club - Movies reviews .................................................................................................................................... www.WebSlides.vip - Best powerpoint presentations .................................................................................................................................... www.WritePaper.info - Write a research paper .................................................................................................................................... www.EddyHelp.com - Homework help online .................................................................................................................................... www.MyResumeHelp.net - Professional resume writing service .................................................................................................................................. www.HelpWriting.net - Help with writing any papers ......................................................................................................................................... Save so as not to lose
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/2Q98JRS ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/2Q98JRS ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

PHP로 Slack Bot 만들기

  1. 1. PHP로 Slack Bot 만들기 전창완 PHP로 어디까지 개발해봤니
  2. 2. 전창완 - Oponiti & Allbus 서버 개발자 - Wandu Framework 발표자 소개
  3. 3. Slack Bot
  4. 4. Slack? Slack Bot 1.슬랙은 회사 업무용 메신저. 2.이 안에 다양한 API를 제공. 3.그 중에 Bot을 위한 RTM(Real Time Messaging) API가 존재.
  5. 5. Slack Bot? Slack Bot
  6. 6. Slack Bot? Slack Bot 1.RTM(Real Time Messaging) API 를 통해서 원하는 형태의 봇을 제작 가능. 2.최소한의 Input/Output 로직을 제공. 3.너무 간단하게 사용할 수 있어서 사실상 모든 언어에서 다 사용 가능.
 (PHP가 되면 다 된다고 보면 됨)
  7. 7. 왜 시작하게 되었나요? Slack Bot 1.업무에 필요한 로직들을 누구나 실행할 수 있었으면.. 2.배포도 해주었으면.. 3.야근할 때 떠들 사람이 필요해서.. (저희 회사는 야근을 하지 않습니다. 진짜로.)
  8. 8. 왜 PHP로 만들었어요? Slack Bot 1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요. 2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요. 3.그런데 왜 PHP로…
  9. 9. 왜 PHP로 만들었어요? Slack Bot 1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요. 2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요. 3.그런데 왜 PHP로… 여기가 Modern PUG 잖아요.
  10. 10. 왜 PHP로 만들었어요? Slack Bot 1.RTM API는 비동기로직이라 Node.js로 작성하면 훨씬 만들기 편해요. 2.자연어 처리나 인공지능은 Python, Java으로 하면 훨씬 좋아요. 3.그런데 왜 PHP로… 언어는 도구일 뿐
  11. 11. Slack RTM API
  12. 12. 동작원리 Slack RTM API 1.Socket으로 통신. (아주 단순) 2.https://api.slack.com/rtm
  13. 13. 동작원리 Slack RTM API 1.채널에 봇을 초대합니다. 2.그 채널에 메시지가 올라옵니다. 3.Slack이 메시지를 Client로 전송합니다. (API) 4.Client에서 프로그램 로직이 동작합니다. 5.Slack Server로 응답을 보냅니다. (API) Client Slack Server 채널에서 들은 모든 글 응답
  14. 14. 동작원리 Slack RTM API 1.채널에 봇을 초대합니다. 2.그 채널에 메시지가 올라옵니다. 3.Slack이 메시지를 Client로 전송합니다. (API) 4.Client에서 프로그램 로직이 동작합니다. 5.Slack Server로 응답을 보냅니다. (API) Client Slack Server 채널에서 들은 모든 글 응답 PHP로 소켓을 제어할 수 있어요…?
  15. 15. 잊을만 하면 나오는 라이브러리
  16. 16. React PHP Slack RTM API 1.Event Driven PHP Library. 2.Promise Pattern 사용. 3.어 왠지 비동기 스러울 것 같다..
  17. 17. 됐고, 그냥 일단 만들어 봅시다.
  18. 18. Slack API 관리페이지 Slack RTM API 1.https://api.slack.com/bot-users 2.Bot을 추가합니다.
  19. 19. Composer Package Slack RTM API 1.coderstephen/slack-client 패키지 사용.
 (https://github.com/sagebind/slack-client) 2.composer의 minimal-stability 설정을 dev로 설정.
  20. 20. <?php
 use ReactEventLoopFactory;
 use SlackPayload;
 use SlackRealTimeClient;
 
 require __DIR__ . '/vendor/autoload.php';
 
 $loop = Factory::create();
 
 $client = new RealTimeClient($loop);
 $client->setToken(‘xoxb-...’);
 
 $client->connect()->then(function () use ($client) {
 $client->on('message', function (Payload $payload) {
 print_r($payload);
 });
 });
 
 $loop->run();
 빠르게 작성해봅시다.
  21. 21. 결과 Slack RTM API
  22. 22. 말하기 Slack RTM API 1.이제 듣는 법을 알았으니 말하는 법도 익혀봅시다. 2.Payload에 text는 봇이 듣게된 말입니다. 3.Payload에 channel은 봇이 말을 듣게된 채널입니다.
  23. 23. <?php
 use ReactEventLoopFactory;
 use SlackChannelInterface;
 use SlackPayload;
 use SlackRealTimeClient;
 
 require __DIR__ . '/vendor/autoload.php';
 
 $loop = Factory::create();
 
 $client = new RealTimeClient($loop);
 $client->setToken('xoxb-...');
 
 $client->connect()->then(function () use ($client) {
 $client->on('message', function (Payload $payload) use ($client) {
 if ($payload['text'] === '마늘아') {
 $client->getChannelGroupOrDMByID($payload['channel'])
 ->then(function (ChannelInterface $channel) use ($client) {
 $client->send("넹", $channel);
 });
 }
 });
 });
 
 $loop->run();

  24. 24. 말하기 Slack RTM API
  25. 25. 정리 Slack RTM API 1.이 두가지를 잘 응용해봅시다.
  26. 26. 정리 Slack RTM API 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 넹 놀고 있어요 스파게티 어때요? 맑아요 “마늘아 밥 추천좀”
  27. 27. 정리 Slack RTM API 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 넹 놀고 있어요 스파게티 어때요? 맑아요 “마늘아 밥 추천좀” =
  28. 28. 전부 “===“로 비교할 순 없잖아요..
  29. 29. 그래서 하나 더
  30. 30. 자연어 처리 쬐끔
  31. 31. 어떻게 접근해 볼 수 있을까 자연어처리 1.알다시피, “===“를 통해 비교하면 우리의 봇은 우리가 오타라도 나면 벙어리가 됩니다. 2.제대로 NLP(Natural Language Processing)를 하려면 굉장히 어렵습니다. 3.그치만 조금만 다르게 생각해봅시다. 어쩌면 우린 이미 답을 알고 있을 수도 있습니다.
  32. 32. 조금만 다르게 생각해봅시다. 자연어처리 봇사용자 질문 대답
  33. 33. 조금만 다르게 생각해봅시다. 자연어처리 검색엔진사용자 질의 검색결과
  34. 34. 조금만 다르게 생각해봅시다. 자연어처리 검색엔진사용자 질의 응답 검색엔진을 응용하면 문제를 해결할 수 있겠다!
  35. 35. 검색엔진을 알아보자 자연어처리 1.검색엔진을 깔아서 사브작사브작하면 문제 해결이 됩니다. 2.그치만, 검색엔진이 해결하는 문제와 우리가 해결하는 문제 는 다릅니다. 3.검색엔진은 긴 문장들로 이루어진 문서들을 찾습니다. 4.봇은 기존에 알고있는 문장을 찾습니다.
 (왠지 더 쉬울 것 같다!) 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 “마늘아 밥 추천좀” 그림. 쿼리를 가지고 알고있는 문장을 찾습니다.
  36. 36. 검색엔진을 알아보자 자연어처리 1.검색엔진을 깔아서 사브작사브작하면 문제 해결이 됩니다. 2.그치만, 검색엔진이 해결하는 문제와 우리가 해결하는 문제 는 다릅니다. 3.검색엔진은 긴 문장들로 이루어진 문서들을 찾습니다. 4.봇은 기존에 알고있는 문장을 찾습니다.
 (왠지 더 쉬울 것 같다!) 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 “마늘아 밥 추천좀” 그림. 쿼리를 가지고 알고있는 문장을 찾습니다. 검색엔진은 여기가 문서
  37. 37. 검색엔진을 알아보자 자연어처리 1.검색엔진의 구조를 살짝 들여다 봅시다. 2.대충 찾아보니 형태소 분석기라는 녀석을 사용해서 토큰화 시키고, 클러스터링이 어쩌구 저쩌구… 문서 유사도가 어쩌구 저쩌구 3.3가지 키워드를 알아야 합니다. 형태소 분석기 / 유사도 / 클러스터링
  38. 38. 형태소 분석기
  39. 39. 한글 형태소 분석기 형태소 분석기 1.http://konlpy-ko.readthedocs.io/ko/v0.4.3/ 2.KoNLPY… 또 파이썬이냐…
  40. 40. 한글 형태소 분석기 형태소 분석기 1.한나눔 형태소 분석기 (https://kldp.net/hannanum / C, Java) 2.꼬꼬마 한글 형태소 분석기 (http://kkma.snu.ac.kr/documents / Java) 3.로제타 (https://shleekr.github.io / Python) 4.루씬 한글 분석기 아리랑 (https://sourceforge.net/projects/lucenekorean / Java?) 5.은전한닢 Mecab Ko (https://bitbucket.org/eunjeon/mecab-ko / C)
  41. 41. 한글 형태소 분석기 형태소 분석기 1.한나눔 형태소 분석기 (https://kldp.net/hannanum / C, Java) 2.꼬꼬마 한글 형태소 분석기 (http://kkma.snu.ac.kr/documents / Java) 3.로제타 (https://shleekr.github.io / Python) 4.루씬 한글 분석기 아리랑 (https://sourceforge.net/projects/lucenekorean / Java?) 5.은전한닢 Mecab Ko (https://bitbucket.org/eunjeon/mecab-ko / C)
  42. 42. 한글 형태소 분석기 형태소 분석기 1.OSX에서 brew에 php56-mecab(또는 php70-mecab)이 이미 있습니다. 그냥 다운받으세요. 2.mecab-ko-dic을 설치합니다. (https://bitbucket.org/eunjeon/mecab-ko-dic)
 mecab-ko는 필요없습니다. mecab-ko-dic만 설치하시면 됩니다.
  43. 43. MeCab 형태소 분석기
  44. 44. MeCab 형태소 분석기 1.MeCab은 일본어 라이브러리라서 문서가 다 일본어로 나와요. 2.php5.x와 7.x의 동작방식이 달라요. 3.https://github.com/wandu/mecab (제가 이미 다 해놨습니다.) • MeCab Wrapping Library.
  45. 45. <?php
 use WanduMecabMecab;
 
 require __DIR__ .'/vendor/autoload.php';
 
 $mecab = new Mecab('/usr/local/lib/mecab/dic/mecab-ko-dic');
 
 print_r($mecab->parseToString('흠. 한글 형태소 분석기는 어떻게 동작할까요.'));
  46. 46. MeCab 형태소 분석기 https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49- nXeRF6D80udfcwY/edit?usp=sharing
  47. 47. 유사도
  48. 48. 어떻게 개선될까요? 유사도 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 넹 놀고 있어요 스파게티 어때요? 맑아요 “마늘아 오늘의 추천 메뉴”
  49. 49. 어떻게 개선될까요? 유사도 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 “마늘아 오늘의 추천 메뉴” = 마늘 + 아 + 오늘 + 의 + 추천 + 메뉴 = 마늘 + 아 + 밥 + 추천 + 좀 형태소 분석기 사용 시.. = 마늘 + 아 + 오늘 + 의 + 날씨 = 마늘 + 아 + 뭐 + 하 + 니 = 마늘 + 아
  50. 50. 어떻게 개선될까요? 유사도 마늘아 마늘아 뭐하니 마늘아 밥 추천좀 마늘아 오늘의 날씨 “마늘아 오늘의 추천 메뉴” = 마늘 + 아 + 오늘 + 의 + 추천 + 메뉴 = 마늘 + 아 + 밥 + 추천 + 좀 “마늘아 밥 추천좀”과 매우 유사해 보입니다. = 마늘 + 아 + 오늘 + 의 + 날씨 = 마늘 + 아 + 뭐 + 하 + 니 = 마늘 + 아
  51. 51. 어떻게 개선될까요? 유사도 1.유사하다는 말은 사람만 이해할 수 있는 말입니다. 2.이 유사한 기준을 수치로 바꿔야 컴퓨터가 이해할 수 있습니다. 3.그래서 유사도 함수를 사용합니다.
  52. 52. 유사도(Similarity) 함수 유사도 1.유클리디안 거리 2.피어슨 상관계수 3.자카드 계수 4.타니모토 계수
  53. 53. Jaccard Similarity 유사도 1.우린 “Jaccard Similarity” 방식을 이용할 겁니다. 2.그냥 두 집합의 유사도를 구할 수 있다고 생각하면 됩니다.
  54. 54. Jaccard Similarity 유사도 1.또 집합이 많아지면 유사도를 계산하는데 엄청나게 많은 시간을 소요합니다.
 (봇한테 말을 걸었는데 10분후에 답장이 오는 그런 사태..) 2.이 시간을 줄이기 위해 MinHash라는 기법을 사용합니다. 3.일종의 클러스터링기법. 4.블로그에 자세히 설명해놨습니다. (http://blog.wani.kr/posts/2016/11/24/minhash)
  55. 55. 뭐라는 거지…
  56. 56. Jaccard Similarity 유사도 1.그냥 이런게 있다 정도만 알아두시고, 실제로 써보실 땐 코드로 작성해놨으니 가져다 쓰세요. 2.https://github.com/ModernPUG/garlicbot/blob/master/src/Math/JaccardSimilarity.php 3.https://github.com/ModernPUG/garlicbot/blob/master/src/Math/MinHashCalculator.php
  57. 57. 하여간 지금까지 이야기한걸 대충 소스에 녹여봅시다.
  58. 58. 실습 (https://github.com/modernpug/garlicbot)
  59. 59. 실제 봇의 처리과정 마무리 1.Pre-Processing •오타 보정과 같은 일을 함. 2.Feature Engineering •Tokenizing (n-gram/ skipgram / word2vec 등 활용 가능) 3.Modeling •결과 도출 (tf-idf / neural net 활용 가능) 4.Post Processing •사용자에 맞춰서 결과를 가공함.
  60. 60. 정리 마무리 1.우리는 Feature Engineering과 Modeling의 극히 일부를 구현한 것 뿐입니다. 2.제대로 하려면 아직도 갈길이 많습니다.
  61. 61. 더 공부하고 싶다면.. 마무리 1.[발표] 코끼리 냉장고에 집어넣기 : 실시간 추천엔진을 노트북에서 돌게 만들어보자 - 하용호
 (http://www.numberworks.io/blog/2015/9/17/--1) 2.[도서] 집단지성 프로그래밍 - 토비 세가란
 (http://www.yes24.com/24/goods/2917663)
  62. 62. Q & A ?

×