오늘은 AI모델활용 강의를 들으며 시작했습니다.

오늘의 목표는 4주차까지 듣고 1주차부터 다시 복습을 하여 AI모델 활용에 대한 이해도를 높이는게 목적입니다.

강의를 듣는 도중 gensim과 numpy의 호환성문제가 발생했고 uninstall 등 다양한 방법을 사용해보았고 결국 새로운 가상환경을 만들어 해결했습니다.

오늘 들은 강의는 코드를 작성하며 실습하는 수업이였습니다.

코드를 적으며 기억이 나지 않거나 처음 보는 코드들의 기능을 자세히 알아보며 강의를 들어 이해가 잘 되었습니다.

 

강의를 들으면서 정리한 새롭게 알게된 내용과 까먹은 내용들을 강의 순서에 맞게 정리하겟습니다.

그리고 마크다운을 사용해서 TIL을 작성하는게 익숙해지고있으며 이모지를 가져와서 더욱 가독성이 좋게 꾸며야 할 것 같습니다.

 

마지막으로 해결하지 못한 궁금한 점이있습니다.

 

API를 활용해서 모델을 만드는 실습을 했는데 GPT-4o는 내가 알기론 유료 플랜인데 코드를 실행시키면 요금이 청구 되나요? (코드를 실행 시켜보지는 않았습니다 무서버서ㅎㅎ:)


☑️ AI모델활용 3주차

3-1 허깅페이스와 트랜스포머

Trnasformers 라이브러리

Transformers 라이브러리는 다양한 NLP 모델을 쉽게 사용할 수 있도록 도와주는 Hugging Face의 오픈소스 라이브러리, 이 라이브러리를 통해 최신 NLP 모델들을 불러와 텍스트 생성, 감정 분석, 번역 등 다양한 작업에 활용할 수 있다.

참고! 모델을 가져와서 사용할 땐 vscode가 좋다!!

pipeline

  • pipeline이란?
    1. 텍스트 분류: 감정분석, 주제 분류, 등의 작업을 지원하며, 문장의 감정을 예측하거나 특정 카테고리분류 가능
    2. 질의 응답: 주어진 문서와 질문을 입력받아 문서에서 질문에 대한 답변을 찾는 작업
    3. 텍스트 생성: 주어진 문장을 기반으로 텍스트를 생성하며, 대화생성이나 문장 완성 가능
    4. 번역
    5. 요약: 긴 텍스트를 간단히 요약해 주요 내용 추출 가능
    6. 개체명 인식: 문장 내에서 이름, 위치ㅡ 조직 등을 식별하여 태그를 붙이는 작업
    7. 문장 유사도: 두 문장의 유사도를 계산하는 작업으로 의미적 유사성 측정 가능
  • pipeline의 요소 "text-generation" 그 외
    1. "text-generation": 텍스트 생성 작업 (예: 대화 생성, 글 작성)
    2. "sentiment-analysis": 간단한 감성어 분석
    3. "question-answering": 질의응답 작업
    4. "translation_xx_to_yy": 번역 작업 (예: "translation_en_to_fr"는 영어에서 프랑스어로 번역)
    5. "summarization": 텍스트 요약
    6. "ner": 개체명 인식 (Named Entity Recognition)
    7. "sentence-similarity": 문장 유사도 측정
    8. "fill-mask": 마스크된 텍스트 채우기 (BERT 모델 등에서 사용)
    9. "text-classification": 텍스트 분류 작업 (예: 감정 분석)

임베딩

  • 1. 워드 임베딩
    • 자연어 처리에서 단어를 벡터로 처리 (워드투백, 페스트 텍스트)
  • 2. 센텐스 임베딩
    • 문장 전체를 벡터로 처리
    • 문장간의 유사도 분석, 의미적 관계 분석
    • 딥러닝, 머신러닝의 입력으로 활용 가능
  • 3. 이미지 임베딩
    • 이미지 데이터를 벡터로 표현
    • 이미지의 픽셀 데이터를 저차원 벡터로 분석하고 이미지간의 유사도 분석 가능
    • 딥러닝의 CNN과 비슷하지만 여러가지 방법을 도입하는게 좋다.
  • 4. 그래프 임베딩
    • 그래프 구조를 벡터로 표현
    • 노드간의 관계를 벡터 공간에서 표현
    • 네트워크 분석, 추천 시스템에서 활용

유사도

  • 두 개의 데이터가 얼마나 비슷한지 수치적으로 표현하는 방법
  • 임베딩 벡터에 유사도를 측정하는 방법 (코사인 유사도, 유클리디안 루컬?)
  • 벡터간의 거리나 각도를 계산하는 방법이다.

 


☑️ 3주차 코드 분석

3주차 강의 필기

TIL/AI/AI_3.ipynb at main · onesowrd1/TIL

 

TIL/AI/AI_3.ipynb at main · onesowrd1/TIL

오늘 배운 것은?! Contribute to onesowrd1/TIL development by creating an account on GitHub.

github.com

 

 

트랜스포머를 활용한 모델사용

 

 1. max_length=100는 생성할 문장의 최대 길이를 지정한다.(항상 최대 길이로 문장을 만드는건 아니다.)
 2. num_return_sequences=2는 문장의 개수를 지정한다.

# 트랜스포머를 활용한 모델 사용
from transformers import pipeline

generator = pipeline("text-generation", model = "gpt2")

# 텍스트 생성
result = generator("I have a cat", max_length=100, num_return_sequences=2)
print(result)

 

감정어 분석

문장을 해석해서 어느정도의 감정을 캐치하고 값을 출력한다. ex) Positive


1. model="roberta-base"
버트기반 모델은 핵심적인 논리부분은 대규모 데이터셋을 통해 사전학습 시키고 마지막 레이어(번역, 분류 등) 목적에 따라 바꿀 필요가 있는 레이어는 사용자에게 맡기기도 한다.

 

# 감성어 분석
from transformers import pipeline

sentiment_analysis = pipeline("sentiment-analysis", model="roberta-base")
result = sentiment_analysis("I love you")
print(result)

 

워드 투 백

1. from gensim.models import Word2Vec

- 텍스트 데이터에서 단어 간의 의미적 유사성을 벡터로 표현하는 알고리즘

 

2. from gensim.utils import simple_preprocess

- 텍스트를 소문자로 변환하고 불필요한 기호를 제거하며 토큰화하여 단어 리스트로 반환

 

3. from scipy.spatial.distance import cosine

- 두 벡터 간의 코사인 거리를 계산하며, 유사도를 계산한다.

 

4. sentences

- 임베딩을 생성할 문장 리스트

 

5. processed = [simple_preprocess(sentence) for sentence in sentences]

- simple_preprocess 함수를 사용하여 각 문장을 토큰화하고 소문자로 변환하여 단어 리스트 반환

 

6. Word2Vec(sentences=processed, vector_size=5, window=5, min_count=1, sg=0)

- sentences=processed: 학습에 사용할 문장 리스트

- vector_size=5: 각 단어를 5차원 벡터로 임베딩하고. 이 크기는 사용자가 필요에 따라 조정할 수 있다.

- window=5: 컨텍스트 윈도우 크기로, 현재 단어와의 최대 거리(단어 수)를 나타낸다.

- min_count=1: 최소 등장 빈도로, 1로 설정했으므로 모든 단어가 임베딩에 포함된다.

- sg=0: Skip-gram 방식을 사용할지(1), CBOW 방식을 사용할지(0)를 결정하고. 여기서는 CBOW 방식을 사용.

 

7. dog = model.wv['dog']와 cat = model.wv['cat']

-  dog와 cat이라는 단어의 벡터 표현을 불러온다.

 

8. sim = 1 - cosine(dog, cat)

- cosine 함수를 사용하여 dog와 cat 벡터의 코사인 유사도를 계산

 

import numpy as np
from gensim.models import Word2Vec
from gensim.utils import simple_preprocess
from scipy.spatial.distance import cosine


sentences = [
    "The quick brown fox jumps over the lazy dog",
    "I love playing with my pet dog",
    "The dog barks at the stranger",
    "The cat sleeps on the sofa",
]

processed = [simple_preprocess(sentence) for sentence in sentences]
print(processed)

model = Word2Vec(sentences=processed, vector_size=5, window=5, min_count=1, sg=0)
dog = model.wv['dog']
cat = model.wv['cat']

sim = 1 - cosine(dog, cat)
print(sim)

☑️ AI모델 활용 4주차

4주차 강의 필기

TIL/AI/AI_4.ipynb at main · onesowrd1/TIL

 

TIL/AI/AI_4.ipynb at main · onesowrd1/TIL

오늘 배운 것은?! Contribute to onesowrd1/TIL development by creating an account on GitHub.

github.com

 

 

4-1 생성형 AI모델 직접 만들기 때 주의!!

생성형AI란?

  • 주어진 입력에 따라 새로운 콘텐츠를 생성하는 인공지능 기술
  • 몇 개의 단어를 입력받아 그에 맞는 문장 생성, 스케치를 바탕으로 이미지 생성

종류

  1. 텍스트 생성(GPT-3, ChatGPT 등)
  2. 이미지 생성(DALL-E, Stable Diffusion 등)
  3. 음악 생성(Magenta 등)

어려움

  1. 대규모 데이터 필요
  2. 컴퓨터 자원의 한계
  3. 모델 구조의 복잡성
  4. 훈련 과정의 불안정성

파인튜닝의 필요성!

  • 파인 튜닝은 사전 학습된 모델을 특정 작업에 맞게 추가로 학습시키는 과정으로, 생성형 AI 모델을 보다 쉽게 적용할 수 있는 방법
  • 사전 학습된 모델(시간 절감, 높은 성능, 도메인 특화, 작업 맞춤)

만들 때 고려할 부분

  1. 사전학습된 모델 활용
  2. 클라우드 서비스 활용
  3. 작은 프로젝트부터 시작하기

4-2 생성형 AI모델 기본 원리

랜덤성 Randomness

역할

  • 출력 데이터를 생성할 때 일정한 확률에 따라 다양한 선택지를 고려하게 한다.

확률 분포

  • 학습 데이터를 통해 얻은 확률 분포를 기반으로 새로운 데이터를 생성
  • 데이터의 분포를 학습해서 새로운 데이터를 생성할 수 있게 되는거다.

조건성 Conditionality

조건 입력

  • 입력된 조건에 따라 결과를 다르게 생성
  • 텍스트, 이미지, 오디오 등 다양한 형식의 조건이 있다.

중요성

  • 조건성 덕분에 생성형 모델은 매우 다양한 상황에 적응할 수 있다.(사용자가 원하는 특정 스타일, 주제, 분위기 등)

결론

  • 생성형 AI는 랜덤성과 조건성을 결합하여 다양한 결과를 생성한다.
  • 조건은 출력의 전반적인 틀과 스타일을 결정
  • 랜덤성은 결과의 세부적인 변화를 만든다.
  • 두 요소의 상호작용 덕분에 생성형 AI는 창의적이고 예측 불가능한 결과를 생성가능하게 만들어 준다.

※작동원리

텍스트 기반 생성형 모델의 원리

  1. 입력 토큰화
  2. 확률 예측
  3. 랜덤 선택: temperature 파라미터를 조정하여 랜덤성을 조절가능
  4. 반복 생성

이미지 기반 생성형 모델의 원리

  1. 텍스트 인코딩
  2. 이미지 생성
  3. 세부 사항 추가

오디오 기반 생성형 모델의 원리

  1. 텍스트 또는 멜로디 인코딩
  2. 오디오 생성
  3. 랜덤성 적용

4-3 Hugging Face와 Stable Diffusion

텍스트 생성

  1. 사전학습된 모델 사용
  2. 서비스를 활용해서 AIP의 형태로 언어를 형성

GPT-4o 모델로 텍스트 생성하기

API_KEY는 설정 파일이나 환경변수를 통해 관리해야한다. (코드상에 KEY작성 금지!!)

Stable Diffusion을 활용한 이미지 생성

Stable Diffusion 모델의 세부 조정

  • guidance_scale: 텍스트 조건을 얼마나 강하게 반영할지 결정하는 파라미터. 값이 높을수록 텍스트 설명에 충실한 이미지를 생성한다.
  • num_inference_steps: 이미지 생성 과정에서의 추론 단계 수를 지정한다. 단계 수가 많을수록 이미지의 품질이 향상되지만, 생성 시간이 길어진다.
image = pipe(prompt, guidance_scale=7.5, num_inference_steps=50).images[0]

☑️  4주차 코드 분석

1. 서비스를 활용해서 AIP의 형태로 언어를 형성

from openai import OpenAI

  • OpenAI API와 상호작용하는 데 필요한 기능을 제공

client = OpenAI()

  • OpenAI 클래스의 인스턴스를 생성하여 client 변수에 할당
  • client 객체를 통해 OpenAI API의 기능을 사용할 수 있ek.

client.chat.completions.create

  • completions.create 메서드를 호출하여 대화형 응답을 생성

role, content

  • 역할, 내용
# 2. 서비스를 활용해서 AIP의 형태로 언어를 형성

# JavaScript에 openai환경변수 설정
import os

os.environ["OPENAI_API_KEY"] = "<your OpenAI API key>"

# python
from openai import OpenAI

client = OpenAI()

completion = client.chat.completions.create(
    # 필요되는 정보들
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "너는 환영 인사를 하는 인공지능이야, 농담을 넣어 재미있게해줘"},
    {"role": "user", "content": "안녕?"}  
  ]
)

print("답변: " + completion.choices[0].message.content)

 

2. Stable Diffusion 모델 예제 코드

 

from diffusers import StableDiffusionPipeline

  • 텍스트 설명을 기반으로 이미지를 생성하는 파이프라인을 제공

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4"

  • "CompVis/stable-diffusion-v1-4"는 모델의 이름이며, Hugging Face 허브에서 가져올 모델 경로
  • torch_dtype=torch.float16은 16비트 부동 소수점 데이터를 사용하도록 설정

pipe = pipe.to("cuda")

  • pipe 객체를 GPU로 옮긴다. "cuda"는 GPU 장치를 의미하며, 이를 통해 모델의 연산이 GPU에서 수행되어 속도를 높일 수 있다.

prompt = "A futuristic cityscape with flying cars at sunset"

  • 생성할 이미지의 텍스트 설명을 정의

image = pipe(prompt).images[0]

  • 텍스트 설명을 기반으로 이미지 생성 요청을 처리
  • images[0]은 생성된 첫 번째 이미지를 선택한다.

image.save("generated_image.png")

  • "generated_image.png"라는 파일명으로 저장
# stable diffusion 모델 예제 코드
from diffusers import StableDiffusionPipeline
import torch

# Stable Diffusion 파이프라인 로드
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16)
pipe = pipe.to("cuda")  # GPU 사용

# 텍스트 설명을 기반으로 이미지 생성
prompt = "A futuristic cityscape with flying cars at sunset"
image = pipe(prompt).images[0]

# 생성된 이미지 저장 및 출력
image.save("generated_image.png")
image.show()

+ Recent posts