AI 도구 101
Hugging Face LLM 툴을 위한 완벽한 초보자 가이드

Hugging Face는 AI 연구소이자 허브로, 학자, 연구자, 그리고 열광자들이 모인 커뮤니티를 구축했습니다. 짧은 기간 동안 Hugging Face는 AI 분야에서 상당한 존재감을 보이고 있습니다. 테크 자이언트들, 즉 Google (GOOGL ), Amazon (AMZN ), 그리고 Nvidia는 AI 스타트업 Hugging Face에 상당한 투자를 하여, 그 평가를 $4.5亿으로 만들었습니다.
이 가이드에서는 트랜스포머, LLM, 그리고 Hugging Face 라이브러리가 오픈소스 AI 커뮤니티를 구축하는 데 중요한 역할을 하는 방법에 대해 소개하겠습니다. 또한 Hugging Face의 주요 기능, 즉 파이프라인, 데이터셋, 모델 등에 대해 Python 예제와 함께 설명하겠습니다.
자연어 처리에서 트랜스포머
2017년, 코넬 대학교는 트랜스포머를紹介하는 영향력 있는 논문을 발표했습니다. 트랜스포머는 자연어 처리에서 사용되는 深層 학습 모델입니다. 이 발견은 ChatGPT와 같은 대규모 언어 모델의 개발을 촉진했습니다.
대규모 언어 모델 또는 LLM은 트랜스포머를 사용하여 인간과 같은 텍스트를 이해하고 생성하는 AI 시스템입니다. 그러나 이러한 모델을 생성하는 것은 비용이 많이 들며, 종종 수백만 달러가 필요하여, 대규모 기업으로 제한됩니다.
Hugging Face는 2016년에 설립되어 자연어 처리 모델을 모든 사람에게 접근할 수 있도록 하기 위해 노력하고 있습니다. 상업적인 회사임에도 불구하고, Hugging Face는 사람들이 그리고 조직이 트랜스포머 모델을 저렴하게 구축하고 사용할 수 있도록 도와주는 다양한 오픈소스 자원을 제공합니다. 기계 학습은 컴퓨터가 패턴을 인식하여 작업을 수행하도록 가르치는 것입니다. 深層 학습은 기계 학습의 하위 집합으로, 독립적으로 학습하는 네트워크를 생성합니다. 트랜스포머는 입력 데이터를 효과적으로 그리고 유연하게 사용하는 深層 학습 아키텍처의 한 종류로, 대규모 언어 모델을 구축하는 데 널리 사용됩니다.
Hugging Face가 자연어 처리 및 LLM 프로젝트를 어떻게 지원하는가
Hugging Face는 LLM을 더 쉽게 사용할 수 있도록 다음을 제공합니다:
- 선택할 수 있는 사전 훈련된 모델의 범위
- 특정 요구 사항에 맞게 이러한 모델을 미세 조정할 수 있는 도구 및 예제
- 다양한 환경에 대한 쉽게 배포할 수 있는 옵션
Hugging Face를 통해 제공되는 훌륭한 자원 중 하나는 오픈 LLM 리더보드입니다. 이는 대규모 언어 모델 및 채팅봇의 효율성을 체계적으로 모니터링, 순위付け, 측정하는 포괄적인 플랫폼으로, 오픈소스 도메인에서 발전된 분석을 제공합니다.
LLM 벤치마크는 모델을 4가지 메트릭을 통해 측정합니다:
- AI2 Reasoning Challenge (25-shot) — 초등학교 과학 교과서 주제에 대한 질문 시리즈
- HellaSwag (10-shot) — 인간에게는 간단하지만 최신 모델에게는 어려운 상식 추론 테스트
- MMLU (5-shot) — 57가지 다양한 도메인에 걸친 텍스트 모델의 능력에 대한 다면적인 평가
- TruthfulQA (0-shot) — 모델이 온라인에서 자주 접하는 잘못된 정보를 반복하는 경향을 확인하는 도구
벤치마크는 “25-shot”, “10-shot”, “5-shot”, “0-shot”과 같은 용어를 사용하여 모델에 평가过程에서 제공되는 프롬프트 예제의 수를 나타냅니다. “few-shot” 패러다임에서는 모델에 응답을 안내하는 데 도움이 되는 소량의 예제가 제공됩니다. “0-shot” 설정에서는 모델에 예제가 제공되지 않으며, 사전 지식만을 사용하여 적절하게 응답해야 합니다.
Hugging Face의 구성 요소
파이프라인
‘파이프라인’은 Hugging Face의 트랜스포머 라이브러리의 일부입니다. 이는 Hugging Face 저장소에 있는 사전 훈련된 모델을 쉽게 사용할 수 있도록 도와주는 기능입니다. 이는 감성 분석, 질문 응답, 마스킹 언어 모델링, 개체명 인식, 요약과 같은 다양한 작업을 위한直관적인 API를 제공합니다.
파이프라인은 세 가지 주요 Hugging Face 구성 요소를 통합합니다:
- 토크나이저: 모델이 이해할 수 있는 형식으로 텍스트를 변환합니다.
- 모델: 실제 예측이 이루어지는 파이프라인의 핵심입니다.
- 포스트 프로세서: 모델의 원시 예측을 인간이 읽을 수 있는 형식으로 변환합니다.
이러한 파이프라인은 광범위한 코딩을 줄이고 다양한 자연어 처리 작업을 수행하기 위한 사용자 친화적인 인터페이스를 제공합니다.
Hugging 라이브러리를 사용한 트랜스포머 응용
Hugging Face 라이브러리의 주요 특징은 트랜스포머 라이브러리입니다. 이는 모델과 필요한 사전 및 사후 처리 단계를 연결하여 분석 프로세스를 간소화합니다. 라이브러리를 설치하고 가져오려면 다음 명령을 사용합니다:
pip install -q transformers from transformers import pipeline
이렇게 하면 감성 분석과 같은 자연어 처리 작업을 시작할 수 있습니다. 라이브러리의 강력한 pipeline() 함수는 다른 파이프라인을 포함하는 허브 역할을 하며, 오디오, 비전, 멀티모달 도메인에서 작업별 응용 프로그램을 제공합니다.
실제 응용
텍스트 분류
Hugging Face의 pipeline() 함수를 사용하여 텍스트 분류를 쉽게 수행할 수 있습니다. 텍스트 분류 파이프라인을 초기화하려면 다음을 사용합니다:
classifier = pipeline("text-classification")
실제 사용을 위해 파이프라인에 문자열이나 문자열 목록을 입력하여 예측을 얻을 수 있습니다. 예측은 Python의 Pandas 라이브러리를 사용하여 시각화할 수 있습니다. 다음은 이를 보여주는 Python 코드입니다:
sentences = ["나는 AI의 멋진 세계를紹介하기 위해 매우 기쁩니다.",
"희망적으로, 당신에게 실망시키지 않을 것입니다."]
# 각 문장에 대한 분류 결과를 얻습니다.
results = classifier(sentences)
# 각 결과를 반복하고 레이블과 점수를 출력합니다.
for i, result in enumerate(results):
print(f"결과 {i + 1}:")
print(f" 레이블: {result['label']}")
print(f" 점수: {round(result['score'], 3)}\n")
출력
결과 1: 레이블: POSITIVE 점수: 1.0 결과 2: 레이블: POSITIVE 점수: 0.996
개체명 인식
개체명 인식은 텍스트에서 실제 객체를 추출하는 데 중요한 역할을 합니다. 개체명 인식 파이프라인을 사용하여 이러한 엔티티를 효과적으로 식별할 수 있습니다:
ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "엘론 머스크는 스페이스X의 CEO입니다."
outputs = ner_tagger(text)
print(outputs)
출력
엘론 머스크: PER, 스페이스X: ORG
질문 응답
질문 응답에는 특정 질문에 대한 정확한 답변을 주어진 컨텍스트에서 추출하는 것이 포함됩니다. 질문 응답 파이프라인을 초기화하고 질문과 컨텍스트를 입력하여 원하는 답변을 얻을 수 있습니다:
reader = pipeline("question-answering")
text = "Hugging Face는 자연어 처리를 위한 툴을 만드는 회사입니다. 뉴욕에 있으며, 2016년에 설립되었습니다."
question = "Hugging Face는 어디에 있습니까?"
outputs = reader(question=question, context=text)
print(outputs)
출력
{'score': 0.998, 'start': 51, 'end': 60, 'answer': '뉴욕'}
Hugging Face의 pipeline() 함수는 다양한 작업을 위한 사전 구축된 파이프라인을 제공합니다. 다음은 사용 가능한 작업의 일부에 대한 세부 정보입니다:
표: Hugging Face 파이프라인 작업
| 작업 | 설명 | 파이프라인 식별자 |
| 텍스트 생성 | 주어진 프롬프트에 따라 텍스트를 생성합니다. | pipeline(task=”text-generation”) |
| 요약 | 길い 텍스트 또는 문서를 요약합니다. | pipeline(task=”summarization”) |
| 이미지 분류 | 입력 이미지를 레이블합니다. | pipeline(task=”image-classification”) |
| 오디오 분류 | 오디오 데이터를 분류합니다. | pipeline(task=”audio-classification”) |
| 시각적 질문 응답 | 이미지와 질문을 사용하여 질문에 답변합니다. | pipeline(task=”vqa”) |
자세한 설명과 더 많은 작업에 대한 정보는 Hugging Face의 파이프라인 문서를 참조하십시오.
Hugging Face가 Rust에 초점을 맞추는 이유

Hugging Face Safetensors와 토크나이저 GitHub 페이지
Hugging Face(HF) 에코시스템은 라이브러리에서 Rust를 사용하기 시작했습니다. 예를 들어, Safetensors와 토크나이저에서 Rust를 사용합니다.
Hugging Face는 최근에 Rust로 구축된 새로운 기계 학습 프레임워크인 Candle을 출시했습니다. 전통적인 프레임워크와 달리 Python이 아닌 Rust로 구축되었습니다. Rust를 사용하는 목적은 성능을 향상시키고 사용자 경험을 개선하는 것입니다. 또한 GPU 작업을 지원합니다.
Candle의 주요 목표는 서버리스 추론을 가능하게 하여 경량 바이너리의 배포를 가능하게 하고, 생산 작업에서 Python을 제거하여 Python의 오버헤드가 프로세스를 느리게 하는 것을 방지하는 것입니다. 이 프레임워크는 PyTorch와 같은 전체 기계 학습 프레임워크가 클러스터에서 인스턴스를 생성할 때 느리고 느리다는 문제를 해결하기 위한 솔루션으로 나옵니다.
Rust가 Python보다 더 많이 선호되는 이유를 살펴보겠습니다.
- 속도 및 성능 – Rust는 Python보다 훨씬 빠르며, 기계 학습 프레임워크에서 Python의 성능이 때때로 느려질 수 있는 문제를 해결합니다. Python의 전역 인터프리터 잠금(GIL)으로 인해 성능이 저하될 수 있지만, Rust는 이러한 문제를 겪지 않습니다.
- 안전성 – Rust는 가비지 수집기 없이 메모리 안전성을 보장합니다. 이는 동시 시스템의 안전성을 보장하는 데 중요합니다. 이는 Safetensors와 같은 영역에서 데이터 구조를 처리할 때 안전성이 우선시되는 경우에 특히 중요합니다.
Safetensors
Safetensors는 Rust의 속도와 안전성 기능을 활용합니다. Safetensors는 텐서를 조작하는 것을 포함하며, Rust를 사용하면 이러한 작업이 빠르고 안전하게 수행됩니다.
토크나이저
토크나이저는 Rust를 사용하여 문장이나 구를 더 작은 단위로 나누는 작업을 처리합니다. Rust를 사용하면 토큰화 프로세스가 정확하고 빠르게 수행됩니다.
Hugging Face의 토크나이저의 핵심은 서브워드 토큰화의 개념입니다. 이는 단어 수준과 문자 수준의 토큰화 사이에서 균형을 찾는 것을 목표로 하며, 정보를 유지하면서 어휘 크기를 최적화합니다. 서브워드 토큰화는 “##ing”이나 “##ed”와 같은 서브토큰을 생성하여 의미를 유지하면서도 어휘 크기를 제어합니다.
서브워드 토큰화는 언어 패턴을 광범위하게 분석하여 효율적인 서브워드 토크나이저를 설계하는 훈련 단계를 포함합니다. 생성된 토크나이저는 알려진 서브워드로 새로운 단어를 분할하여 높은 수준의 의미적 이해를 유지합니다.
토크나이제이션 구성 요소
[caption id="attachment_190651" align="aligncenter" width="613"]
토크나이저 라이브러리는 토크나이제이션 프로세스를 여러 단계로 나눕니다. 각 단계는 토크나이제이션의 다른 측면을 다룹니다. 이러한 구성 요소를 살펴보겠습니다:
- 정규화기: 입력 문자열에 초기 변환을 적용하여 필요한 조정을 수행합니다. 이것은 소문자 변환, 유니코드 정규화, 스트리핑 등을 포함합니다.
- 전처리 토크나이저: 입력 문자열을 사전 세그먼트로 분할하여 사전 정의된 규칙에 따라 분할을 결정합니다. 이것은 공백으로 구분하는 것과 같습니다.
- 모델: 서브토큰을 발견하고 생성하여 입력 데이터에 맞게 적응합니다. 이것은 토크나이제이션의 핵심입니다.
- 사후 처리기: 생성된 토큰을 변환하여 트랜스포머 기반 모델과 호환되도록 합니다. 이것은 BERT와 같은 모델에서 [CLS]와 [SEP] 토큰을 추가하는 것을 포함합니다.
Hugging Face 토크나이저를 시작하려면 `pip install tokenizers` 명령을 사용하여 라이브러리를 설치하고 Python 환경에서 가져옵니다. 라이브러리는 대량의 텍스트를 매우 짧은 시간에 토큰화할 수 있으므로, 모델 훈련과 같은 더 집중적인 작업을 위해 귀중한 컴퓨팅 자원을 절약할 수 있습니다.
토크나이저 라이브러리는 Rust를 사용하며, C++와 유사한 구문 구조를 가지지만, 새로운 프로그래밍 언어 설계 개념을 도입합니다. Python 바인딩을 통해 Rust의 성능을 즐기면서 Python 환경에서 작업할 수 있습니다.
데이터셋
데이터셋은 AI 프로젝트의 기초입니다. Hugging Face는 다양한 자연어 처리 작업을 위한 광범위한 데이터셋을 제공합니다. 이러한 데이터셋을 효율적으로 사용하려면 로딩하고 분석하는 과정을 이해하는 것이 중요합니다. 다음은 Hugging Face에서 사용 가능한 데이터셋을 탐색하는 방법을 보여주는 Python 스크립트입니다:
from datasets import load_dataset
# 데이터셋 로드
dataset = load_dataset('squad')
# 첫 번째 항목 표시
print(dataset[0])
이 스크립트는 `load_dataset` 함수를 사용하여 SQuAD 데이터셋을 로드합니다. SQuAD는 질문 응답 작업에 인기 있는 선택입니다.
사전 훈련된 모델 사용 및 모든 것을 통합
사전 훈련된 모델은 많은 深層 학습 프로젝트의 백본을 형성합니다. 이는 연구자와 개발자가 처음부터 시작하지 않고, 자신의 프로젝트를 시작할 수 있도록 합니다. Hugging Face는 다양한 사전 훈련된 모델을 제공합니다. 다음 코드는 이러한 모델을 탐색하는 방법을 보여줍니다:
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
# 사전 훈련된 모델 및 토크나이저 로드
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
# 모델 아키텍처 표시
print(model)
모델과 토크나이저를 로드한 후, 텍스트에서 질문에 대한 답변을 추출하는 함수를 만들 수 있습니다. 이 함수는 토크나이저를 사용하여 입력 텍스트와 질문을 모델이 이해할 수 있는 형식으로 처리한 다음, 모델에 이를 입력하여 답변을 얻습니다:
def get_answer(text, question): # 입력 텍스트와 질문 토크나이징 inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True) outputs = model(**inputs) # 시작과 끝 점수 얻기 answer_start = torch.argmax(outputs.start_logits) answer_end = torch.argmax(outputs.end_logits) + 1 # 답변 생성 answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end])) return answer
이 함수는 텍스트와 질문을 입력으로 받아 답변을 반환합니다. 다음은 이 함수를 사용하는 예입니다:
text = """
에펠 탑은 파리, 프랑스에 있는 세계에서 가장 아이코닉한 랜드마크 중 하나입니다. 그것은 구스타프 에펠에 의해 설계되었으며 1889년에 완성되었습니다. 탑의 높이는 324미터이며, 완성 당시에는 세계에서 가장 높은 인공 구조물이었습니다.
"""
question = "에펠 탑은誰에 의해 설계되었습니다?"
# 답변 얻기
answer = get_answer(text, question)
print(f"질문에 대한 답변은 {answer}입니다.")
# 출력: 질문에 대한 답변은 구스타프 에펠입니다.
이 스크립트는 Hugging Face의 트랜스포머 라이브러리를 사용하여 간단한 질문 응답 시스템을 구축하는 방법을 보여줍니다. 이러한 개념을 잘 이해하려면 Google Colab 노트북에서 직접 실험하는 것이 좋습니다.
결론
Hugging Face는 오픈소스 도구, 사전 훈련된 모델 및 사용자 친화적인 파이프라인을 통해 AI 세계를 탐색하기 쉽게 만들어줍니다. 또한 Rust를 통합하여 성능과 안전성을 향상시키는 데 노력하고 있습니다. Hugging Face의 변혁적인 작업은 고급 AI 도구에 대한 접근성을 민주화하는 것 외에도, AI 공간에서 학습과 개발을 위한 협력적인 환경을 조성하여, 모든 사람이 AI를 사용할 수 있는 미래를 가능하게 합니다.















