안녕하세요. 9기 HuggingFace 파트너 정정민입니다.
이번 포스팅에서는
HuggingFace에서 연구 결과를 둘러보는 과정과
마음에 드는 연구 결과물을 API로 호출하는 방법을
확인해보겠습니다!
이전 포스팅에서는
HuggingFace의 간단한 설명과,
HuggingFace의 웹 데모를 사용하는 방법(Spaces)을 이야기 했습니다.
혹시, 놓치셨다면 아래 링크로 확인해보세요 ^^
https://www.gpters.org/c/ai-developers/9-huggingface
HuggingFace Models
HuggingFace의 Models 페이지는 연구 결과들을 모아둔 곳입니다.
다양한 연구 결과물이 존재하고
이를 한눈에 볼 수 있도록 좌측 패널에
다루는 문제(Task)에 따른 분류를 해두었습니다.
이종 데이터간 문제를 푸는 Multimodal
이미지 처리 Computer Vision
자연어 처리 Natural Language Processing
등등
이 존재하죠!
그리고 특정 테스크에 해당하는 하위 테스크가 존재합니다.
이번 포스팅에서는 자연어 처리의 문장 분류 문제를 다뤄볼까합니다.
Natural Language Process의 Text Classification 을 클릭해봅니다.
그러면, 해당 문제가 하이라이트 되고 (파란색 화살표)
그 문제에 속하는 다양한 연구 결과물이 메인 공간에 표시됩니다!
이들 중 적절한 연구 결과물을 클릭해서 들어갈 수 있어요.
저는 Twitter 데이터를 이용한 감성 분석 (sentiment Analysis) 모델을 사용해보겠습니다! (핑크색 박스)
감정 분석 : 글에 담긴 저자의 감정 상태를 예측하는 문제 (긍정 / 부정 / 중립)
참고로, 보여지는 화면은 시간이 지남에 따라 바뀔겁니다.
따라서 이 포스트를 보고 따라오시는 분들은 아래 페이지의 링크로 접근해주세요.
https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment-latest
본인이 문제에 맞는 적절한 연구결과를 찾기위해서는
상단의 Filter by name에 적절한 키워드를 입력하시고
우측의 sort를 조절하면 됩니다.
제목만 보고 적절한 연구 결과물을 유추할 수 있지만
그것이 정말 내 문제를 풀 수 있는지는
해당 연구 결과물 페이지에 들어가서 내용을 읽어봐야겠죠 ^^??
API 사용 가능성 확인
모든 연구 결과물이 API를 제공하지는 않습니다.
이를 확인하기 위해서는 연구 결과 메인 페이지에서
우측 Deploy 버튼을 눌러 (파란 화살표)
Inference API 라는 버튼이 있는것을 확인해야 합니다!! (핑크 화살표)
만약 API를 제공하지 않는다면
Deploy 버튼이 없거나, Inference API라는 부분이 존재하지 않습니다. (아래 참고)
API 호출 준비하기 (HuggingFace API key 확인, 코드 확인)
API를 사용하고자 한다면
HuggingFace에 가입하고 로그인이 되어있어야합니다.
그렇다면 API를 사용할 수 있는 key를 발급받을 수 있습니다.
가장 우측 상단의 본인 프로필을 눌러서
Settings에 들어갑니다.
Access Tokens (파란 박스) > New token (핑크 박스) 클릭
Name에 적절한 값을 넣어주시고,
Role은 read로 선택해서
생성하시면 됩니다.
다 왔습니다.
그러면 아래와 같이 Access Token(=API key)이 발급되고 API 사용 준비가 된겁니다!
당연하겠지만, 이건 유출하시면 안되겠죠?? ^^;;
복사 버튼를 누르면 Key가 복사되고
여러 API 활용 과정에서 사용됩니다.
자, 다시 연구 페이지로 돌아갑니다.
그리고 Deploy > Inference API 버튼을 눌러봅니다.
그러면, 파이썬, JS, curl 방식으로 사용하는 기본 코드가 나옵니다. (파란 화살표)
저는 파이썬이 익숙하니 파이썬 코드로 선택해서 코드를 복사합니다 (위 핑크 화살표)
그리고 사용하는 코드 작성 툴로 이동해서 붙여넣습니다.
Colab도 좋습니다!
import requests
API_URL = "https://api-inference.huggingface.co/models/cardiffnlp/twitter-roberta-base-sentiment-latest"
headers = {"Authorization": "Bearer 여기에_각자의_AccessToken이_들어갑니다!!"}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
output = query({
"inputs": "I like you. I love you",
})
위 코드를 간단히 설명하면
저희가 선택한 연구 결과물 AI 모델을 사용할 수 있는 사이트에 접근해서 (API_URL)
접근 가능한지 인증 코드를 넣어주고 (headers)
AI 모델에게 답변을 달라고 요청을 합니다 (response)
인터넷으로 요청해야하므로 인터넷 연결이 필요합니다!
요청하는 입력은 사용자가 정의하기 나름이며 (inputs)
위 코드에서는 "I like you. I love you" 입니다.
그 결과가 output에 저장
과 같은 과정으로 코드가 작성되어있네요.
API 사용하고 결과 보기
위 코드를 실행하고 결과를 받습니다.
(실행하는 중간에 패키지 임포트 에러가 난다면 설치해주시면 됩니다) → 이 부분도 포스팅으로 한번 적어야겠네요 ㅎㅎ;;
결과는 어떻게 생겼을까요??
print(output)
# 아래가 결과물입니다
[[{'label': 'positive', 'score': 0.9299361705780029}, {'label': 'neutral', 'score': 0.06471806764602661}, {'label': 'negative', 'score': 0.005345814861357212}]]
"I like you. I love you" 라는 문장에 담겨있는
작성자의 감정 상태는
약 93.0%로 긍정, 6.5%로 중립, 나머지 부정으로 나오네요.
그럴듯하죠?? ㅎㅎ
다른 문장도 넣어볼까요??
아래는 다른 문장의 예입니다!
"Every day is a new opportunity to make your dreams come true."
>> [[{'label': 'positive', 'score': 0.964508056640625}, {'label': 'neutral', 'score': 0.03190942481160164}, {'label': 'negative', 'score': 0.003582555102184415}]]
"Surround yourself with positivity and watch your world change for the better."
>> [[{'label': 'positive', 'score': 0.95218825340271}, {'label': 'neutral', 'score': 0.041956767439842224}, {'label': 'negative', 'score': 0.005855001974850893}]]
"Life is a beautiful journey, not a destination. Enjoy every step along the way!"
>> [[{'label': 'positive', 'score': 0.979350745677948}, {'label': 'neutral', 'score': 0.016645079478621483}, {'label': 'negative', 'score': 0.004004152491688728}]]
"Feeling overwhelmed by the never-ending challenges of life."
>> [[{'label': 'negative', 'score': 0.7571136951446533}, {'label': 'neutral', 'score': 0.2131040245294571}, {'label': 'positive', 'score': 0.029782233759760857}]]
"Some days it feels like nothing goes right no matter how hard I try."
>> [[{'label': 'negative', 'score': 0.8569837808609009}, {'label': 'neutral', 'score': 0.12543503940105438}, {'label': 'positive', 'score': 0.017581213265657425}]]
"Feeling stuck in a rut and unsure how to escape it."
>> [[{'label': 'negative', 'score': 0.800199031829834}, {'label': 'neutral', 'score': 0.1896999180316925}, {'label': 'positive', 'score': 0.010101045481860638}]]
위 3개 문장은 긍정을, 아래 3개는 부정 문장을 유도해서 넣어봤는데
나름 잘 하죠??
예측 결과는 제가 의도한 방향으로 나온 것 같네요 ^^
이번 포스팅에서는
코드 레벨로 HuggingFace를 사용하는 방법을 살펴봤습니다.
하지만, 정작 코드를 많이 작성하지는 않았죠?
그러면서도 연구 결과물을 사용할 수 있었어요.
Inference API를 제공한다면
위의 방식으로 어떤 모델도 사용할 수 있습니다.
이는 매우 강력한 HuggingFace의 장점이네요!!
위와 같은 작은 코드 스냅을
여러분들의 코드에 삽입해서
여러분들의 서비스에 AI를 Add-on 해보시길 바라겠습니다 ^^
질문이나 더 깊은 내용은 편하게 말씀주세요.
감사합니다.
P.S. 궁금한 주제를 달아주세요. 다음 포스팅의 주제로 고민해보겠습니다 ^^;;
작성자 : 정정민
블로그 : 링크