저번에는 단순히 머신러닝 사이트(https://machinelearningforkids.co.uk/)를 이용해보는 것에서 그쳤다면, 이번에는 그것을 웹에 나타내는 응용편을 제작할 것이다. 저번 편에서 이야기 했던대로, 이 머신러닝 모델을 반출(export)하는데에는 스크래치 등 여러가지 방식이 있다고 보이나, 일단 제목을 파이썬을 이용한 가상서버라고 서술했으므로 파이썬부터 알아보자.
1. 사이트에서 제공하는 코드를 이용
일단 사이트에서 제공하는 정보를 살펴보자. (저번 머신러닝 모델을 유지하지 못헤 다시 만들었다.)
$ python yourscript.py result: 'good_words' with 81% confidence
API 키는 위와 같이 주어졌다. 나는 일회용 모델이라 공개했지만, 실제로 공개하는 것은 위험하다. (보안 및 그에 따른 비용에 대한 측면)
import requests
# This function will pass your text to the machine learning model
# and return the top result with the highest confidence
def classify(text):
key = "0ffd8460-774b-11ef-bcfc-1d7d35bf12ac934a02c9-0777-4a5f-95f0-13c3dbe09a21"
url = "https://machinelearningforkids.co.uk/api/scratch/"+ key + "/classify"
response = requests.get(url, params={ "data" : text })
if response.ok:
responseData = response.json()
topMatch = responseData[0]
return topMatch
else:
response.raise_for_status()
# CHANGE THIS to something you want your machine learning model to classify
demo = classify("The text that you want to test")
label = demo["class_name"]
confidence = demo["confidence"]
# CHANGE THIS to do something different with the result
print ("result: '%s' with %d%% confidence" % (label, confidence))
또 제공하는 코드는 이와 같다. 일단 그대로 사용하지는 않을 것이다. 필요한 것만 사용해보자.
이 코드를 코랩의 첫번째 코드에 작성해보자. 이 코드에서는 모델 불러오기와 값 내보내기를 담당하는 함수가 있다.
본인의 API 키만 바꿔주면 된다. 그리고 실행시켜주자.
while True:
keysentence = input('단어나 문장을 입력해 주시면 좋은말인지 나쁜말인지 AI 판단해드립니다(q to quit)')
if keysentence == 'q':
break
else:
lvar, cvar = myfunc(f'{keysentence}')
print(f"Label: {lvar} / Conf:{cvar}")
이것은 두 번째로 작성할 코드다. 코드 설명을 하자면,
input 안에는 자신이 질문하기 원하는 텍스트를 입력해주면 되고, q(quit)를 누르면 함수가 종료되며, 그 대신 제시어를 입력하면 myfunc 함수에서 정의된대로 lvar 값과 cvar 값을 도출하고, 그것을 출력해주는 내용이 있는 코드이다.
while True:로 제시되어 있어 종료 조건이 없으므로 중간에 제시어를 q로 입력하지 않는 한, 종료되지 않는다.
앞서 적었던 첫번째 코드를 실행시킨 상태라면, 이 두 번째 코드도 마저 실행시켜 주자.
입력하면 우리가 설계한 모델대로 대답을 해준다! 앞서 [result: 'good_words' with 81% confidence]라고 출력이 나온다고 언급했지만, 그것은 코드를 변형시키지 않고 그대로 사용했을 때 그런 형식으로 나오는 것이고, 내가 수정한 코드로 실행시키면 위와 같이 실행결과가 나오는 것을 알 수 있다.
이렇게 완성된 코드를 ipynb 파일로 다운 받아서 visual code에서 열어보자.
3. visual code로 옮겨보기
좌측 상단 file의 [open file] 버튼을 통해 파일을 열어보자.
경고 문구는 무시하고 계속 open해주자.
일단 코드 업로드는 완료했다.
Import "requests" could not be resolved from source PylancereportMissingModuleSource
ModuleNotFoundError: No module named 'requests'
만약 이 코드를 그대로 실행하게 된다면 둘 중에 어느 하나라도 오류가 뜨게 된다. 당황하지 말라! 오류 메세지에서 알 수 있듯, 그냥 모듈 설치가 되지 않았기에 생긴 오류이다. (나중에 설치한다.)
일단 코드 수정부터 좀 하자. (웹상에 나타내기 위한 형태로 변경)
import requests
import streamlit as st
def classify(text):
key = "6c0c2520-69bf-11ef-8862-7949966a810c8dc78687-1296-488d-b254-d58a6c787b83"
url = "https://machinelearningforkids.co.uk/api/scratch/"+ key + "/classify"
response = requests.get(url, params={ "data" : text })
if response.ok:
responseData = response.json()
topMatch = responseData[0]
return topMatch
else:
response.raise_for_status()
def myfunc(sentence):
demo = classify(f"{sentence}")
label = demo["class_name"]
confidence = demo["confidence"]
return label, confidence
st.title('Good and Bad words perception')