인기를 얻기 위해 채팅봇을 만들고 수행한다.

소개



최근, 커뮤니케이션의 대부분이 LINE 등의 채팅에 장면을 옮기고 있다.
인기를 얻기 위해서는 매력적인 문장을 칠 필요가 있는 현대 사회에서 주변 환경 등에서 연습의 장소가 한정되어 있어 갑자기 그 실전이 온다는 사람도 많을 것이다. 필자가 그렇다.
그런 현대를 사는 인류의 과제에 대해, 자신에게의 흥미도를 출력하는 챗봇을 준비해 거기에 끊임없이 메시지를 던지는 수행을 실시해, 메시지 스킬의 향상을 모방하는 어프로치를 취한다.

아래 그림은 필자가 수행하는 수행의 일부입니다.


상대의 흥미도는 (전향·흥미 없음·불명)의 3단계로 출력된다.
상대방의 메시지 자체에는 의미가 없다. 필자가 말한 적이 있는 것을 준비했다.

상대를 긍정적으로 시키면 승리이다.
여기에서 수행했다고 해서 프로덕션은 미래 영원히 오지 않는다고 생각되지만, 본 기사에서는 챗봇의 작성 방법을 설명해, 인류의 메세지 스킬을 올리는 것을 목표로 한다.


[2020/2/23 추가] LINE bot 만들었습니다.

만들기



막상 만들려고 해도 이성이 원래 가까이 있지 않다. 즉 흥미도를 측정할 수 없다.
그런 가운데, 필자는 자연언어 처리 플랫폼인 COTOHA API의 레퍼런스의 유저 속성 추정에, 기혼/미혼되는 것을 발굴했다.
낯선 자들에게 기혼자는 보통 성취 할 수없는 기적을 일으켰습니다. 즉 하나님입니다.
필자는 생각했다. 기계 학습에 의한 추정에 의해, 문장이 기혼이라고 추정되는 것은, 즉 인기있는 흥미를 끌게 하는 메시지가 아닐까.
자연 언어 처리 및 음성 처리 API 플랫폼 COTOHA API

이런 식으로 COTOHA API를 사용하여 자신의 메시지에 (전향, 관심 없음, 알 수 없음)를 출력하는 봇을 작성한다.

COTOHA API에 던지기



위의 COTOHA API 링크에서 먼저 Developers에 등록합니다.
무료 프레임은 각 1,000 콜/일이다. (2020/2/13 현재)
이것만 있으면 아마 쉬지 않고 수행할 수 있을 것이다.

최소한 필요한 것은
1. 액세스 토큰 얻기
2. 입력된 문자열을 사용자 속성 추정에 던진다

이번에는 커스터마이즈의 여지로서 추정 결과가 "미혼"또는 결과가 돌아오지 않았을 경우, 본 적이 있는 메시지를 랜덤으로 돌려준다.
또한 '기혼' 만난 경우 입력된 문자열을 '문 유형 추정'에 던져 발화 행위 종별에 따른 비교적 호의적인 메시지를 반환하도록 하고 있다.
이로 인해 이야기가 연결되어있는 것처럼 보이고 매운 수련도 조금은 가벼워질 것이다.

COTOHA API에 던지는 코드

파이썬
import random
import requests
import json

BASE_URL = "https://api.ce-cotoha.com/api/dev/nlp/"
CLIENT_ID = "******"
CLIENT_SECRET = "******"

def auth():
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": CLIENT_ID,
        "clientSecret": CLIENT_SECRET
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    res = r.json()

    return res["access_token"]  # ["expires_in"]: 残り時間

def sequence_anlysis(sentence):
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "sentence": sentence,
        "type": "default"
    }
    r = requests.post(BASE_URL + "v1/sentence_type",
                      headers=headers,
                      data=json.dumps(data))
    res_type = r.json()
    if not res_type["status"] == 0:
        print('type API Error status', res_type["status"])
        exit(1)

    data = {
        "document": sentence,
        "type": "kuzure",  # ツイートなどのくずれモード
        "do_segment": False
    }
    r = requests.post(BASE_URL + "beta/user_attribute",
                        headers=headers,
                        data=json.dumps(data))

    res_attr = r.json()
    if not res_attr["status"] == 0:
        print('attr API Error status', res_attr["status"])
        exit(1)

    if not "civilstatus" in res_attr["result"].keys():
        civilstatus = "不明"
    else:
        civilstatus = res_attr["result"]["civilstatus"]
    return res_type["result"]["modality"], res_type["result"]["dialog_act"], civilstatus



채팅봇 준비



파이썬으로 콘솔에서 작동하는 채팅 장소를 준비합니다.
LINE Bot 등을 준비하는 것이 귀찮았기 때문에, 이번은 표준 입력·출력에 의한 실장을 실시했다.

COTOHA API에 던지는 코드

파이썬
print('quitで終了')
while True:
    s = input('you: ')
    if s == "":
        continue
    elif s == 'quit':
        break
        exit(0)
    else:
        # 入力を解析
        modality, dialog_act, civilstatus = sequence_anlysis(s)
        # 返答を作成
        output = make_sentence(dialog_act, civilstatus)
        if civilstatus == "既婚":
            print('bot (前向き):    ', output)
        elif civilstatus == "未婚":
            print('bot (興味なし):  ', output)
        else:
            print('bot (不明):      ', output)



요약



COTOHA API를 이용한 챗봇으로 모테를 위한 수련의 장을 만들었다.
이것으로 전세계 연애난민이 다소 살아갈 것을 간절히 바란다.

미래의 도전
* 이번에는 개별 메시지에 대해 흥미도를 독립적으로 출력하고 있다. 앞으로는 시계열에 대응하고 싶다.
* 이번은 표준 입력·출력에 의한 실장을 하고 있지만, LINE Bot등에서 수행하고 싶은 열심한 수련자는 꼭 공개해 주었으면 한다.
* 대답은 인기없는 남학생이 독단과 소량의 과거 경험에서 준비하고있다. 꼭, 채팅 교사에게 개량해 주었으면 한다.

좋은 웹페이지 즐겨찾기