일기장

NAVER CLOUD PLATFORM AI 과정 2일차 기록

graph-dev 2024. 3. 7. 06:15
728x90

2일차 이야기

 

2일차 시작

 

3/6 교육 1교시

chatbot OCR Aitems 체험 가능하다.

chatbot: 채팅문의하기가 다 챗봇의 그것이다.

OCR: 공과금, 지로, 명함(리멤버)

Aitems: 쇼핑의 구석에 있습니다.

CLOVA Chatbot(part1)

챗봇 ocr aitems는 실습양이 많다.

이론을 최대한 스피드하게 진행한다.

 

AI 챗봇

사전에 정의한대로 잘 답변하는 것이다.

CS분야에서 사용, 고객 문의, 마케팅 등 사람이 하는 것을 대체한다.

최근 요청: 메일로 많은 문의 오는데, 그것도 상담원 대체 가능한가?

사람의 단순 반복적 업무를 챗봇으로 대체한다. 24시간 가능하고, 대화 기록 저장 등이 가능하다.

음성으로 대화 기록한다.

과거) 전화 ARS : 교환기 녹음을 해버리면 검색은 안된다.

언제 고객님이 잘못 주문하거나 욕한거를 확인하려면 그날의 통화를 다 들어줘야 한다. 지금도 콜센터 그런 경우 있지만, 챗봇 시스템 도입하면서 AI 기반, 클로바 노트 등으로 텍스트로 다 내린다.

그래도 고객이 말한것과 상담원 구분을 못했었다. 왜냐하면, 음질이 매우 안 좋았다. 2G폰, 유선전화 일부는 화자 구분이 어렵다. 256kbps?은 되어야 화자분리가능하다고 한다. 최근은 4G 가능하니 가능은 하다고 한다.

ex) 카드회사에는 쿠폰 언제까지인가요? → 과거 이런 말씀했는데 (바로 검색 가능) 이렇게 오해가 있었다.

  • 최근 트렌드
    • ARS 걸면 0번 누르는데 “상담원 연결” → 이제는 안 나오게 숨긴다.
    • 교환원 호출하기 어렵다. 현대카드보면 교환원 찾는거 거의 불가능하다. → 몇번을 누르면 교환원이 나온다고 안내한다. (교환원이 적다)

이제는 음성을 텍스트로 화자분리해서 내린다.

잘 안되는 이유는 챗봇 통계를 내어보면, 과거 챗봇써보면 알수 없는 질문으로 대답하기도 한다.

제가 도와드릴 수 없는 질문이에요. → 이제 낭만이 사라짐.(과거 챗봇은 잘 대답도 했다. 고향이 어딘지 등.)

이 당시 통계내어보면 날씨, 안부 질문이 많았다.

근데 회사에서는 알리고 싶은 내용만 챗봇에 넣는다. 실제로 사용자만 내어보는 문제 케이스만 다양하게 주는데 챗봇이 안 받아주니 외면한다.

그래서 챗봇은 만들거면 이런거 감안 → 풍성하게 해라.

  • 챗봇은 GPT와 다르다.
    • GPT는 할루시네이션 발생한다.
      • 최근 삼일절도 이슈가 있다.
      • 만주사건 등..
  • 실습해볼텐데 만든것만 답변한다.
    • 답변에 의미 부여하지 않는다. 다국어 지원, 개인화 등.

어르신 말동무 등 다 챗봇 사용.

집에 AI 스피커 하나 다 챗봇 엔진이다.

챗봇 엔진이 있고,

데이터 정제해서 학습시키는 게 있다.

정확한 의도파악에 AI 쓰인다. 문장 파악 등 → 고객 질문 잘 파악해야 그에맞게 답변 가능하다.

  • 챗봇 고려할 사항. 세일즈, 마케팅, 서포트

여론조사도 챗봇 돌린다.

Support / Skill / Assistant / Information & information Gathering Bot

네이버 톡톡 ) 시스템 만들텐데 직접 좀 넣어야 한다.

교촌 오리지널 등 큰 범주에서 챗봇이다.

질의 응답이 있지만 → 이제는 정확하게 고객이 목적 달성하게 만드는게 중요

ex) 맥날 키오스크

  • 챗봇 디자인 팁
    • 해결하고픈 문제 유형 나열
    • 챗봇 구축 목표 식별
      • Support / Skill / Assistant / Information & information Gathering Bot
    • 챗봇 유형 선택
      • 디자인으로 사용자에게 어떻게 정보 제공할까?
      • 요새는 저 챗봇 유형 섞어서 많이 씁니다. (메뉴/버튼, 규칙, 대화형)
    • 챗봇 시나리오 작성
      • 다 모르겠고, 재미있고 낭만적이면 된다.
  • 챗봇 사용 실패 사례: 잘인식하고 인터페이스 사용자 친화적
    • 사용자 수정 사항 인식 실패
    • 느린 사용자 응답 처리
    • 대화 스레드 간 이동 : 컨텍스트 가 이어져야 하는데 그렇지 않아서 문제가됨.
  • 챗봇 분류 : 규칙 기반, 기계학습 기반
    • 규칙: if/then 옛날
    • ML : 질의
  • 챗봇 기술의 핵심, 자연어 처리
  • CLOVA Chatbot 제작 프로세스
    • 챗봇을 제작하는 단계는 크게 챗봇 설계, 서비스 이용 신청, 도메인 생성, 대화 생성, 빌드, 테스트, 메신저 및 외부 서비스와 연동하는 단계를 거칩니다.

도메인

CLOVA chatbot 도메인을 만들어야 합니다.

빌드는 도메인 단위로 진행됩니다.

Call 이벤트 → 갑자기 AiCall 이거는 ai 콜센터입니다.

질문에 대한 답변을 만들어야 합니다.

  • 답변
    • 여러 조건을 만들 수 있다.
    • 답변은 약간의 프로그래밍 필요하다.
      • 질문은 하나의 질문이나 답변은 시나리오가 필요하다.
        • 어떻게 가져와서 보여줄지에 대해 확인해야 한다.
  • 멀티링크 답변도 가능함.
    • 여러 링크넣을 수도 있다.
  • INPUT :x 일반 대화_YES / INPUT: 예약 진행 / INPUT: 예약 취소

공통 메시지: 뭔가 말할 수 있게 넣어주는 것이다.

  • 이제 프로그래밍 영역
  • CLOVA Chatbot 주요 기능 / 엔티티
    • 챗봇이 고정 값에 대한 답변이 아니라 변수로서 답을 가져와서 만들 수 있게 한다.
    • 도메인 엔티티: 내 도메인에서 쓸 다양한 범위 지정
    • 시스템 엔티티: 네클에서 기본 제공하는 엔티티
  • 태스크
    • 수행할 내용을 태스크라 한다.
    • 물어봐야할 내용을 정의하는게 태스크이다.
    • 태스크 동작 방식
  • 태스크 + 엔티티
    • 불고기, 페퍼, 치즈를 엔티티로 지정한다.
    • 태스크는 불고기 피자 선택시 음료 선택 → 수량 선택
    • 이런건 시나리오 대로 태스크를 실행하는 것이다.
    • 콜라 선택 후 또다른 태스크인 수량 선택
    • 엔티티없이 태스크로만 짤 수도 있지만 제시하는 범위를 엔티티로 제한해서 → 사용자 제시하는게 좋겠죠?

 


3/6 교육 2교시

    • 폼에 변수명으로 정의한다.
    • 메일 주소 입력하면 폼으로 들어간다.
    • 폼은 응답하는 데이터 넣고자할 때 쓰는게 폼이다.
    • 태스크와 폼으로 시나리오 만든다.
  • 챗봇 빌드 및 테스트
    • 텍스트 위주로 아니고 객관식 위주로 설정됨.
    • 대화 질의 응답은 만들면 빌드해야한다.
    • 빌드해서 실제 나의 knowledge, 시나리오 학습시킨다.
    • 빌드 후 테스트하도록 우측의 테스트 창 만들어 진행 가능하다.
  • 통계 관리
    • 어떤 답변 많이 받아갔는지 확인한다.
    • 답변 못하면 질문 다시 해서 매니지먼트 확인해볼 수 있다.

실습) 텍스트 기반 대화 시나리오 생성

체크까지 해야 생성가능합니다.

도메인 코드는 유니크해야합니다. 그래야 체크해서 문제가 발생하지 않습니다.

한국어, 스탠다드, 저장하지 않음.

빌더 실행하기 누른다.

ai 서비스는 빌더를 통해 만들 수 있다.

훌륭한 빌트인 템플릿을 미리 만들어둔게 있다. 이걸 쓰면 좀 더 풍성한 챗봇 가능.

다시 챗봇 설정 > 빌트인 템플릿 > 소개 적용

다시 대화목록 들어가면 잘 적용되어있다고 한다.

빌드 해줍니다. 빌드가 끝나면 진행 가능합니다.

이번에는 피자 종류 대화 만든다.

이번에는 이미지 링크를 넣습니다. 이걸로 다른 이름으로 저장하시고,

!https://kr.object.ncloudstorage.com/피자파일경로

이미지 등록합니다.

추가버튼 누르고, 이번에는 치즈 피자도 추가합니다. 버튼 추가하면 됩니다.

답변 등록하면 이렇게 피자 종류 두개를 보여줄 것입니다.

 

다시 대화목록 > 대화 생성 > 바로 폼으로 들어갑니다.

  • 피자 선택 입력 > 답변에서

이제 대화정보 > 고급설정 들어갑니다.

대화종류로 가야합니다. 일반대화 > 태스크로 바꿉니다.

그러면 태스크가 생깁니다.

피자종류, 음료수로 슬롯을 채워줍니다.

최종 답변에는 폼을 넣어주면 됩니다.

  • 액션 메소드로 갑니다. 생성
  • 다시 폼으로 돌아가서 수정합니다.
  • 폼 수정 후 대화보델 빌드를 합니다.

재밌게도 예를 누르고, 아니오를 다시 눌러보면 만료되어 답변할 수 없다는 말을 한다. 적절한 행동이다.

 


3/6 교육 3교시(오후)

우측 하단 테스트로 바로 확인가능

챗봇 만들기

 

 

이 챗봇은 페이스북, 톡톡, 라인 등과도 연동이 됩니다.

 

주요 기능: 네이버 서비스와 연동도 가능합니다.

url 기능으로 얼마든지 연동 가능합니다.

만약에 값이 계속 바뀐다고 하면 외부에서도 가져와야 합니다. 그때 사용하는 게 액션메소드입니다.

액션메소드를 통해 API 실행해서 변수를 넣어 보는 것이다.

 

이거 보면 환율조회하면 환율 사이트가서 가져올 수도 있고, 여러 외부사이트 정보 가져오는게 액션 메소드가 합니다.

 

서버리스 서비스 Cloud Functions 입니다. 람다 같은 겁니다.

챗봇 주요 기능

어디에다가 붙입니다. 제가 만든 챗봇에 질문을 던진다. 질의응답을 API로 한다.

어제 만든 post, get 이용해서 간단하게나마 postman으로 해봤다.

커스텀 API 만든다 → api 키, url 생성된다. → 해당 api 기반 답변함.

연동하시면 기본적으로 세가지 정보가 필요하다. url, api key, api secret

챗봇의 경우 ID PW를 바로 만들어주지 않음 → 결국 API GW라는 것이 이를 대신해줍니다. API GW 상품이 있습니다.

api gw인데 웹페이지 연동해볼 수 있습니다.

 

자 연동해봅시다!

 

서비스 배포 누릅니다.

그 전에 챗봇 설정 > 메신저 연동 > Custom 연동버튼 눌러서 활성화합니다.

 

자동 연동을 누르고, url, secret key 생성 후 복사해서 저장해두고, 연동해줍니다.

 

이제 어제만든 서버에 추가 만든다.

 

자 이제 ACG가서 5000번(챗봇 포트) 추가하라. (전체허용 기준) 그리고 적용합니다.

 

실습을 위해 flask를 이용한 것입니다. venv라는 환경으로 이동시킵니다.

 

채팅은 보통 Java를 많이 이용합니다.

 

python3 -V #이전 실습에서 python,pip 는 이미 설치되어 있음
apt install python3-venv # python3-venv 패키지에서 제공하는 venv 모듈을 사용
mkdir flask_app && cd flask_app # Flask(플라스크) 응용 프로그램에 대한 새 디렉터리를 만들고 해당 디렉터리로 전환
python3 -m venv venv # 가상 환경을 생성 후 venv 라는 디렉토리 생성
source venv/bin/activate # 가상 환경 활성화
pip3 install flask #플라스크 설치
flask –-version #플라스크 버전 확인
python3 -m pip install requests #requests 모듈 설치

 

아래와 같이 코드를 작성하고, 일부 ep_path : APIGW Invoke URL 기입, secret_key : Secret Key 기입합니다. 챗봇에 나온거 넣습니다.

from flask import Flask, request, render_template

... 생략

 

(venv) root@ai-001:~/flask_app/venv# mkdir templates
(venv) root@ai-001:~/flask_app/venv# cd templates
(venv) root@ai-001:~/flask_app/venv# vi chatbot.html

 

실행하면 app.py로 합니다.

 


3/6 4교시

CLOVA OCR

 

글자가 어떤 종류인지도 판별해서 분류한다.

 

OCR 프로세스 확인합니다. 이미지 가져오고, 이미지에서 어떤 템플릿 확인해서 보정을 합니다.

템플릿 정의된 영역에 대해 데이터 읽어옵니다.

마지막으로 데이터 분류 및 추출합니다.

 

중소기업 확인서가 있습니다.

파일 크기: 20MB 이하 ➢ 파일 형식: jpg, png, pdf, tiff ➢ 파일 해상도: A4 150dpi 이상

  1. 템플릿을 만들어주셔야 한다. 영역에 마킹해야한다.

 

템플릿 OCR 베이직 / 프리미엄이 있다.

프리미엄은 베이직에 비해 다른 점이 있다. 베이직은 기본적으로 고정 폼에 국한된다면, 프리미엄은 더 자유도 높게 가져간다. 멀티박스 / 체크박스 / 필드 유형을 프리미엄이 제공한다. (베이직은 없다)

  • 멀티박스/체크박스: 체크 여부를 판독한다.
  1. Document OCR 은 영수증, 신분증, 명함 등 개인 정보나 민감 정보가 포함되어 있을 수 있기 때문에 사전 신청 및 승인 절차 진행 후 제공

영화리뷰 > 영수증 방문자 리뷰를 해야한다. 네이버의 경우 그렇습니다. 다음은 그런게 없다? 그래서 네이버가 진짜로 갔다 온 사람만이 리뷰하니 좀 더 신뢰높일 수 있습니다.

영수증 형태를 뽑아냅니다.

template OCR도 나름의 보안을 적용한다. 사전 승인 및 절차

 

신분증 진위여부 확인에 쓰는게 이 eKYC 입니다. 아주 좋죠?

CLOVA eKYC 는 CLOVA OCR 의 Document OCR 을 통해 신분증/사업자등록증의 Feature 만 추출하여 제 3 인증기관을 통해 진위를 조회하는 서비스입니다

 

API 기반 하려면 api 키 반드시 받으셔야 한다.

이미지 많으면? 이건 Batch 잡으로 돌린다. Batch OCR이라고 합니다. 이미지 일괄 처리합니다.

OCR 서비스는 멀티미디어 인텐트를 사용합니다. Chatbot 서비스와 연동할 수 있습니다.

 

OCR + CSR + Cloud functions → Cloud Search로 비슷한 작업 가능하다.

딱 촬영하면 이미지 읽어들이고 → 클펑으로 보내고 → 예) 클 서치로 보낸다.

교보문고 사진 찍으면 그 정보를 클펑을 통해 클 서치로 책에 대한 정보를 가져올 수 있다.

책 찍고 관련 정보를 검색해오거나 연동이 가능합니다. 확장이 매우 자유자재로 가능하네요. Chatbot + RPA, Bigdata platform, Cloud Function+SENS,papago,CPV

실습 샘플 다운로드 후 압축 해제 (1)

 

샘플과 파이썬 코드를 다운로드합니다.

두개 파일을 받는다. 압축 해제한다.

 

ocr 신청 후 도메인 > 일반 템플릿이 베이직입니다.

 

 

 

일반 > 생성

API GW 연동 합니다.

 

 

이거 업로드합니다.

 

판독결과 결합해줍니다.(휴대전화부분, 4~6까지)

 

관리로 가서 베타 배포합니다. 아래는 테스트가서 넣고 업로드.

 

결과보면, 판독 영역에서 잘 판독하는 것을 확인할 수 있습니다.

 

잘 인식하면 → 배포 관리 → 서비스 배포까지 하시면 됩니다.

서비스로 판독해주면, 동일하게 업로드하면 됩니다.(템플릿 판독)

APPlication Service > API GW로 이동합니다.

사용 신청

그다음 object stroage에서 버킷 생성합니다.

 

이렇게 버킷이 생성됩니다.

그러면 해당 버킷가서, 업로드합니다.

 

권한관리 공개로 설정합니다.

다시 ocr로 이동해서 API GW 연동 누릅니다. 생성합니다. 도메인에서 시크릿키, 주소값 복사해둡니다.

  • 포스트맨
{
"version": "V2",
"requestId": "ocr-edu-text",
"timestamp": 0,
"lang": "ko",
"images": [{ "format": "png", "url": "$오브젝트 스토리지 이미지 URL", "name": "text ocr test"}]
}

 

개별파일 권한을 풀어줘야해요. 버킷만 풀면 안됩니다.

 


3/6 5교시

 

POSTMAN

 

{
"version": "V2",
"requestId": "ocr-edu-template",
"timestamp": 0,
"lang": "ko",
"images": [{ "format": "png", "url": "<https://kr.object.ncloudstorage.com/파일경로>", "name":
"template ocr test", "templateIds": [28491] }]
}

     "combineResult": {
                "name": "휴대전화1 휴대전화2 휴대전화3",
                "text": "010 1234 4567"
            },
...
 },
                    "inferText": "750104",
                    "inferConfidence": 0.99999815,
                    "type": "MULTI_BOX"

잘 들어가있는거 확인할 수 있답니다. 이 데이터를 추출해서 → 데이터베이스에 넣어주는 어플리케이션만 만들어주시면 됩니다.

이미지 가져가면, 이미지에서 OCR로 보내고 → 응답값 받아서 데이터베이스에 넣어주면 끝납니다.

BATCH OCR 해보기

 

배치 생성

 

파일형식은 JSON으로 하십니다. 인식파일 저장경로, 인식결과 파일경로 잡아줍니다.

다 오브젝트 스토리지 경로입니다.

 

실제로 배치 폴더 올리면 이렇게 나와야합니다.

결과는 여기에 나오게 됩니다.

 

원본은 소스에 폴더 안에 있습니다. 나머지는 다른 위에 있는 버킷(ocr-edu-graph) 으로 들어가겠습니다.

 

Aitems

30대 남성이 이거 많이 사더라. 등으로 조합해서 사용할 수 있다. 나이, 지역, 이름 등 조합해서 추천할지 상품에 대한 특성을 보고 추천할 수 있다. 건담 좋아하니 건담 추천할지 이렇게 선택 가능하다.

 

구성요소 몇가지 있습니다.

  1. Object Storage: 직접 DB 연동이 안되어 (로드맵에는 있음) 여기 넣어주셔야 한다.
  2. Service: 도메인 단위
  3. 스키마: 데이터베이스에서 필요한 정보만 가져오는 것입니다. AItems 넣기위해서는 DB 형태처럼 넣어주셔야합니다. 스키마 넣어주셔야해요.
  4. 데이터셋: 사용자의 데이터(User, Item, Interaction으로 구성합니다.)

 

column은 여러분의 정보에 해당합니다. 이름, 나이, 사는곳, 가입일 등..

이런걸 나이 + 성별 등 조합해서 추천시킬수있습니다.

User 정보는 사용자가 직접 설계해야합니다. 이름+생년월일 +성별 등 사용자 정의

아이템도 마찬가지, 사용자가 직접 정의한다.

스키마 구성 요소

  • 아쉽게도 Time 정보는 없어요. 날짜는 Date, DateTime안되고, 오직 long으로 연산하여 시간은 Unix 타임 변환저장합니다.
  • 즉 18632034.. 이렇게 시간이 나와서 어플에서 변환해야합니다. 그냥하면 연산이 안되요. 연산이 어렵지 않아. 함수하나로 충분.
  • 그룹핑으로 범주형 필드 지정 가능해요.

 

누가 언제샀는지 정보가 있어야 합니다.

예약키워드도 있어요. 이거는 추가가능합니다. item에는 Category, Creattion_timestamp 넣는다. 근데 String, long만 넣는다. int, boolean 이런건 못넣어요. 지정된 것만 넣습니다.

필수 필드도 이름 수정 안됩니다. USER_ID이면 이것만 되어요.

 

가급적이면 Object Storage 넣어주시길 바랍니다.

데이터셋 구성시 필수 스키마 필드 동일하게 필드명 부여 구성합니다.

데이터셋은 csv 파일입니다.

USER_NAME 등으로 넣습니다. 그러면 DB에 필드명 들어가는데 그 필드명을 넣으면 안됩니다. DB 필드명과 스키마 필드명 같게 하거나, 다르면 맞춰줘야합니다. 생각보다 Aitems는 AI 스럽지 않습니다. 꼭 맞춰주셔야합니다.

문제는 에러가 나면, 어디서 에러 나는지 안 알려준다.

반드시, 생성시 첫 행에는 필드명이 있어야합니다. 필드명은 완벽히 동일해야하고 필드명 구분은 , (콤마) 구분합니다. 절대 그 사이에 공백이 있으면 안됩니다.

데이터셋 생성하면 스키마는 수정할 수 없습니다. alter라는 개념이 없다. → 그냥 새로 만들어야 합니다.

 

추천 영화사이트가 있어요. 개인화 추천이있습니다.

연관 항목은 조합을 하는데, 특정 필드와 나머지 필드 조합합니다. 만들 때는 그룹핑을 합니다. 젠더와 나이, 지역 등 조합해서 연관 이력으로 추천

인기 항목 추천: 순위별로 주는데, 다만 모두에게 항상 같은 값을 추천하지는 않습니다.

HPO: 학습 강도 높인다. 좀더 많이 학습 시킨다.

aitems 테스트는 반드시 API를 사용하는 것입니다.

 

이 API에 들어가는게 이 URL입니다. 자세히보면 몇가지 변수가 있습니다.

  1. 서비스 ID : 위의 기본정보 아이디부분
  2. TrainType : 개인화 추천, 연관 항목 추천, 인기 항목 추천 → 30개가 날아옵니다.

응답 자체는 매우 심플합니다.

 

쇼핑몰 만들고 데이터뽑아서, Aitems 구성해서 학습시킵니다.

대부분 배치로 다 돌립니다.

 

MYSQL 들어갑니다.

 

create datase aishop;

exit;

간단합니다.

wget 경로

 

이제 벌크데이터 밀어넣기

less aishop.sql # check
mysql aishop < aishop.sql
MariaDB [(none)]> use aishop;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [aishop]> show tables;
+------------------+
| Tables_in_aishop |
+------------------+
| shop_interaction |
| shop_item        |
| shop_user        |
+------------------+

내부를 확인해볼까요?

 

 

select count(*) from shop_user;
select count(*) from shop_item;
select count(*) from shop_interaction;
MariaDB [aishop]> select count(*) from shop_user;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.001 sec)

MariaDB [aishop]> select count(*) from shop_item;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.001 sec)

MariaDB [aishop]> select count(*) from shop_interaction;
+----------+
| count(*) |
+----------+
|     3000 |
+----------+
1 row in set (0.002 sec)

 

구조를 봅시다.

MariaDB [aishop]> desc shop_user;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| user_id   | varchar(10) | NO   | PRI | NULL    |       |
| user_name | varchar(45) | NO   |     | NULL    |       |
| password  | varchar(45) | NO   |     | NULL    |       |
| join      | date        | NO   |     | NULL    |       |
| birth     | date        | NO   |     | NULL    |       |
| address   | varchar(20) | NO   |     | NULL    |       |
| gen       | varchar(2)  | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.003 sec)

 

전체도 보면 아래와 같습니다. 시간 컬럼들을 보면, 이렇게만 나오면 편한데, 나중에는 unix 타임으로 바꿔야합니다.(join, birth)

MariaDB [aishop]> select * from shop_user limit 5;
+----------+-----------+------------+------------+------------+---------+-----+
| user_id  | user_name | password   | join       | birth      | address | gen |
+----------+-----------+------------+------------+------------+---------+-----+
| abc00001 | 민률경    | ncloud123! | 2010-01-01 | 1984-08-04 | GG      | F   |
| abc00002 | 양소휘    | ncloud123! | 2010-01-02 | 1973-12-03 | GG      | M   |
| abc00003 | 주우호    | ncloud123! | 2010-01-03 | 1979-09-21 | DJ      | F   |
| abc00004 | 탁솔진    | ncloud123! | 2010-01-04 | 1962-03-21 | GJ      | M   |
| abc00005 | 탁소승    | ncloud123! | 2010-01-05 | 1972-01-31 | SJ      | F   |
+----------+-----------+------------+------------+------------+---------+-----+
5 rows in set (0.000 sec)
MariaDB [aishop]> desc shop_interaction;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| user_id    | varchar(10) | NO   |     | NULL    |       |
| item_id    | varchar(10) | NO   |     | NULL    |       |
| time_stamp | varchar(20) | NO   |     | NULL    |       |
| preference | varchar(10) | NO   |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.001 sec)

개인화 추천해보겠습니다.

 

3/6 마지막

 

서비스 만들고 ai_lab으로 합니다.

 

유저도 만듭니다. lab_user 스키마 정보에 이렇게 넣습니다.

 

이제 아이템 스키마 만듭니다. lab_item

 

상호작용도 만듭니다.

 

이게 수정은 없고 삭제만 있습니다. 새로 만들어야할수도 있어요.

아래 세개 데이터를 뽑아내봅니다.

 

MariaDB [aishop]> select user_id, user_name, birth, address, gen from shop_user INTO OUTFILE '/tmp/lab_user.csv'

 

여기서 그냥 csv라고 해서 csv로 변환되지는 않아요. terminated by 등을 통해 차후 변환합니다.

 

 select user_id, user_name, birth, address, gen from shop_user INTO OUTFILE '/tmp/lab_user.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n';

 

세개의 테이블에 대해 적용합니다.

 

 

MariaDB [aishop]> select user_id, user_name, birth, address, gen from shop_user INTO OUTFILE '/tmp/lab_user.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n';
Query OK, 1000 rows affected (0.001 sec)

MariaDB [aishop]> select * from shop_item INTO OUTFILE '/tmp/lab_user.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n';
ERROR 1086 (HY000): File '/tmp/lab_user.csv' already exists
MariaDB [aishop]> select * from shop_item INTO OUTFILE '/tmp/lab_item.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n';
Query OK, 1000 rows affected (0.001 sec)

MariaDB [aishop]> select * from shop_interaction INTO OUTFILE '/tmp/lab_interaction.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\n';
Query OK, 3000 rows affected (0.003 sec)

 

내부 파일 확인합니다.

 

헤더가 없습니다. 넣어줘야합니다.

로컬로 가져옵니다.

scp "root@공인아이피:/tmp/lab*" "로컬경로"

 

이제 데이터셋에 다 추가합니다.

 

이 대기중이 사용가능으로 바껴야 합니다. 기다립시다. 올리셨으면 조금 기다려야해요.

 

다음은 학습 관리

서비스 > 데이터셋 관리를 누릅니다. > 각 데이터를 선택해서 넣습니다. 대기중이면 위에처럼 나와서 쓸 수가 없으니 조금 기다려야해요.

 

group_column에 category, GEN, ADDRESS 추가합니다. 학습을 요청해야합니다.

 

몇명을 뽑아서 새로운 인원에 대한 추천을 여러명으로 하려면 API를 사용하면 됩니다. 무조건 API라네요?

 

챗봇, OCR은 콘솔에서 가져왔죠?

 

Aitems는 아쉽게도 인증키관리에서만 할 수 있습니다. 거기에 Access Key, Secret Key 등의 값을 가져옵니다.

 

가서 보면, Service(ID)이런 식으로 되어있고, 저 ID가 서비스 아이디입니다. 이것을 넣습니다.

 

abc00002 유저 아이디를 넣습니다.

##ID를 확인합니다.

## 쿼리를 통해 userID를 뽑아 넣고 -> 나온 item ID?로 실제 어떤 영화 추천했는지 확인해볼 수 있습니다.

 

 

다행히 결과가 잘 나와요. 저 values에 해당하는 값을 찾아서 보면 된다.

 

13376,카르멘,2015,drama,5.93

 

찾아보니 카르멘이라는 영화다.

 

후기

AI를 배우기보다, 이제 AI 기반 서비스를 잘 활용할 수 있다. OCR, 챗봇, Aitems를 배웠고 실생활에 적용해보고 싶다. 서비스로 만드는 수준으로 성장해보자.