오늘은 왠지 LLAMA가 눈길을 끌어서 ...

 

llama-3.2-Korean-Bllossom-3B

 

친절하게 예제 코드도 제시해주고 있다.

 

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = 'Bllossom/llama-3.2-Korean-Bllossom-3B'

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
instruction = "철수가 20개의 연필을 가지고 있었는데 영희가 절반을 가져가고 민수가 남은 5개를 가져갔으면 철수에게 남은 연필의 갯수는 몇개인가요?"

messages = [
    {"role": "user", "content": f"{instruction}"}
    ]

input_ids = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    return_tensors="pt"
).to(model.device)

terminators = [
    tokenizer.convert_tokens_to_ids("<|end_of_text|>"),
    tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = model.generate(
    input_ids,
    max_new_tokens=1024,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9
)

print(tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True))

 

3B 모델에서 과연 저 문제를 풀 수 있을까?

 

구글 코랩에서 위 코드를 실행해보자. (나는 GPU도 없는 가난한 머글이니까 ㅠㅠ)

Exception

 

어?! 시키는 그대로 했는데, 왜?!

 

구글 코랩에서 기본 버전을 업그레이드 해주면 발생하지 않을테지만,

현재는 transformers, tokenizers 버전이 낮아서 발생하는 것으로 보인다.

 

!pip install --upgrade transformers tokenizers

pip install

 

설치가 끝나면 세션 재시작을 요구한다.

하면 된다.

 

그리고 나서 실행하면 시간이 좀 걸리지만... 잘 된다.

철수가 20개의 연필을 가지고 있었고 영희가 절반을 가져가면, 영희가 가져간 연필은 20 / 2 = 10개입니다.

철수가 남은 연필은 20 - 10 = 10개입니다. 민수가 5개를 가져가면, 철수가 남은 연필은 10 - 5 = 5개가 됩니다.

따라서 철수가 남은 연필의 갯수는 5개입니다.

 

그리고, 문제도 잘 푼다!!!

 

반응형

'AI_ML > LLM' 카테고리의 다른 글

HuggingFace - Learn - NLP Course #3  (3) 2024.11.11
HuggingFace - Learn - NLP Course #2  (0) 2024.11.10
HuggingFace - Learn - NLP Course  (1) 2024.11.09
Gemini 잔소리꾼 만들기  (1) 2024.11.08
HuggingFace (허깅페이스 소개)  (0) 2024.06.24

이왕 살펴보는 김에 하나 더 해보려고 한다.

Zero-shot classification

 

원하는 결과가 나오지 않을까봐 살짝 무섭기도 한데.... ^^

 

뉴스 제목을 보고 어떤 카테고리인지 맞춰보는 것을 한 번 해보려고 한다.

 

 

네이버 뉴스 데이터를 이용해보자.

naver

 

정치, 경제, 사회 등의 카테고리 별로 현재 상단에 있는 뉴스 제목들을 가지고 와봤다.

from transformers import pipeline

classifier = pipeline("zero-shot-classification")

labels = ["정치", "경제", "사회", "생활/문화", "IT/과학", "세계"]

articles = [
    "尹 대통령 선물받은 투르크 국견 해피·조이, 관저 떠나 서울대공원으로",
    "트럼프, 인플레 우려에 관세폭탄 못할것",
    "똑바로 살겠다…반성문 3번 쓴 음주뺑소니 김호중, 검찰은 징역 3년6개월",
    "천재화가 천경자 특별전 개막..미공개 작품도 선 보여",
    "매출 25% AI투자, 초개인화 'AI 검색' 일상속으로",
    "네타냐후, 트럼프 당선에 ‘폭주’…팔·레바논 등 공격 100명 사망"
]

classifier(articles, candidate_labels=labels)

 

실행결과는 다음과 같이 나온다.

 

정답률이 엄청 안좋기 때문에 ^^

Top3 포함되면 정답으로 계산해서 33점.

 

 

이번에는 ko-LLM 리더보드에서 현재 1위를 하고 있는 모델을 이용해봤다.

from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification

model_name = "maywell/Synatra-42dot-1.3B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

classifier = pipeline("zero-shot-classification", model=model, tokenizer=tokenizer)

labels = ["정치", "경제", "사회", "생활/문화", "IT/과학", "세계"]

articles = [
    "尹 대통령 선물받은 투르크 국견 해피·조이, 관저 떠나 서울대공원으로",
    "트럼프, 인플레 우려에 관세폭탄 못할것",
    "똑바로 살겠다…반성문 3번 쓴 음주뺑소니 김호중, 검찰은 징역 3년6개월",
    "천재화가 천경자 특별전 개막..미공개 작품도 선 보여",
    "매출 25% AI투자, 초개인화 'AI 검색' 일상속으로",
    "네타냐후, 트럼프 당선에 ‘폭주’…팔·레바논 등 공격 100명 사망"
]

classifier(articles, candidate_labels=labels)

 

실행결과는 다음과 같다.

 

마찬가지로 Top3에 포함된 것 기준으로 67점이다.

 

 

혹시나 하고 ChatGPT를 시켜봤더니 Top1으로 해서 1개 빼고 모두 잘 분류했다. 역시 ChatGPT !!!

위의 작은 모델들은 Top1으로 하면 처참한 결과인데...

ChatGPT

 

뭐 결과는 조금 마음에 들지는 않지만,

그래도 머리속에 있는 아이템을 가지고 HuggingFace를 이용해서 어떻게 해야할지에 대해서는

간단히 잘 살펴본 것 같다. (ChatGPT의 위대함을 느낀 것이 더 큰가?)

반응형

'AI_ML > LLM' 카테고리의 다른 글

HuggingFace - LLAMA 3.2 for Korean  (2) 2024.11.12
HuggingFace - Learn - NLP Course #2  (0) 2024.11.10
HuggingFace - Learn - NLP Course  (1) 2024.11.09
Gemini 잔소리꾼 만들기  (1) 2024.11.08
HuggingFace (허깅페이스 소개)  (0) 2024.06.24

어제 포스팅 했는데, 뭔가 굉장히 찜찜한 마음이 들어서 추가적으로 공부를 해보고자 한다.

- https://www.whatwant.com/entry/HuggingFace-Learn-NLP

 

 

모델을 명시하지 않으면, "distilbert-base-uncased-finetuned-sst-2-english" 모델이 사용된다.

 

한글을 제대로 인식하지 못하는 모델이기에 다음과 같은 결과가 나온다.

 

이번에는 나름 유명한 koBert 모델로 지정해서 해보자.

 

이제는 조금 부정적인 것으로 인지하긴 하지만, 뭔가 부족하다.

 

 

한글을 잘 이해하는 모델을 어떻게 찾을 수 있을까?!

 

한글을 지원하는 LLM들의 성능 순위를 관리하는 곳 중에서 나름 유명한 곳이 있다.

- https://huggingface.co/spaces/upstage/open-ko-llm-leaderboard

 

Colab에서 실행하기 위해서는 Model Size는 좀 제한을 해야 한다.

내가 만약 A100이라던지 H100을 사용할 수 있다면 성능만 바라보고 할 수 있겠지만...

 

31.66점이라는 좀 많이 부족한 점수이지만 그래도 작은 사이즈의 모델에서는 어쩔 수 없다.

 

설명이 많이 부족하다.

사실 개인적으로 올리는 많은 모델들이 다 이렇다 ^^

 

결과는 와우~!!!

LABEL_0 으로 0.94 score를 주고 있다. 부정적이라고 확신하는 것이다!!!

 

 

어제 포스팅에서 한글 모델을 사용했음에도 제대로 감정 분류를 하지 못하는 결과가 나와서 찜찜했는데,

그나마 짧은 시간 투자해서 원하는 수준 이상으로 결과가 나와서 뿌듯하다 ^^

 

이게 제대로 살펴본 것인지는 확신할 수 없지만, 나름 개인의 만족 !!!

반응형

'AI_ML > LLM' 카테고리의 다른 글

HuggingFace - LLAMA 3.2 for Korean  (2) 2024.11.12
HuggingFace - Learn - NLP Course #3  (3) 2024.11.11
HuggingFace - Learn - NLP Course  (1) 2024.11.09
Gemini 잔소리꾼 만들기  (1) 2024.11.08
HuggingFace (허깅페이스 소개)  (0) 2024.06.24

NLP 공부를 하려면 무조건 만나게 되는 HuggingFace(허깅페이스).

 

그런 허깅페이스에서는 친절하게도 강의를 제공해주고 있다.

더더욱 친절하게도 한글도 지원을 해준다.

HuggingFace

 

왼쪽 아래에 위치하고 있는 "Learn"을 클릭해보자.

Learn

 

여러 강의를 제공해주지만,

지금 우리가 관심있는 것은 처음에 등장한 "NLP Course"를 클릭하자.

NLP Course

 

어?! 영어로 나오네!?

왼쪽 위에 있는 언어 선택 메뉴에서 "KO"를 선택하면 된다.

KO

 

왼쪽 챕터를 보면 알겠지만, 아쉽게도 모든 강의를 한글로 제공해주지는 않는다.

(여러분들의 재능기부를 기대합니다!)

 

여기까지의 소개로만 끝나면 조금 아쉬움이 남으니.... ^^

HuggingFace를 활용하는 실습 코드들에 대해서 좀 더 알아보도록 하자.

 

강의 챕터 중 "트랜스포머로 무엇을 할 수 있나요?" 부분을 살펴보자.

트랜스포머로 무엇을 할 수 있나요?

 

가운데 위에 있는 "Open in Colab"을 클릭하자.

Colab

 

내 마음대로 수정하면서 뭔가 해보길 위해서는 "Drive에 사본 저장"을 해야 한다.

그런 다음 하나씩 실행해 보면서 살펴보자.

transformer

 

대체 뭐가 뭔지 모르겠다고!?

pipeline

 

HuggingFace를 활용할 수 있게 해주는 transformers의 pipeline을 사용해주고 있다.

여기에서는 감정 분석을 하고자 "pipeline('sentiment-analysis')"를 사용한다.

그리고는 "I've been waiting for a HuggingFace course my whole life." 문장에 대해서 분석해보라고 하고 있다.

그러면 결과는 [{'label': 'POSITIVE', 'score': 0.9598048329353333}] 라고 나오게 된다.

실행 결과

 

실행 결과 메시지를 보면 현재 어떤 모델을 사용하고 있는지를 알 수 있다.

- https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english

HuggingFace

 

모델에 대한 정말 다양한 정보를 확인할 수 있다.

누가 개발했고, 라이선스는 어떻게 되며 어떻게 사용하는지에 대한 예제도 있고

심지어 위험성이나 편향성까지도 서술해주며, 어떤 데이터로 학습했는지도 알려준다.

오른쪽 부분을 보면 테스트를 해볼 수 있는 인터페이스도 제공해준다.

 

하지만, 우리는 한국인!!!!

 

지금 코드는 한글을 제대로 이해하지 못한다.

모델명만 봐도 알겠지만, 한글에 대해서 학습되지 못한 모델이다.

한글을 이해할 수 있는 아이로 해보자.

koBert

 

응?! label이 예쁘게 나오지도 않고 분석 결과도 좀 마음에 들지 않지만,

일단 내가 원하는 모델을 이용하는 방법을 살펴본 것으로 일단 만족해보자.

 

HuggingFace를 활용하는 것은 계속 더 공부해보도록 하겠다.

반응형

'AI_ML > LLM' 카테고리의 다른 글

HuggingFace - LLAMA 3.2 for Korean  (2) 2024.11.12
HuggingFace - Learn - NLP Course #3  (3) 2024.11.11
HuggingFace - Learn - NLP Course #2  (0) 2024.11.10
Gemini 잔소리꾼 만들기  (1) 2024.11.08
HuggingFace (허깅페이스 소개)  (0) 2024.06.24

그냥 막 갑자기 GenAI를 이용해서 뭐라도 하나 간단하게 만들어 보고 싶다는 생각에 막 진행해봤다.

 

0. 실습 환경

- Ubuntu 20.04

 

1. Gemini API

- 우리의 Google님은 간단하게 사용하는 정도는 무료로 제공해주신다.

  . https://ai.google.dev/pricing?hl=ko#1_5flash

Gemini Pricing

 

- 언제나 그렇듯이 API 사용을 위해서는 Key를 생성해야 한다.

  . https://ai.google.dev/aistudio?hl=ko

Google AI Studio

 

- 구글 계정을 통해 로그인 하고 API key를 얻으면 된다.

  . https://aistudio.google.com/apikey

Get API key

 

2. React App 생성

- Vite를 이용해서 React App을 생성하자. 다음 링크를 참고해서 진행하면 된다.

  . https://www.whatwant.com/entry/vite

 

3. 패키지 설치

- Gemini API 사용을 위해서 패키지를 설치하자.

> npm install @google/generative-ai

> npm install

> npm run dev

npm run dev

 

- 브라우저를 열어서 접속해보자.

WEB

 

4. 파일 생성

- src/ 디렉토리 밑에 파일 하나 새로 만들어서 코드를 작성해보자.

  . 여기에서는 NagBox.jsx 이름으로 만들어봤다.

new file

 

5. 코드 작성

- 다음과 같이 코드를 작성해보자.

import { useState, useEffect } from "react";
import { GoogleGenerativeAI } from "@google/generative-ai";

export default function NagBox() {
  const [response, setResponse] = useState("");
  const [error, setError] = useState(null);
  const [currentTime, setCurrentTime] = useState(new Date());

  const fetchNag = async () => {
    try {
      const genAI = new GoogleGenerativeAI("API KEY");
      const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
      const prompt = "공부를 열심히 할 수 있도록 잔소리를 해주세요.";
      const result = await model.generateContent(prompt);
      const text = result.response.text();
      setResponse(text);
    } catch (err) {
      setError(err.message);
    }
  };

  useEffect(() => {
    fetchNag();

    const nagIntervalId = setInterval(fetchNag, 30000);
    const clockIntervalId = setInterval(() => setCurrentTime(new Date()), 1000);

    return () => {
      clearInterval(nagIntervalId);
      clearInterval(clockIntervalId);
    };
  }, []);

  return (
    <div style={{ position: "relative", minHeight: "100vh" }}>
      {error ? <p>{error}</p> : <p>{response}</p>}
      <div
        style={{
          position: "fixed",
          bottom: 10,
          right: 10,
          backgroundColor: "white",
          padding: "10px",
          borderRadius: "5px",
          boxShadow: "0 0 10px rgba(0,0,0,0.2)",
        }}
      >
        {currentTime.toLocaleTimeString()}
      </div>
    </div>
  );
}

code


- main.jsx 파일도 수정해주자.

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
// import App from './App.jsx'
import App from './NagBox.jsx'

createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

 

code

 

- 웹브라우저로 결과를 확인해보자.

WEB

 

이모지를 사용하라고 하지도 않았는데...

우와... 잔소리를 하라고 했지, 나의 자존감을 꺾으라고는 안했는데... 우와~~~~ 제미나이, 대단하네!!!

 

 

기본적인 코드는 아래 사이트를 참고했습니다.

- https://www.codedex.io/projects/generate-a-poem-with-google-gemini

 

반응형

'AI_ML > LLM' 카테고리의 다른 글

HuggingFace - LLAMA 3.2 for Korean  (2) 2024.11.12
HuggingFace - Learn - NLP Course #3  (3) 2024.11.11
HuggingFace - Learn - NLP Course #2  (0) 2024.11.10
HuggingFace - Learn - NLP Course  (1) 2024.11.09
HuggingFace (허깅페이스 소개)  (0) 2024.06.24

AI 특히 LLM, NLP를 공부하는 사람들이라면 최소한 한 번 이상 들어봤을 '허깅페이스(HuggingFace)'

  - https://huggingface.co/

https://huggingface.co/

 

2016년도에 설립된 뉴욕에 본사가 있는 프랑스계 미국 회사이며,

자연어 처리(NLP: Natural Language Processing), 특히 트랜스포머(Transformer)에 중점을 둔 커뮤니티라고 할 수 있다.

 

 

 

HuggingFace가 어떤 의미일까!?

 

이모지를 보면 한국어로는 '포옹하고 있는 얼굴'로 나오는 것이 있다.

이것이 HuggingFace의 정체이다!!! ^^

Emoji

 

허깅페이스는 작년(23년) 8월 2억3500만 달러(약 3113억원)의 자금을 투자 받았으며

45억 달러(약 6조)의 시장 가치를 평가받았다. 어마어마 하다.

 

그리고, 투자 기업 목록을 보면

구글과 엔비디아, 아마존, AMD, 인텔, IBM, 퀄컴, 세일즈포스 등 AI 개발 하면 떠오르는 테크 기업들이 대부분 포함됐다.

 

 

 

대체 허깅페이스가 무엇이기에 이렇게 많은 업체들이 관심을 갖고 투자를 하고 있을까?!

 

허깅페이스 사이트의 상단 메뉴를 살펴보자.

https://huggingface.co/

 

허깅페이스 사이트에서 제공해주는 기능은 다음 3가지라고 할 수 있다.

  - Models / Datasets / Spaces

 

 

▷ Models

Models

 

자연어 처리 외에도 다양한 유형의 모델들을 등록하고 다운로드 받을 수 있다.

  - Multimodal

  - Computer Vision

  - Natural Language Processing

  - Audio

  - Tabular

  - Reinforcement Learning

  - Other

 

무려 73만여개의 모델들이 등록되어 있는 것을 확인할 수 있다.

 

성능 좋은 LLM 모델을 오픈 공개한다고 하면 일단 허깅페이스에 등록하는 것이 거의 정해진 수순이다.

최근 애플에서도 모델을 오픈했고, 당연하게 허깅페이스에 등록했다고 기사가 나왔다.

apple model

 

지난달에 등록했던 OpenELM과 몇 일 전 등록한 coreml 모델들을 확인할 수 있다.

 

관심있는 모델을 선택하면 상세 정보 페이지가 나온다.

Meta-Llama-3-8B

 

Model Card를 통해 학습데이터에 대한 정보라던지, 어떻게 활용할 수 있는지 등 자세한 설명을 볼 수 있다.

 

 

 

▷ Datasets

Datasets

 

모델보다는 좀 부족한 17만여개의 Datasets도 업로드/다운로드 할 수 있다.

 

마찬가지로 Dataset card를 통해 자세한 정보를 확인해볼 수 있다.

ft-instruction-synthesizer-collection

 

이미지나 오디오 형식의 feature도 보고, 듣기 편하게 제공해준다.

 

 

 

▷ Spaces

Spaces

 

가장 인상적인 Spaces !!!

AI Apps들을 등록하고 사용해볼 수 있다.

 

ai-comic-factory

 

Japanimation 스타일로 AI를 공부하는 스토리를 그려달라고 했더니 저런 결과물을 생성해줬다 ^^

 

구글과 제휴를 했다고 하더니(24년 1월) GCP 리소스를 이용해 이런 서비스도 제공해줄 수 있나보다.

하지만, App 실행하다보면 GPU 할당 받기 위해 잠시 기다리라는 메시지가 종종 나오기는 한다.

 

 

 

▷ Docs

Docs

 

학생 또는 개발자라면 좀 더 관심 깊게 봐야하는 것은 Docs 메뉴이다.

심지어 한글도 비교적 충실히 제공해준다. (물론 유명한 컨텐츠에 한해서 ^^)

Transformers

 

그런데, 내용을 잘 보면 알겠지만, 일반적인 튜토리얼이 아니다.

HuggingFace를 활용하는 방법들을 설명해주는 내용들이다.

 

그렇다!!!

허깅페이스의 매력은 파이썬 패키지에 있다.

transformers

 

허깅페이스에 등록된 모델, 데이터셋 등을 편하게 사용할 수 있다.

추론도할 수 있고, fine-tuning을 해볼 수도 있고, 아니면 내가 다시 학습을 시켜볼 수도 있다.

 

 

 

여기까지 살펴본 결과 .... 

허깅페이스는 ML-Hub / AI-Hub / LLM-Hub 등의 명칭으로 불러야 할 것 같다.

AI Platform 이라고 정의하는 글도 본 것 같다.

 

다음에는 허깅페이스를 이용해서 파인튜닝 해보는 내용을 정리해보려고 한다.

이번 글은 여기에서 ... 이만~

반응형

'AI_ML > LLM' 카테고리의 다른 글

HuggingFace - LLAMA 3.2 for Korean  (2) 2024.11.12
HuggingFace - Learn - NLP Course #3  (3) 2024.11.11
HuggingFace - Learn - NLP Course #2  (0) 2024.11.10
HuggingFace - Learn - NLP Course  (1) 2024.11.09
Gemini 잔소리꾼 만들기  (1) 2024.11.08

+ Recent posts