CPU -> GPU 변경
cpu로 하면 느리기에 gpu로 설정을 바꿔줘다
사진 생성 AI 불러오기
Stable Diffusion이라는 AI 모델을 사용해서 텍스트를 그림으로 변환하는 방법을 보여주고 있다.
- 모델 가져오기
- diffusers라는 라이브러리를 사용해서 Stable Diffusion 모델을 가져온다.
- torch라는 도구도 함께 사용해서 컴퓨터가 이 모델을 실행할 수 있도록 한다.
- 모델 다운로드
- DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")를 실행하면 Stable Diffusion 모델이 다운로드된다.
- 컴퓨터가 GPU를 사용할 수 있도록 설정
- pipe.to("cuda") if torch.cuda.is_available() else "cpu" 이 코드로 GPU(그래픽카드)가 있으면 GPU를 사용하고, 없으면 CPU를 사용하도록 설정한다.
- 그림 만들기
- prompt='A fantasy landscape with castles and dragons, highly detailed, digital art' 이렇게 텍스트로 그림을 그릴 내용을 적는다.
- image=pipe(prompt).images[0] 이 코드를 실행하면 AI가 그림을 생성한다.
AutoModelForSequenceClassification
파인튜닝할 때 **AutoModelForSequenceClassification**을 사용한다.
이 모델은 **문장 분류(task)**를 수행하는 사전 학습된 모델을 불러와 파인튜닝할 수 있도록 설계되어 있다. 감성 분석, 주제 분류, 가짜 뉴스 판별 등 다양한 문장 분류 작업에 활용된다.
감정 분석을 위해 모델과 토크나이저를 가져온다. 이는 파이프라인이 아니다.
먼저 토크나이저를 사용해 문장을 토큰으로 변환한다.
토크나이저를 사용하여 입력 문장을 텐서로 변환한다.
- tokenizer(text, return_tensors='pt')
- 'I love this movie! It was fantastic!' 문장을 토큰화한 후 PyTorch 텐서('pt') 형태로 변환한다.
- 변환된 결과는 inputs 변수에 저장된다.
모델 실행을 위한 예측 준비
- torch.no_grad()를 사용하면 모델이 예측만 수행하고, 학습을 위한 그래디언트 계산은 하지 않는다.
- 이는 추론(inference) 시 계산 속도를 높이고 메모리 사용을 줄이기 위해 사용된다.
모델에 입력을 전달하고 예측을 수행
- model(**inputs)
- inputs는 딕셔너리 형태이며, input_ids와 attention_mask를 포함한다.
- model(**inputs)은 이 딕셔너리를 모델에 전달하여 예측을 수행하는 코드이다.
- 원래는 model(input_ids=inputs['input_ids'], attention_mask=inputs['attention_mask'])처럼 작성해야 하지만, 딕셔너리를 바로 전달하기 위해 **를 사용하여 간략하게 표현했다.
모델을 통해 예측을 수행하면 로짓(logits) 값이 출력된다.
로짓은 0과 1 사이의 확률 값이 아니므로 이를 클래스로 변환하는 과정이 필요하다.
이를 위해 소프트맥스(Softmax) 함수를 적용하여 각 클래스의 확률을 계산한다.
소프트맥스를 적용하면 0~1 사이의 값으로 변환되며, 전체 합이 1이 된다.
또한, 모델 출력이 2차원 배열이므로, -1을 사용해 1차원으로 줄여 가독성을 높인다.
모델의 설정을 불러온다.
- AutoConfig.from_pretrained(model_name)을 사용해 사전 학습된 모델의 설정을 불러온다.
- 이 설정(config)에는 레이블 정보(id2label)가 포함되어 있다.
레이블 정보를 출력한다.
- config.id2label을 출력하면 {0: 'NEGATIVE', 1: 'POSITIVE'} 형태의 딕셔너리가 나타난다.
- 즉, **0은 'NEGATIVE'(부정), 1은 'POSITIVE'(긍정)**을 의미한다.
예측된 숫자 값을 실제 라벨로 변환한다.
- predicted[0]은 모델이 예측한 클래스(0 또는 1) 중 첫 번째 결과를 의미한다.
- config.id2label[predicted[0]]을 사용해 숫자를 'NEGATIVE' 또는 'POSITIVE' 문자열로 변환한다.
- 결과적으로 'POSITIVE'가 출력된다.
모델 설정에서 레이블 정보를 불러오고, 예측된 숫자 값을 해당하는 감정(긍정/부정)으로 변환한다.
튜닝하려면 이렇게 해야하는데 학습시킬 필요없다면 이과정은 필요없다
입력 데이터의 길이가 서로 다를 경우, 행렬로 처리하기 위해서는 패딩(padding) 작업이 필요하다.
토큰화된 문장이 각각 다른 길이를 가지면, 짧은 문장은 0으로 채워 길이를 맞춘다. 예를 들어, 첫 번째 문장이 [2, 3, 6, 4, 6]이고 두 번째 문장이 [1, 4, 5, 6, 2, 3, 7, 8, 4, 5, 6, 7, 8]이라면, 짧은 문장에 0을 추가하여 같은 길이로 맞춘다. 이를 **패딩(padding)**이라고 한다.
또한, 모델이 처리할 수 있는 최대 문장 길이가 200 토큰이라면, 입력 문장이 이를 초과할 경우 **자르는 작업(truncation)**을 수행한다. 예를 들어, 최대 길이가 200인데 250 토큰이 들어오면, 앞쪽 또는 뒷쪽 일부를 잘라 200개로 맞춘다.
이러한 패딩과 잘라내는 과정은 여러 개의 문장을 하나의 행렬로 처리할 때 필수적인 작업이다.
'HuggingFace > 실습' 카테고리의 다른 글
허깅페이스API 사용 방법 실습 (2) | 2025.02.17 |
---|---|
무료 환경에서 Hugging Face 언어 모델 학습과 배포 (0) | 2025.02.12 |
Hugging Face 긍정문/부정문 모델 학습 및 배포 (0) | 2025.02.11 |
객체 탐지(Object Detection) 결과를 시각화하는 법 (0) | 2025.02.11 |
User-Based Collaborative Filtering: 영화추천 (0) | 2025.02.10 |