오늘은 AI모델활용 강의를 들으며 시작했습니다.
오늘의 목표는 4주차까지 듣고 1주차부터 다시 복습을 하여 AI모델 활용에 대한 이해도를 높이는게 목적입니다.
강의를 듣는 도중 gensim과 numpy의 호환성문제가 발생했고 uninstall 등 다양한 방법을 사용해보았고 결국 새로운 가상환경을 만들어 해결했습니다.
오늘 들은 강의는 코드를 작성하며 실습하는 수업이였습니다.
코드를 적으며 기억이 나지 않거나 처음 보는 코드들의 기능을 자세히 알아보며 강의를 들어 이해가 잘 되었습니다.
강의를 들으면서 정리한 새롭게 알게된 내용과 까먹은 내용들을 강의 순서에 맞게 정리하겟습니다.
그리고 마크다운을 사용해서 TIL을 작성하는게 익숙해지고있으며 이모지를 가져와서 더욱 가독성이 좋게 꾸며야 할 것 같습니다.
마지막으로 해결하지 못한 궁금한 점이있습니다.
API를 활용해서 모델을 만드는 실습을 했는데 GPT-4o는 내가 알기론 유료 플랜인데 코드를 실행시키면 요금이 청구 되나요? (코드를 실행 시켜보지는 않았습니다 무서버서ㅎㅎ:)
☑️ AI모델활용 3주차
3-1 허깅페이스와 트랜스포머
Trnasformers 라이브러리
Transformers 라이브러리는 다양한 NLP 모델을 쉽게 사용할 수 있도록 도와주는 Hugging Face의 오픈소스 라이브러리, 이 라이브러리를 통해 최신 NLP 모델들을 불러와 텍스트 생성, 감정 분석, 번역 등 다양한 작업에 활용할 수 있다.
참고! 모델을 가져와서 사용할 땐 vscode가 좋다!!
pipeline
- pipeline이란?
- 텍스트 분류: 감정분석, 주제 분류, 등의 작업을 지원하며, 문장의 감정을 예측하거나 특정 카테고리분류 가능
- 질의 응답: 주어진 문서와 질문을 입력받아 문서에서 질문에 대한 답변을 찾는 작업
- 텍스트 생성: 주어진 문장을 기반으로 텍스트를 생성하며, 대화생성이나 문장 완성 가능
- 번역
- 요약: 긴 텍스트를 간단히 요약해 주요 내용 추출 가능
- 개체명 인식: 문장 내에서 이름, 위치ㅡ 조직 등을 식별하여 태그를 붙이는 작업
- 문장 유사도: 두 문장의 유사도를 계산하는 작업으로 의미적 유사성 측정 가능
- pipeline의 요소 "text-generation" 그 외
- "text-generation": 텍스트 생성 작업 (예: 대화 생성, 글 작성)
- "sentiment-analysis": 간단한 감성어 분석
- "question-answering": 질의응답 작업
- "translation_xx_to_yy": 번역 작업 (예: "translation_en_to_fr"는 영어에서 프랑스어로 번역)
- "summarization": 텍스트 요약
- "ner": 개체명 인식 (Named Entity Recognition)
- "sentence-similarity": 문장 유사도 측정
- "fill-mask": 마스크된 텍스트 채우기 (BERT 모델 등에서 사용)
- "text-classification": 텍스트 분류 작업 (예: 감정 분석)
임베딩
- 1. 워드 임베딩
- 자연어 처리에서 단어를 벡터로 처리 (워드투백, 페스트 텍스트)
- 2. 센텐스 임베딩
- 문장 전체를 벡터로 처리
- 문장간의 유사도 분석, 의미적 관계 분석
- 딥러닝, 머신러닝의 입력으로 활용 가능
- 3. 이미지 임베딩
- 이미지 데이터를 벡터로 표현
- 이미지의 픽셀 데이터를 저차원 벡터로 분석하고 이미지간의 유사도 분석 가능
- 딥러닝의 CNN과 비슷하지만 여러가지 방법을 도입하는게 좋다.
- 4. 그래프 임베딩
- 그래프 구조를 벡터로 표현
- 노드간의 관계를 벡터 공간에서 표현
- 네트워크 분석, 추천 시스템에서 활용
유사도
- 두 개의 데이터가 얼마나 비슷한지 수치적으로 표현하는 방법
- 임베딩 벡터에 유사도를 측정하는 방법 (코사인 유사도, 유클리디안 루컬?)
- 벡터간의 거리나 각도를 계산하는 방법이다.
☑️ 3주차 코드 분석
3주차 강의 필기
TIL/AI/AI_3.ipynb at main · onesowrd1/TIL
트랜스포머를 활용한 모델사용
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
4-1 생성형 AI모델 직접 만들기 때 주의!!
생성형AI란?
- 주어진 입력에 따라 새로운 콘텐츠를 생성하는 인공지능 기술
- 몇 개의 단어를 입력받아 그에 맞는 문장 생성, 스케치를 바탕으로 이미지 생성
종류
- 텍스트 생성(GPT-3, ChatGPT 등)
- 이미지 생성(DALL-E, Stable Diffusion 등)
- 음악 생성(Magenta 등)
어려움
- 대규모 데이터 필요
- 컴퓨터 자원의 한계
- 모델 구조의 복잡성
- 훈련 과정의 불안정성
파인튜닝의 필요성!
- 파인 튜닝은 사전 학습된 모델을 특정 작업에 맞게 추가로 학습시키는 과정으로, 생성형 AI 모델을 보다 쉽게 적용할 수 있는 방법
- 사전 학습된 모델(시간 절감, 높은 성능, 도메인 특화, 작업 맞춤)
만들 때 고려할 부분
- 사전학습된 모델 활용
- 클라우드 서비스 활용
- 작은 프로젝트부터 시작하기
4-2 생성형 AI모델 기본 원리
랜덤성 Randomness
역할
- 출력 데이터를 생성할 때 일정한 확률에 따라 다양한 선택지를 고려하게 한다.
확률 분포
- 학습 데이터를 통해 얻은 확률 분포를 기반으로 새로운 데이터를 생성
- 데이터의 분포를 학습해서 새로운 데이터를 생성할 수 있게 되는거다.
조건성 Conditionality
조건 입력
- 입력된 조건에 따라 결과를 다르게 생성
- 텍스트, 이미지, 오디오 등 다양한 형식의 조건이 있다.
중요성
- 조건성 덕분에 생성형 모델은 매우 다양한 상황에 적응할 수 있다.(사용자가 원하는 특정 스타일, 주제, 분위기 등)
결론
- 생성형 AI는 랜덤성과 조건성을 결합하여 다양한 결과를 생성한다.
- 조건은 출력의 전반적인 틀과 스타일을 결정
- 랜덤성은 결과의 세부적인 변화를 만든다.
- 두 요소의 상호작용 덕분에 생성형 AI는 창의적이고 예측 불가능한 결과를 생성가능하게 만들어 준다.
※작동원리
텍스트 기반 생성형 모델의 원리
- 입력 토큰화
- 확률 예측
- 랜덤 선택: temperature 파라미터를 조정하여 랜덤성을 조절가능
- 반복 생성
이미지 기반 생성형 모델의 원리
- 텍스트 인코딩
- 이미지 생성
- 세부 사항 추가
오디오 기반 생성형 모델의 원리
- 텍스트 또는 멜로디 인코딩
- 오디오 생성
- 랜덤성 적용
4-3 Hugging Face와 Stable Diffusion
텍스트 생성
- 사전학습된 모델 사용
- 서비스를 활용해서 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()
'TIL' 카테고리의 다른 글
내일배움캠프 28일차 TIL + AI모델활용 5주차, 머신러닝 비지도 학습 (2) | 2024.11.05 |
---|---|
내일배움캠프 27일차 TIL + AI모델 활용 5주차 (1) | 2024.11.04 |
내일배움캠프 25일차 TIL + 도전과제, AI모델 활용 (2) | 2024.10.31 |
내일배움캠프 24일차 TIL + 딥러닝 LSTM, 과제 발표 (2) | 2024.10.30 |
내일배움캠프 23일차 TIL + 취업준비, 도전과제, GitHub (4) | 2024.10.29 |