그동안 블로그 포스팅을 하면서

티스토리에서 코드 출력을 위해 기능을 제공해주고 있다는 것을 지금까지 몰랐다.

 

이런 바보!

 

이렇게 예쁘게 출력을 해준다.

from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassification

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

classifier_ko = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)

classifier_ko("정말 니가 싫어")

 

그런데,

깔끔하긴 한데... 뭔가 좀 아쉽다.

이게 훨씬 더 예쁜 것 같다!!!! 

 

 

소스 코드를 이렇게 예쁜 이미지로 만들어 주는 사이트를 소개해보고자 한다 ^^

- https://ray.so/

 

사이트에 방문해서 소스 코드를 붙여 넣기 하고,

하단의 옵션을 적절하게 만져주면 된다.

 

예쁘게 만들었다면,

오른쪽 상단의 Export Image를 통해 그림파일로 내려 받으면 된다.

 

 

해당 사이트는 사실 더 많은 기능을 제공해 준다.

 

정말 가볍고, 깔끔하고, 유용한 기능을 많이 제공해주는 아름다운 사이트이다.

반응형

GitHub에서 여러 LLM 모델들을 가지고 놀 수 있는 서비스를 제공하고자 하고 있어서

이것을 소개해보려 한다.

 

아직은 정식 서비스를 하고 있지 않아서인지, 메뉴가 꼭 꼭 숨어있다.

 

아! 아직은 Preview 상태라서 해당 메뉴가 보이지 않는 분들이 계실 수도 있다.

그런 분들은 그냥 이런게 곧 나오겠구나~하고 구경 먼저 해보시길 ^^

 

일단 로그인을 하고...

GitHub

 

왼쪽 위 메뉴 버튼을 눌러 펼친 다음에

"Marketplace"를 선택하자.

Menu

 

Marketplace 메뉴들을 보면 "Models"를 발견할 수 있다.

Models

 

여러 LLM 모델들을 볼 수 있는데,

일단 친근한 GPT-4o를 선택해보자.

OpenAI GPT-4o

 

오른쪽 위의 "Playground" 버튼을 선택해보자.

Playground

 

System prompt를 비롯해서 Max Tokens라던지, Temperature 등 여러 parameter들을 설정할 수도 있다.

직접 프롬프트를 입력하면 대기시간 없이 즉시 응답을 해준다.

prompt

 

한글 출력이 깨지는 것이 있는데, model의 잘못인지 GitHub에서의 출력 문제인지는 불분명하다.

 

말만 들어봤던 Mistral 모델을 가지고도 한 번 해봤다.

한글도 잘 알아듣고, 결과도 나름 괜찮네!?

Mistral

 

현재 GitHub Models에서 사용해볼 수 있는 model들은 다음과 같다.

 

이걸 가지고 뭔가 재미난 것들을 해볼 수도 있을 것 같은데...

Preview 기간이 끝나면 당연하게도 유료 서비스가 될 것 같아서 ^^

반응형

오늘은 왠지 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  (2) 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  (0) 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  (0) 2024.11.12
HuggingFace - Learn - NLP Course #3  (2) 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  (0) 2024.11.12
HuggingFace - Learn - NLP Course #3  (2) 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  (0) 2024.11.12
HuggingFace - Learn - NLP Course #3  (2) 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

여기에서는 실습 개념으로

Vite를 이용해서 React 앱 생성하는 과정만 빠르게 살펴볼 것이다.

 

0. 실습 환경

- Ubuntu 20.04

 

1. Node

- Vite를 사용하기 위해서는 node가 설치되어 있어야 한다.

- 아직 설치가 안되어 있다면, 아래 포스팅을 통해 nvm 기반으로 설치하자.

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

nvm

 

- 원활하게 Vite를 사용하기 위해서는 node 버전이 18 이상이어야 한다고 한다.

node version

 

2. Vite 설치

- npm을 이용하여 vite를 설치하면 된다.

> npm install vite@latest

install vite

 

3. Project 생성

- vite를 이용해서 React project를 생성해보자.

  . 아래 캡처한 내역과 같이 3가지 정보를 작성 및 선택해주면 된다.

> npm create vite@latest

create project

 

4. App 실행

- vite가 알려준대로 진행해보면 된다.

> cd gemini-nagger

> npm install

> npm run dev

run

 

- 웹브라우저를 통해 확인해보자.

WEB

 

간략히 살펴보았다.

반응형

'Programming > Web' 카테고리의 다른 글

백엔드 프레임워크 - KeystoneJS  (1) 2023.07.13
npm, node 그리고 nvm  (0) 2023.01.04

+ Recent posts