튜링상 수상 등 AI의 4대 천황중 한명으로 불리는 요슈아 벤지오 몬트리올대 컴퓨터공학부 교수는 “오픈AI의 채팅형 AI 챗GPT는 다른 회사에서 개발한 다른 어떤 제품보다 먼저 공개됐다는 이점이 크다. 다른 회사들도 유사한 기술을 지니고 있다. 챗GPT는 AI 기술 ‘게임 체인저’라기보다는 사회 그리고 비즈니스 관점에서 게임 체인저라고 볼 수 있다.”라고 말했습니다.
언어모델의 짧은 개발 역사를 보면 아직 발전의 시초라고 볼 수 있는데요, 마치 분위기가 오픈AI 로 AI 챗봇 기술은 평정된 것 처럼 받아들입니다.
이유는 높은 기술 장벽때문에 어려울 것이라고 하는데요,
비쿠나는 저렴한 비용에 여러분 노트북에서도 설치가 가능하며 GPU가 없어도 실행이 가능합니다.(100배 정도 느리지만)
검색 증강 생성(Retrieval-Augmented Generation, RAG) 기술은 Facebook AI Research(FAIR)에서 개발되었습니다. 이는 FAIR의 연구자들이 2020년에 발표한 논문 “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”에서 제안되었습니다. 이후 RAG 기술은 많은 자연어처리 연구 분야에서 많은 관심을 받고 있습니다. RAG는 기존의 자연어 생성 모델에서 검색 결과를 활용하여 보다 정확하고 일관성 있는 결과를 생성하는 기술입니다.
검색 증강 생성(Retrieval-Augmented Generation, RAG)은 생성 모델과 검색 기반 모델을 결합한 기술입니다. 이 기술은 기존의 생성 모델의 한계점 중 하나인 지식의 부족을 극복하기 위해 검색 기반 모델을 통해 추가적인 지식을 수집하여 생성 모델의 답변에 반영합니다. 이를 통해 보다 정확하고 풍부한 답변을 생성할 수 있게 됩니다.
생성 모델은 학습 데이터에 나타나지 않은 맥락에서 일반화할 수 있는 능력이 한계가 있어, 학습 데이터에 대한 패턴 이외에는 적절한 응답을 생성하기 어려운 경우가 있습니다.
RAG는 이러한 한계를 극복하기 위해 검색 기반 모델을 결합합니다. 검색 기반 모델은 미리 수집된 대규모의 외부 지식 그래프를 이용하여 입력 문장과 관련 있는 정보를 추출하고, 이를 생성 모델의 입력으로 사용하여 적절한 응답을 생성합니다. 이를 통해 생성 모델이 예측하기 어려운 지식이나 정보를 활용할 수 있고, 보다 정확하고 일관된 응답을 생성할 수 있습니다.
예를 들어 설명하면, 남녀의 관계라는 주제에 대한 질문이 있다고 가정해보겠습니다.
만약 생성 모델만을 사용하여 질문에 대한 답변을 생성하려고 하면, 생성 모델은 질문에 대한 답변을 생성하기 위해 이전에 학습한 데이터를 기반으로 예측을 수행합니다. 그러나 생성 모델은 이전에 학습하지 않은 새로운 지식이나 정보에 대해서는 예측을 정확하게 수행하기 어렵습니다.
하지만 검색 증강 생성(RAG) 기술을 사용하면, 생성 모델과 함께 검색 기반 모델을 결합하여 이전에 학습하지 않은 새로운 지식이나 정보를 활용할 수 있습니다. 예를 들어, 남녀의 관계라는 주제에 대한 질문에 대한 답변을 생성할 때, 검색 기반 모델을 사용하여 관련된 문서나 뉴스 기사 등의 정보를 검색하고, 생성 모델과 결합하여 보다 정확하고 일관된 답변을 생성할 수 있습니다.
이러한 방식으로 검색 증강 생성(RAG) 기술은 생성 모델이 예측하기 어려운 지식이나 정보를 활용할 수 있고, 보다 정확하고 일관된 응답을 생성할 수 있게 됩니다.
검색 증강 생성(Retrieval-Augmented Generation, RAG) 기술은 다양한 분야에서 활용될 수 있습니다.
의료 분야에서는, 환자의 증상과 관련된 질문에 대한 답변을 생성하는 데 활용될 수 있습니다. 의료 전문가들은 RAG 모델을 학습시켜, 환자의 증상과 관련된 문서나 연구 논문 등에서 정보를 검색한 후, 이를 기반으로 질문에 대한 답변을 생성할 수 있습니다.
법률 분야에서는, RAG 모델을 활용하여 법률 문서 검색과 관련된 질문에 대한 답변을 생성할 수 있습니다. 이를 통해 변호사나 법률 전문가들은 빠르게 정보를 검색하고, 관련된 사례나 판례를 기반으로 법률 문제에 대한 답변을 생성할 수 있습니다.
이처럼 RAG 기술은 다양한 분야에서 정보 검색과 생성에 활용될 수 있으며, 전문 인공지능 서비스에서도 많이 활용되고 있습니다.
검색 증강 생성(Retrieval-Augmented Generation, RAG) 기술과 검색엔진 이용.
검색 증강 생성(Retrieval-Augmented Generation, RAG) 기술에는 검색엔진이 필요합니다. 이 기술에서는 먼저 검색 엔진을 사용하여 대량의 문서 또는 정보에서 적절한 문서나 정보를 검색합니다. 그런 다음, 검색된 문서나 정보를 생성 모델에 제공하여 보다 정확하고 일관된 응답을 생성합니다. 검색 엔진은 RAG 기술에서 중요한 역할을 담당하며, 검색 쿼리 처리 및 검색된 결과를 적절하게 전달하는 데 사용됩니다. RAG 기술에서는 대량의 문서나 정보에서 필요한 정보를 검색하기 위해 검색 엔진을 사용하며, 이를 통해 생성 모델이 예측하기 어려운 지식이나 정보를 보다 쉽게 활용할 수 있습니다.
검색 증강 생성(Retrieval-Augmented Generation, RAG) 기술에는 검색엔진이 필요합니다. 이 기술에서는 먼저 검색 엔진을 사용하여 대량의 문서 또는 정보에서 적절한 문서나 정보를 검색합니다. 그런 다음, 검색된 문서나 정보를 생성 모델에 제공하여 보다 정확하고 일관된 응답을 생성합니다. 검색 엔진은 RAG 기술에서 중요한 역할을 담당하며, 검색 쿼리 처리 및 검색된 결과를 적절하게 전달하는 데 사용됩니다. RAG 기술에서는 대량의 문서나 정보에서 필요한 정보를 검색하기 위해 검색 엔진을 사용하며, 이를 통해 생성 모델이 예측하기 어려운 지식이나 정보를 보다 쉽게 활용할 수 있습니다.
검색 기반 모델과 생성 모델은 각각 다음과 같은 역할을 합니다.
검색 기반 모델: 검색 기반 모델은 데이터베이스에서 원하는 정보를 검색하고, 검색된 정보를 임베딩하여 벡터 공간에 매핑합니다. 이 때 검색 기반 모델로 Faiss와 Pyserini를 사용할 수 있습니다. 예를 들어, 의료 정보에서 남녀 각각의 건강 문제에 대한 정보를 검색 기반 모델을 사용하여 찾아내고, 각각의 정보를 벡터로 매핑합니다.
생성 모델: 생성 모델은 검색된 정보를 바탕으로 요약, 질문 응답 등 다양한 자연어 생성 태스크를 수행합니다. 이 때 생성 모델로 Hugging Face Transformers 라이브러리를 사용할 수 있습니다. 예를 들어, 검색 기반 모델에서 찾아낸 건강 정보를 바탕으로, 해당 건강 문제에 대한 자세한 설명을 제공하거나, 해당 문제와 관련된 질문에 대한 응답을 생성합니다.
따라서 검색 증강 생성(RAG) 기술은 검색 기반 모델로부터 검색된 정보를 생성 모델에 입력하여 보다 정확하고 일관된 응답을 생성할 수 있도록 합니다.
향후 RAG 기술의 현황과 발전 방향
현재까지는 Facebook AI Research의 RAG 기술이 가장 널리 알려진 RAG 기술입니다. 그러나 최근에는 다른 기업 및 연구자들도 RAG와 관련된 연구 및 개발을 수행하고 있습니다. 예를 들어, OpenAI에서는 GPT-3와 함께 RAG 모델을 사용하여 일부 벤치마크 작업에서 좋은 성능을 보였습니다. 또한, 구글의 연구자들은 T5와 함께 RAG 모델을 개발하고 있으며, Microsoft에서도 RAG와 관련된 연구를 수행하고 있습니다. 이러한 기업 및 연구자들은 각자의 방식으로 RAG 모델을 구현하고 활용하여, 향후 RAG 기술의 발전을 이끌어낼 것으로 기대됩니다.
RAG 기술의 발전 방향은 크게 두 가지로 볼 수 있습니다.
첫째, 검색 기반 모델과 생성 모델 간의 상호작용을 보다 개선하여 더욱 정확하고 효과적인 응답을 생성하는 것입니다. 예를 들어, 더 나은 검색 모델을 개발하거나 생성 모델의 학습 방식을 개선하여 더 나은 응답을 생성할 수 있도록 하는 등의 연구가 진행될 것입니다.
둘째, RAG 기술을 다양한 분야에 활용하는 방법을 연구하는 것입니다. 예를 들어, 의료 분야에서는 환자 진료 내역과 의학 논문 등을 검색 기반 모델에 활용하여 질병 진단과 치료 방법 등에 대한 전문적인 정보를 제공하는데 활용될 수 있습니다. 또한 법률 분야에서는 판례나 법률 관련 논문 등을 검색 기반 모델에 활용하여 전문가 수준의 법률 자문을 제공하는데 활용될 수 있습니다.
앞으로 RAG 기술은 보다 정확하고 효과적인 인공지능 서비스를 제공하는데 큰 역할을 할 것으로 기대됩니다.
NSMC(Naver Sentiment Movie Corpus) 데이터셋은 20만 개의 영화 리뷰 데이터로 구성되어 있으며, 이를 바탕으로 긍정적인지, 부정적인지를 분류하는 감성 분류(Sentiment Analysis) 문제를 해결하는데 활용됩니다.
NSMC 데이터셋은 한글 데이터셋 중에서 가장 많이 사용되는 데이터셋 중 하나이며, 한국어 감성 분류 문제를 다루기 위한 대표적인 데이터셋으로 활용되고 있습니다. 이 데이터셋은 영화 리뷰에 대한 긍정/부정 정보를 레이블로 제공하고 있으며, 이를 학습 데이터로 활용하여 머신러닝 모델을 학습시킬 수 있습니다.
따라서 NSMC 데이터셋을 활용하면 한국어 감성 분류에 대한 다양한 연구나 분석을 수행할 수 있으며, 새로운 머신러닝 모델을 학습시키고 검증하는데에도 활용됩니다.
NSMC 데이터셋에서 train 데이터는 모델을 학습시킬 때 사용하는 원본 데이터이며, test 데이터는 학습된 모델의 성능을 평가하기 위해 사용하는 데이터로, 모델이 예측한 결과물과 실제 정답을 비교하여 모델의 성능을 측정합니다. 일반적으로 모델을 학습할 때 train 데이터와 test 데이터를 나누어서 사용하며, 모델의 성능이 일반화되고 테스트 데이터에 대해서도 잘 동작하는지 확인합니다.
https://raw.githubusercontent.com/e9t/nsmc/master/ratings_train.txt
NSMC 데이터셋의 경우, 각 영화 리뷰가 긍정(1)인지 부정(0)인지를 나타내는 레이블 데이터를 포함하고 있습니다. 이 레이블 데이터는 실제로 영화 리뷰를 작성한 사용자들이 부여한 점수를 기반으로 생성되었습니다. 예를 들어, 10점 만점에 8점 이상을 부여한 리뷰는 긍정(1)으로 분류되었고, 4점 이하를 부여한 리뷰는 부정(0)으로 분류되었습니다. 따라서 이 레이블 데이터는 사람이 임의로 만든 것이 아니라 실제 사용자들의 평가를 기반으로 생성된 것입니다.
ratings_test.txt 파일은 NSMC 데이터셋에서 제공하는 영화 리뷰 데이터 중에서 학습에 사용되지 않은 새로운 데이터로, 학습된 모델의 일반화 성능을 평가하기 위한 목적으로 제공됩니다. 따라서 해당 파일에 포함된 리뷰 데이터는 모두 실제로 존재하는 데이터이며, 해당 데이터에 대한 레이블(긍정/부정)을 예측하여 모델의 성능을 평가합니다.
예를 들어 데이터의 6270596 굳 ㅋ 1도 가상으로 만든 데이터가 아니며, 해당 리뷰는 실제로 존재하는 리뷰입니다. 이 리뷰에서는 “굳”이라는 축약어와 “ㅋ”이라는 이모티콘을 사용하여 긍정적인 평가를 전달하고 있으며, 해당 리뷰에 대한 레이블은 1(긍정)입니다.
NSMC 데이터셋을 이용하여 입력된 문장이 긍정인지 부정인지 판단하는 간단한 파이썬 코드는 다음과 같습니다. 이 코드는 train 데이터를 이용하여 CountVectorizer를 이용하여 단어장을 생성하고, 이를 이용하여 입력된 문장을 벡터화하여 Logistic Regression 모델을 이용하여 긍정/부정을 판단합니다.
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
# 데이터 불러오기
train_data = pd.read_csv('ratings_train.txt', sep='\t', na_values='NaN')
test_data = pd.read_csv('ratings_test.txt', sep='\t', na_values='NaN')
# null 값 제거
train_data.dropna(inplace=True)
test_data.dropna(inplace=True)
# CountVectorizer를 이용하여 단어장 생성
vectorizer = CountVectorizer(token_pattern=r'\b\w+\b')
vectorizer.fit(train_data['document'])
# train 데이터를 이용하여 Logistic Regression 모델 생성
lr = LogisticRegression(max_iter=5000)
train_X = vectorizer.transform(train_data['document'])
train_y = train_data['label']
lr.fit(train_X, train_y)
# test 데이터를 이용하여 예측 수행
test_X = vectorizer.transform(test_data['document'])
pred_y = lr.predict(test_X)
# 사용자로부터 입력 받은 문장 예측 수행
user_input = input("영화 리뷰를 입력하세요: ")
input_X = vectorizer.transform([user_input])
result = lr.predict(input_X)
# 예측 결과 출력
if result[0] == 1:
print("긍정적인 리뷰입니다.")
else:
print("부정적인 리뷰입니다.")
CountVectorizer는 입력된 텍스트 데이터를 분석하여 단어장을 생성하는 역할을 합니다. 단어장이란, 분석된 텍스트 데이터에서 중복되지 않는 단어들의 집합을 의미합니다. 이때, 기본적으로는 공백을 기준으로 단어를 분리합니다.
ratings_train.txt 의 “3819312 흠…포스터보고 초딩영화줄….오버연기조차 가볍지 않구나 1 “를 이용해 설명해 보겠습니다.
위 코드에서는 train_data['document']의 텍스트 데이터를 이용하여 CountVectorizer를 통해 단어장을 생성하는 부분입니다.
이를 ratings_train.txt 파일의 텍스트 데이터인 ‘흠…포스터보고 초딩영화줄….오버연기조차 가볍지 않구나’로 대체해보면 다음과 같습니다.이를 실행하면 ‘흠’, ‘포스터보고’, ‘초딩영화줄’, ‘오버연기조차’, ‘가볍지’, ‘않구나’ 등의 단어가 단어장으로 생성됩니다. 이 단어장은 이후에 다른 텍스트 데이터에 대해서도 적용되어 해당 데이터를 벡터화하는 데 사용됩니다.
위에서 주어진 코드에서는 token_pattern=r'\b\w+\b' 옵션을 통해 정규식 패턴을 설정하여, 단어를 추출할 때는 알파벳 또는 숫자가 1개 이상인 문자열만 고려하도록 설정하였습니다. 따라서, “흠”, “포스터보고”, “초딩영화줄”, “오버연기조차”, “가볍지”, “않구나” 등의 단어가 추출됩니다.
이부분만 해 보겠습니다. 실행하기 (NSMC-1)
from sklearn.feature_extraction.text import CountVectorizer
# ratings_train.txt 파일에서 한 줄을 가져옴
text = '흠...포스터보고 초딩영화줄....오버연기조차 가볍지 않구나'
# CountVectorizer를 이용하여 단어장 생성
vectorizer = CountVectorizer(token_pattern=r'\b\w+\b')
vectorizer.fit([text])
# 단어장에 생성된 단어 출력
print(vectorizer.get_feature_names())
CountVectorizer는 텍스트 데이터를 입력 받아 각 단어가 몇 번 나타나는지를 세어서 단어장(vocabulary)을 생성하는 도구입니다. 예를 들어, “흠”, “포스터보고”, “초딩영화줄”, “오버연기조차”, “가볍지”, “않구나” 등의 단어가 추출되면, 이 단어들을 단어장에 등록하고 각 단어에 인덱스를 부여합니다. 이후, 각 문장을 벡터화할 때는 각 단어가 해당 문장에서 몇 번 나타나는지를 세어서 각 단어의 인덱스에 해당하는 원소에 그 횟수를 넣어줍니다. 이렇게 벡터화하면, 각 문장은 단어의 빈도수로 이루어진 벡터로 표현됩니다.
벡터 정보의 해당 단어의 횟수 정보와 단어 내용 자체는 CountVectorizer에서 생성된 단어장(vocabulary)에 저장됩니다. CountVectorizer는 입력된 텍스트 데이터에서 단어를 추출하고, 추출한 단어들을 기반으로 단어장을 생성합니다. 이때, 각 단어는 고유한 인덱스 번호를 부여받습니다.
예를 들어, “초딩영화줄”과 “오버연기조차”가 추출되었고, 이들이 단어장에서 각각 0번과 1번의 인덱스를 부여받았다면, “초딩영화줄”이 3번, “오버연기조차”가 5번 등장한다면, 벡터 정보에서는 0번 인덱스에 해당하는 값이 3이 되고, 1번 인덱스에 해당하는 값이 5가 됩니다. 이렇게 벡터 정보와 단어 내용이 인덱스를 활용하여 연결되는 것입니다.
Logistic Regression은 통계학에서 개발된 분류 모델 중 하나로, 데이터를 분석하여 해당 데이터가 어떤 범주(class)에 속하는지를 예측하는 모델입니다. 이 모델은 입력 변수의 가중치 합을 로지스틱 함수(sigmoid function)에 넣어서 결과를 0~1사이의 값으로 출력하고, 이를 이진 분류(binary classification)에서 확률값으로 해석하여 예측합니다.
위의 코드에서는 sklearn 라이브러리의 LogisticRegression 클래스를 이용하여 Logistic Regression 모델을 생성합니다. 이를 위해 max_iter 매개변수를 5000으로 설정하여 최적화를 위한 최대 반복 횟수를 설정합니다. 이후, CountVectorizer 클래스로부터 생성된 단어장에서 transform 메소드를 이용하여 train 데이터의 문서들을 벡터 형태로 변환한 후, 이를 train_X 변수에 저장합니다. train_y 변수에는 train 데이터의 레이블을 저장합니다. 마지막으로, LogisticRegression 모델의 fit 메소드를 이용하여 train_X와 train_y를 이용하여 모델을 학습시킵니다.
한국어로는 ‘말뭉치’ 혹은 ‘말모둠’으로 번역하는, 코퍼스(corpus)는 글 또는 말 텍스트를 모아 놓은 것입니다. 말뭉치는 주로 기계 학습 알고리즘을 훈련시키기 위해 사용되며, 텍스트 분류, 정보 검색, 기계 번역, 감성 분석 등에 사용됩니다. 대규모 말뭉치는 자연어 처리 모델의 성능을 크게 향상시킬 수 있으며, 그 중에서도 한국어 말뭉치 데이터는 한국어 자연어 처리 분야에서 매우 중요한 자원입니다.
ChatGPT API를 이용해 한국어 말뭉치를 사용해 서비스를 고도화 할 때 주의해야 할 점은 다음과 같습니다.
데이터의 출처와 사용에 대한 법적 문제 : 머신러닝을 위해서는 충분한 데이터가 필요합니다. 그러나 데이터의 출처나 사용에 대해서는 법적 문제가 발생할 수 있습니다. 따라서 데이터의 출처와 사용에 대한 법적인 제약사항을 확인하고, 이에 따라 데이터를 사용해야 합니다.
데이터의 품질과 양질의 데이터 확보: 데이터의 품질과 양질의 데이터 확보는 머신러닝 알고리즘의 성능과 결과에 영향을 미칩니다. 따라서 적절한 크기와 품질의 데이터를 사용하여 머신러닝 모델을 학습시켜야 합니다.
사용자의 프라이버시 보호: 서비스 이용 중 사용자의 프라이버시 보호는 매우 중요합니다. 머신러닝 모델을 학습시키기 위해서는 사용자의 데이터를 수집할 수 있습니다. 이 때, 사용자의 데이터를 보호하고 적절한 보안 조치를 취해야 합니다.
데이터 전처리와 모델 학습에 대한 기술적인 이해: 한국어 말뭉치를 이용해 머신러닝 모델을 학습시키기 위해서는 데이터 전처리와 모델 학습에 대한 기술적인 이해가 필요합니다. 이를 위해서는 머신러닝과 자연어 처리 기술에 대한 이해가 필요하며, 이를 충분히 습득해야 합니다. 기본적인 머신러닝에 대해서 배우고자 하시는 분은
샵투스쿨의 왕초보! 텐서플로우 2.0 머신러닝 기초 강좌 를 보세요(무료).
그럼 아래의 한국어 말뭉치 데이터를 이용해 보겠습니다. (하나는 train, 하나는 test)
Chat GPT API는 미리 학습된 GPT 모델을 이용하여 자연어 생성을 수행하는 API입니다. 따라서, 한국어 말뭉치 데이터를 이용하여 Chat GPT API를 이용하려면, 다음과 같은 절차를 따르면 됩니다.
한국어 말뭉치 데이터 다운로드: 위에서 제공한 링크에서 다운로드할 수 있습니다. “ratings_train.txt”와 “ratings_test.txt” 두 개의 파일이 있습니다.
데이터 전처리: 말뭉치 데이터를 Chat GPT 모델이 이해할 수 있는 형태로 변환해야 합니다. 이를 위해서는 데이터를 텍스트 파일로 저장하고, 각 줄은 하나의 문장이어야 합니다. 또한, 줄 바꿈 문자를 이용하여 문장 구분을 해야 합니다.예시 코드
import os
input_file = 'ratings_train.txt'
output_file = 'korean_corpus.txt'
with open(input_file, 'r', encoding='utf-8') as f:
with open(output_file, 'w', encoding='utf-8') as out:
next(f) # 첫 번째 줄은 건너뜀
for line in f:
_, sentence, _ = line.strip().split('\t')
out.write(sentence + '\n')
또 전처리 작업에는 형태소 분석, 품사 태깅 등이 포함될 수 있습니다.
Chat GPT API 사용: 전처리된 말뭉치 데이터를 이용하여 Chat GPT API를 사용할 수 있습니다. API는 OpenAI에서 제공하는 GPT 모델을 이용하며, API 사용에는 인증키가 필요합니다. 아래는 한국어 말뭉치 데이터를 전처리하여 ChatGPT API를 이용하는 간단한 예시 코드입니다. 이 코드는 KoNLPy 패키지를 사용하여 한국어 형태소 분석을 수행하고, ChatGPT API를 이용하여 대화를 생성합니다.
import openai
from konlpy.tag import Komoran
# OpenAI API key 설정
openai.api_key = "YOUR_API_KEY"
# 한국어 형태소 분석기 설정
komoran = Komoran()
# 대화 생성 함수
def generate_text(prompt):
response = openai.Completion.create(
engine="davinci",
prompt=prompt,
max_tokens=60,
n=1,
stop=None,
temperature=0.5,
)
message = response.choices[0].text.strip()
return message
# 입력 문장
input_text = "안녕하세요. 오늘 날씨가 참 좋네요."
# 형태소 분석
tokens = komoran.pos(input_text)
# 분석 결과를 ChatGPT API 입력 형식에 맞게 가공
prompt = "The following is a conversation between a human and an AI. The human says, '{}'\n\nThe AI responds:".format(
" ".join(["{}|{}".format(token[0], token[1]) for token in tokens])
)
# 대화 생성
response = generate_text(prompt)
print("입력 문장:", input_text)
print("대화 생성 결과:", response)
이 코드는 입력 문장을 한국어 형태소 분석기를 이용해 형태소 단위로 분석한 후, ChatGPT API 입력 형식에 맞게 가공한 다음, API를 이용하여 대화를 생성합니다. 최종적으로 생성된 대화를 출력합니다.
GPT-J-6B 모델을 무료로 사용하기 위해서는 Hugging Face의 Transformers 라이브러리를 사용하면 됩니다. 아래는 Transformers 라이브러리를 사용하여 GPT-J-6B 모델을 로드하고 예측하는 예제 코드입니다.
from transformers import GPTJForCausalLM, GPT2Tokenizer
# GPT-J-6B 모델과 토크나이저 로드
tokenizer = GPT2Tokenizer.from_pretrained("EleutherAI/gpt-j-6B")
model = GPTJForCausalLM.from_pretrained("EleutherAI/gpt-j-6B")
# 입력 문장
input_text = "Hello, how are you?"
# 토큰화
input_ids = tokenizer.encode(input_text, return_tensors="pt")
# GPT-J-6B 모델에 입력하여 예측
output = model.generate(input_ids, max_length=50, do_sample=True)
# 디코딩하여 출력
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
위 코드에서 GPTJForCausalLM은 GPT-J-6B 모델 클래스를, GPT2Tokenizer는 GPT-J-6B 모델에 맞는 토크나이저를 의미합니다. 이 코드를 실행하면 “Hello, how are you? I’m doing well, thank you for asking.”와 같은 문장이 출력됩니다.
이 코드를 사용하기 위해서는 transformers 라이브러리가 설치되어 있어야 합니다. pip install transformers 명령어를 사용하여 라이브러리를 설치할 수 있습니다.
GPT-J-6B는 OpenAI가 공개한 GPT-3와 유사한 대형 언어 모델로, 6억 개의 파라미터로 이루어져 있습니다. GPT-J-6B는 OpenAI GPT-3와 같은 능력을 갖춘 모델로, 다양한 자연어 처리 태스크를 수행할 수 있습니다. GPT-J-6B는 JAX와 함께 공개되어 있으며, GPU를 이용하여 대규모 데이터 세트에서 훈련되었습니다.
JAX는 구글에서 개발한 머신러닝 프레임워크로, 자동 미분과 GPU 가속화를 지원하여 고성능의 머신러닝 연산을 가능하게 합니다. GPT-J-6B는 JAX 프레임워크를 사용하여 훈련되었기 때문에, 해당 모델을 사용하기 위해서는 JAX 라이브러리가 필요합니다.
GPT-J-6B를 사용하기 위해서는 직접 다운로드해서 사용하는 것이 아니라, Hugging Face나 OpenAI와 같은 API를 통해 사용하는 것이 일반적입니다.
또한 구글의 Corlab도 이용가능합니다.(Pro 버전으로 업그레이드 필요)
그러나 여기서는 직접 다운로드해서 본인의 컴퓨터를 사용해 작동시키고 싶으신 분을 위한 안내입니다.
작업 환경 구성(윈도우의 경우)
GPT-J-6B 모델을 사용하기 위해서는 다음과 같은 라이브러리, 프레임워크, 컴퓨팅 자원이 필요합니다.
OpenAI GPT API는 클라우드 기반의 인공지능 API로, OpenAI에서 운영하고 있습니다. 사용자는 API를 호출하여 GPT 모델을 사용할 수 있으며, 인터넷에 연결되어 있어야 합니다. 반면에 GPT-J-6B는 다운로드해서 사용하는 오픈소스 모델로, 로컬 환경에서 동작합니다. 따라서 인터넷 연결이 필요하지 않습니다. 또한 GPT-J-6B는 OpenAI에서 운영하는 API와는 달리, 상업적 사용에 대한 라이선스 문제가 있을 수 있습니다. 따라서 상업적 용도로 사용하기 전에 관련 법규 및 라이선스를 확인하는 것이 좋습니다.
데이터 수집: ChatGPT API는 대규모 데이터 세트를 필요로 하므로, 바이올린 레슨을 위한 GPT를 만들기 위해서는 바이올린 교본(특히 시노자키 바이올린 교본, 메뉴힌 등 대가의 텍스트가 많은 바이올린 학습서) 등의 대량의 바이올린 관련 데이터를 수집해야 합니다. 이를 위해서는 데이터 수집에 필요한 시간과 노력이 필요합니다.
ChatGPT API를 사용하여 바이올린 레슨을 위한 GPT를 만들 때, 텍스트 분석 기술을 사용하여 데이터를 처리해야 합니다. 이를 위해서는 자연어 처리(NLP) 기술을 이해하고, 적용할 수 있어야 합니다. 또 ChatGPT API를 사용하여 모델을 학습하는 경우, 학습에 사용되는 하드웨어 및 시간에 제한이 있을 수 있습니다. 이를 극복하기 위해서는 대규모 데이터 세트를 작은 배치로 나누어 학습하는 등의 방법을 사용하여 모델 학습을 최적화해야 합니다. 또한 ChatGPT API를 사용하여 모델을 평가할 때, 모델의 성능을 측정하는 데 사용되는 메트릭과 평가 방법에 대한 이해가 필요합니다. 이를 위해서는 모델 성능 평가에 대한 전문적인 지식과 경험이 필요할 수 있습니다.
만약 인공지능이나 머신러닝에 대한 경험이 없으시다면 샵투스쿨의 왕초보! 텐서플로우 2.0 머신러닝 기초 강좌를 수강하신다면 (무료 강좌임) 전체 적인 머신러닝에 대한 기술적 이해력을 가질 수 있습니다.
챗GPT API를 이용한 작업 과정
chatGPT API 등록: OpenAI의 chatGPT API를 사용하려면 먼저 API를 등록해야합니다. API를 등록하려면 OpenAI 웹 사이트에서 등록 프로세스를 따르고, 필요한 인증서 및 API 키를 받아야합니다. 일부 유료 서비스는 있지만, 계정 등록과 API key 생성은 무료입니다. 하지만 일부 제한 사항이 존재하며, 이를 해결하기 위해서는 유료 등급으로 업그레이드해야 합니다. 따라서, 계정 등록과 API key 생성은 무료이지만 더 많은 기능을 사용하려면 업그레이드가 필요합니다.API 등록을 위해 다음 단계를 따르세요.
OpenAI 사이트에 로그인합니다. OpenAI 계정이 없는 경우, 계정을 생성해야 합니다. OpenAI의 공식 웹사이트 주소는 https://openai.com/ 입니다.
계정 로그인 후 OpenAI 대시보드로 이동합니다.
대시보드에서 API 탭을 선택합니다.
API 탭에서 “Create API Key” 버튼을 클릭합니다.
API 키를 생성하기 위해 지침을 따릅니다. 생성 시, 이메일 인증이 필요할 수 있습니다.
API 키 생성이 완료되면, API 콘솔에서 API를 호출할 수 있는 정보를 볼 수 있습니다.
이제 API 등록이 완료되었으므로, API를 사용하기 위해 필요한 인증 정보를 사용하여 코드를 작성할 수 있습니다.
데이터 수집: 바이올린 교육용 GPT를 만들기 위해 많은 양의 데이터가 필요합니다. 이 데이터는 바이올린 교육용 책, 레슨 내용, 연주에 대한 내용 등을 포함할 수 있습니다.바이올린 교육용 GPT를 만들기 위해 필요한 데이터는 텍스트 데이터입니다. 따라서 아래 화면 캡처를 참고하세요. Build an application에서 “Text completion” 옵션을 선택해야 합니다. 연주 동영상이나 소리를 이용한 데이터는 OpenAI API로는 처리할 수 없으며, 오직 텍스트 데이터만 가능합니다.
OpenAI의 GPT-3 API는 일반적으로 텍스트 형태로 입력된 데이터를 처리합니다. 따라서, 바이올린 교본의 경우에는 텍스트 형태로 변환한 후에 API에 입력해야 합니다. 만약 PDF 스캔 파일을 사용하고자 한다면, 먼저 PDF를 텍스트로 변환하는 작업이 필요합니다. 이 작업은 OCR (Optical Character Recognition) 프로그램을 사용하여 수행할 수 있습니다.일반적으로 사용되는 OCR 프로그램으로는 Adobe Acrobat, ABBYY FineReader, Readiris, Tesseract 등이 있습니다. 이 중 Tesseract는 오픈소스 기반으로 무료로 사용할 수 있는 OCR 엔진으로, 다양한 언어를 지원하고 있습니다. 다만, OCR 프로그램은 인식률이 100%가 되지 않을 수 있으므로, 인식률을 높이기 위해 여러 프로그램을 조합하여 사용하거나, 수동으로 수정하는 작업이 필요할 수 있습니다.
OpenAI의 GPT-3는 이미지 생성 및 처리와 같은 기능도 제공하지만, 그림에 대한 입력은 아직 지원하지 않습니다. 따라서 GPT-3 API를 사용하여 바이올린 교육용 GPT 모델을 구축하는 경우, 이미지를 텍스트로 변환한 후 모델에 입력해야 합니다.
일반적으로 이미지를 텍스트로 변환한다는 것은 이미지에 포함된 텍스트를 인식하고, 그것을 컴퓨터가 이해할 수 있는 문자로 변환하는 것을 의미합니다. 따라서 이미지에 포함된 텍스트를 추출하고, 그것을 활용하는 것이 가능합니다. 하지만 이미지 자체를 설명하는 것은 어려울 수 있습니다.GPT 모델은 주로 텍스트 데이터를 기반으로 학습하기 때문에, 연주 동영상이나 음원을 직접 입력하는 것은 어렵습니다. 하지만, 이러한 비디오나 오디오 자료를 텍스트로 변환한 뒤에 모델에 학습시키는 방법이 있습니다. 이를 위해 자동 음성인식 (Automatic Speech Recognition, ASR) 기술이나 영상에서의 문자 인식 (Optical Character Recognition, OCR) 기술 등을 사용하여 비디오나 오디오에서 텍스트 데이터를 추출하는 과정이 필요합니다. 추출된 텍스트 데이터를 GPT 모델에 학습시켜 음악이나 연주에 대한 텍스트 데이터를 생성하고, 이를 이용하여 교육할 수 있습니다.하지만, 이러한 방법으로 생성된 텍스트 데이터는 모델이 학습한 데이터의 정확도와 완전히 일치하지는 않을 수 있으며, 일부 정보의 손실이 발생할 수도 있습니다. 또한, 음악이나 연주와 같은 비디오나 오디오 자료를 텍스트로 변환하는 과정에서 인식 오류가 발생할 수 있으므로, 이러한 방법으로 생성된 데이터를 사용할 때에는 주의가 필요합니다.
데이터 정제: 데이터를 수집하면 다음 단계는 데이터를 정제하는 것입니다. 이 단계에서는 데이터를 노이즈에서 필터링하고 정규화하여 분석 가능한 형식으로 변환해야합니다.예를 들어 시노자키 교본 2권(개정판) 10페이지의 맨 상단의 text인 “매일 여러 번 반복해서 연습하십시오” 라는 문장을 정제하는 과정은 다음과 같습니다.
불필요한 정보 필터링: OCR을 통해 추출한 텍스트 데이터에서 필요하지 않은 정보(예: 이미지 캡션, 페이지 번호 등)를 필터링합니다.
텍스트 정규화: 추출한 텍스트 데이터를 정규화하여 데이터를 분석 가능한 형식으로 변환합니다. 이 단계에서는 스테밍(stemming), 불용어(stopwords) 제거, 대소문자 통일 등의 과정을 거쳐 정규화된 텍스트 데이터를 생성합니다.스테밍(stemming)은 단어의 어간(stem)을 추출하는 과정입니다. 즉, 같은 의미를 가지지만 다른 형태로 표현된 단어들을 같은 형태로 통일하여 분석을 용이하게 합니다. 예를 들어, “walking”, “walks”, “walked”와 같은 단어들은 모두 “walk”의 어간(stem)을 갖고 있으므로, 스테밍을 통해 모두 “walk”로 변환할 수 있습니다.불용어(stopwords)는 분석에 있어서 의미가 없거나 빈번하게 등장하여 분석에 방해가 되는 단어들을 말합니다. 예를 들어, 영어에서는 “the”, “a”, “an”, “in”, “at”과 같은 단어들이 불용어에 해당합니다. 이러한 불용어들은 분석에서 제거함으로써, 더 의미 있는 단어들에 집중할 수 있습니다.따라서, 예를 들어 “매일 여러 번 반복해서 연습하십시오”라는 문장에서 스테밍을 수행하면 “반복”, “연습”과 같은 어간(stem)들만 추출할 수 있습니다. 불용어 제거를 수행하면 “매일”, “여러”, “번”, “해서”, “하십시오”와 같은 불용어들은 제거되어 “반복”, “연습”만 남게 됩니다.
따라서, “매일 여러 번 반복해서 연습하십시오”와 같은 텍스트 데이터를 분석 가능한 형식으로 변환하려면 OCR을 통해 추출한 텍스트 데이터를 필터링하고, 정규화하며, 이를 바탕으로 텍스트 분석을 수행해야 합니다.
텍스트 분석: 생성된 정규화된 텍스트 데이터를 바탕으로 텍스트 분석을 수행합니다. 이 단계에서는 텍스트 데이터를 어떻게 활용할 것인지에 따라서 다양한 방법으로 분석이 가능합니다. 예를 들어, 자연어 처리(NLP) 기술을 활용하여 텍스트 데이터의 감성 분석, 주제 분류, 문서 요약 등의 작업을 수행할 수 있습니다.
예를 들어 텍스트 분석에서 “반복”과 “연습”은 중요한 단어로 간주될 수 있습니다. 이러한 단어들은 주제 분류 작업에서 해당 문서가 음악 교육에 관한 것임을 나타내는 중요한 단서가 될 수 있습니다. 또한, 감성 분석에서는 이러한 단어들이 긍정적인 의미를 지닐 수 있습니다. 예를 들어 “반복”이라는 단어는 어떤 기술을 반복적으로 연습함으로써 성취감을 느끼는 것과 같이 긍정적인 의미를 지닐 수 있습니다. 따라서 이러한 단어들을 활용하여 텍스트 분석을 수행할 수 있습니다.반복 연습에 대한 감성 분석 예시로는, “반복적인 연습은 지루하고 지치지만, 도전적인 과제를 해결하고 나면 성취감과 자신감을 얻게 된다” 라는 문장을 예로 들 수 있습니다. 이 문장에서 “반복적인 연습”이라는 키워드는 부정적인 감성을 나타낼 수 있지만, 이후의 문장에서 긍정적인 감성으로 전환이 되기 때문에 전체적으로는 긍정적인 감성을 나타냅니다.주제 분류 예시로는, “반복적인 연습의 중요성”이라는 주제로 분류한다면, 문장 속에서 “반복”, “연습”과 같은 키워드를 추출해 이를 중심으로 분석을 진행할 수 있습니다.문서 요약 예시로는, “반복적인 연습의 효과”라는 주제로 요약을 한다면, 이 문장에서 “반복적인 연습은 지루하고 지치지만, 도전적인 과제를 해결하고 나면 성취감과 자신감을 얻게 된다”라는 구절을 요약할 수 있습니다. 이를 요약하면 “반복적인 연습을 통해 성취감과 자신감을 얻을 수 있다”와 같이 요약할 수 있습니다.
모델 학습: 모델 학습 단계에서는 GPT 모델을 데이터에 적합하도록 조정합니다. 이 단계에서는 OpenAI의 chatGPT API를 사용하여 모델을 훈련하고, 훈련 세트에서 성능을 최적화하고, 과적합을 방지하는 하이퍼파라미터를 조정합니다.
모델 학습 단계에서는 훈련 데이터셋에 적합하도록 모델의 파라미터를 조정하여 성능을 최적화하고, 과적합을 방지합니다. 예를 들어, 입력으로 받은 텍스트 데이터에서 모델이 언어의 문맥과 관련된 규칙과 패턴을 학습할 수 있도록 하이퍼파라미터를 조정합니다. 예를 들어, GPT 모델의 layer 개수, 학습률(learning rate), 배치 크기(batch size), 에포크 수(epoch) 등을 조정하여 최적의 하이퍼파라미터를 찾습니다.과적합(overfitting)은 모델이 훈련 데이터셋에 대해서는 높은 정확도를 보이지만, 새로운 데이터에 대해서는 일반화(generalization) 능력이 떨어지는 문제를 말합니다. 예를 들어, 모델이 학습 데이터셋에서 우리가 정제한 키워드 “반복”과 “연습”을 잘 예측하지만, 새로운 데이터에서는 예측 성능이 낮아질 수 있습니다. 이를 방지하기 위해 모델의 복잡도를 줄이는 방법, 데이터셋을 다양하게 확보하는 방법 등이 있습니다.
모델 테스트: 모델 학습이 완료되면 테스트 세트에서 모델의 정확성을 테스트합니다. 이 단계에서는 모델의 성능이 만족스러운지 확인하고, 추가 조정이 필요한 경우 모델을 다시 훈련할 수 있습니다.
chatGPT API는 텍스트를 입력받아 대화를 생성하는 모델입니다. 따라서 chatGPT API를 사용하여 모델 테스트를 수행하려면, 테스트 세트에서 추출한 텍스트 데이터를 입력으로 제공하고, 생성된 대화 결과를 평가하여 모델의 정확성을 확인할 수 있습니다.예를 들어, 테스트 세트에서 추출한 다양한 주제의 질문을 chatGPT API에 입력하고, 생성된 대화 결과가 원하는 대답과 일치하는지 확인할 수 있습니다. 또한, 생성된 대화 결과의 자연스러움과 일관성을 평가하여 모델의 성능을 확인할 수 있습니다.
모델 배포: 모델을 배포하기 전에 API의 사용 조건에 따라 라이선스 및 사용 권한을 검토해야합니다. 모델을 배포하기 전에 웹 서버와 같은 호스팅 서비스를 설정해야합니다.
OpenAI의 GPT API를 사용하기 위해서는 API Key를 발급받아야 하며, 발급받은 Key를 사용하여 API를 호출하는 것으로 사용 권한을 확인합니다.웹 서버는 다양한 호스팅 서비스에서 가능합니다. 일반적으로 흔한 Linux 호스팅 역시 가능합니다.OpenAI의 GPT API의 가격은 시간당 요금으로 책정됩니다. 2023년 2월 기준으로, GPT-3 API의 경우 초당 4센트에서 16센트 사이의 가격이 적용되며, 사용량에 따라 다른 요금제가 존재합니다. 따라서 월 10만건의 질문을 한다면 대략 4,000에서 16,000 달러 사이의 비용이 들 것으로 예상됩니다.
OpenAI의 GPT API는 REST API로 제공되며, 따라서 프론트엔드 및 백엔드 어떤 플랫폼에서든 API를 호출하여 사용할 수 있습니다. WordPress나 Django 등 다양한 플랫폼에서 API를 사용할 수 있습니다.
예를 Django REST framework를 사용하여 OpenAI의 GPT API를 호출할 수 있습니다. Django REST framework은 Python으로 작성된 웹 프레임워크이며 RESTful API를 구축하는 데 사용됩니다. OpenAI의 GPT API는 HTTP 요청을 통해 호출되므로 Django REST framework의 HTTP 요청 기능을 사용하여 GPT API와 상호 작용할 수 있습니다.
Django REST framework을 사용하면 API 엔드 포인트를 정의하고 해당 엔드 포인트에서 GPT API에 대한 요청을 보내는 데 필요한 모든 기능을 제공할 수 있습니다. 이를 통해 Django 애플리케이션에서 OpenAI의 GPT API와 상호 작용하는 데 필요한 모든 기능을 구현할 수 있습니다. 이와 관련된 샵투스쿨의 강좌로는 1시간만에 장고 플러터 연동 모바일 앱 만들기 – 장고 DRF(Django Rest Framework)와 모바일 앱 연동이 있으며 여러분은 첫번째 섹션의 장고측 서버작업 부분을 보시면 api 연동에 대한 이해력을 가지게 됩니다.
API 사용: 모델이 배포되면 바이올린 교육용 GPT를 사용할 수 있습니다. 이를 위해서는 API를 호출하고 모델의 입력 데이터를 전달해야합니다. API는 모델을 실행하고 적절한 출력을 반환합니다.
웹 뿐만 아니라 OpenAI API를 이용해서 ChatGPT 서비스를 모바일 앱에서도 사용할 수 있습니다. OpenAI는 REST API를 제공하므로, 대부분의 클라이언트 라이브러리나 SDK를 사용하여 API를 호출할 수 있습니다. 예를 들어, Flutter 애플리케이션에서는 http 패키지를 사용하여 OpenAI API를 호출할 수 있습니다. 이를 통해 모바일 앱에서도 ChatGPT 서비스를 구현할 수 있습니다. 다만, API 사용량 제한과 관련한 가격 정책을 고려하여 개발 및 서비스를 진행해야 합니다.