[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.10.11
📕 학습 목록
- 자연어 처리 모델
- 자연어 처리 딥러닝 모델 변천사
📗 기억할 내용
1. 자연어 처리(NLP)의 개요
- 자연어 처리 : 인간의 언어를 컴퓨터가 이해하고 처리하는 기술
- 크게 텍스트 처리와 음성 처리로 나눌 수 있음
- 주요 응용 분야: 기계 번역, 질의응답 시스템, 텍스트 분류, 감정 분석 등
2. 주요 자연어 처리 기술
1) 임베딩 벡터(Embedding Vector)
- 정의: 단어를 고차원에서 저차원의 연속적인 벡터 공간으로 변환한 값
- 목적: 단어 간의 의미적 유사성을 표현하고, 모델이 단어 간의 관계를 학습할 수 있도록 돕는 역할을 함
- 대표 기법: Word2Vec, GloVe, FastText
- 기능: 단어를 의미적으로 유사한 벡터 공간에 매핑함. 예: "강아지"와 "개"는 유사한 의미를 가지며, 벡터 공간에서 가까운 위치에 존재하게 됨
2) 토큰화(Tokenization)
- 정의: 텍스트를 단어 또는 문장 단위로 분리하는 과정
- 종류: 단어 토큰화, 문장 토큰화 등
- 목적: 모델이 텍스트를 개별 단어 또는 문장 단위로 처리할 수 있도록 함
3) 텍스트 전처리(Text Preprocessing)
- 과정: 불용어 제거, 정규화, 표제어 추출 등
- 목적: 모델의 성능을 높이기 위한 텍스트 정리 작업을 수행함
4) 질의응답 시스템(Question-Answering Systems)
- 기능: 사용자의 질문에 대한 정확한 답변을 제공하는 시스템
- 사용 모델: BERT, T5 등이 주로 사용됨
5) 자연어 검색 시스템
- 벡터 데이터베이스(Vector DB): 임베딩 벡터를 사용하여 문서나 문장의 유사도를 계산하여 관련 정보를 검색
- 테이블 기반 질문 응답(Table QA): 구조화된 데이터(예: 테이블)를 대상으로 질문에 대한 답변을 찾아 제공하는 시스템
6) Ko-SRoBERTa-Multitask
- 기능: 한국어 텍스트에 특화된 모델로, 문장 유사도 분석, 감정 분석, 문서 분류 등에 사용됨
- 특징: RoBERTa 모델을 기반으로 다중 작업(multitask)을 처리하도록 학습된 모델
3. 주요 자연어 처리 모델
1) RNN (Recurrent Neural Network)
- 기능: 순차적인 데이터를 처리하며, 이전 단계의 출력을 다음 단계의 입력으로 사용
- 장점: 텍스트의 순차적 특성을 반영할 수 있음
- 단점: 장기 의존성 문제(Long-Term Dependency)가 발생할 수 있음
2) LSTM (Long Short-Term Memory)
- 특징: RNN의 단점을 보완하며, 장기 의존성 문제를 해결
- 기능: 장기적인 문맥 정보를 기억하고 예측하는 데 유리함
3) Transformer
- 기능: 순차적인 데이터뿐 아니라 병렬 처리에도 뛰어난 성능을 보임
- 구조: 인코더-디코더 구조로 구성
- 주요 구성 요소:
- Self-Attention: 입력 데이터 내에서 중요한 부분을 강조하여 학습함
- Multi-Head Attention: 여러 개의 Attention 헤드를 사용하여 다양한 문맥 정보를 병렬적으로 처리
- Scaled Dot-Product Attention: Attention 값을 계산하는 방식으로, 입력과 출력을 유의미하게 연결함
- 대표 모델: BERT, GPT, T5
4) BERT (Bidirectional Encoder Representations from Transformers)
- 특징: 양방향으로 문맥을 이해할 수 있는 Transformer 기반 모델
- 사용 분야: 텍스트 분류, 감정 분석, 질의응답 등
5) GPT (Generative Pre-trained Transformer)
- 특징: 주어진 입력에 따라 다음 단어를 예측하며 텍스트를 생성
- 사용 분야: 텍스트 생성 작업에 주로 사용됨
6) T5 (Text-To-Text Transfer Transformer)
- 특징: 모든 자연어 처리 작업을 텍스트에서 텍스트로 변환하여 학습
- 사용 분야: 번역, 요약, 질의응답 등 다양한 NLP 작업에서 사용됨
7) FAISS (Facebook AI Similarity Search)
- 기능: 대규모 벡터 데이터의 유사도를 빠르게 검색하는 데 사용
- 특징: 벡터 임베딩을 사용하여 대규모 데이터를 효율적으로 검색하고 인덱싱하는 데 유리함
8) LangChain
- 기능: 언어 모델과 벡터 기반 검색 시스템을 결합하여 강력한 자연어 검색 시스템을 구현할 수 있음
- 특징: LLM(대형 언어 모델)과 데이터베이스 또는 검색 엔진을 연결하여 자연어 질의에 대한 응답을 제공
4. 자연어 처리 모델의 학습 방법론
1) 지도 학습(Supervised Learning)
- 정의: 레이블이 포함된 데이터를 이용하여 모델을 학습
- 목적: 모델이 주어진 입력에 대한 정답을 예측할 수 있도록 학습
2) 비지도 학습(Unsupervised Learning)
- 정의: 레이블이 없는 데이터를 이용하여 학습
- 사용 분야: 군집화, 차원 축소 등
3) 자기지도 학습(Self-Supervised Learning)
- 정의: 부분적으로 알려진 데이터를 통해 학습함. 예: BERT의 마스킹된 언어 모델링(Masked Language Modeling)
5. 자연어 처리에서의 도전 과제
1) 문맥 이해
- 문제점: 자연어는 복잡한 문맥을 가지고 있어 모델이 이를 정확히 이해하는 것이 어려움
- 해결 방안: Transformer 모델 등이 문맥을 더 잘 이해하도록 설계됨
2) 데이터 편향성
- 문제점: 훈련 데이터에 편향이 있으면 모델 성능에 부정적인 영향을 미침
- 해결 방안: 데이터의 균형을 맞추는 것이 중요함
3) 다언어 처리
- 문제점: 다양한 언어를 처리하는 것이 어려움. 특히 비주류 언어에 대한 데이터 부족 문제가 자주 발생
- 해결 방안: 다국어 데이터를 확보하고, 다국어 모델을 학습하는 방식으로 해결하려고 시도함
📘 코드 실습
1) SentenceTransformers를 이용한 문장 유사도 분석
# 패키지 및 모델 불러오기 from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('jhgan/ko-sroberta-multitask') x = model.encode('안녕 난 잎싹이야') y = model.encode('앙녕 나눈 아리야') util.pytorch_cos_sim(x, y x = model.encode(['안녕 난 잎싹이야', '앙녕 난 잎싹이야', '안녕 나눈 잎싹이야']) y = model.encode('앙녕 나눈 아리야') util.pytorch_cos_sim(x, y) x = model.encode('안녕 난 LA에서 야구하는 잎싹이야') y = model.encode('잎싹이라고 하니 LA에 있었을 때 이야기를 하지 않을 수 없군요. 제가 LA에 있을때는 말이죠 정말 제가 꿈에 무대인 메이저리그로 진출해서 가는 식당마다 싸인해달라 기자들은 항상 붙어다니며 취재하고 제가 그 머~ 어~ 대통령이 된 기분이였어요 그런데 17일만에 17일만에 마이너리그로 떨어졌어요 못던져서 그만두고 그냥 확 한국으로 가버리고 싶었어요 그래서 집에 가는길에 그 맥주6개 달린거 있잖아요 맥주6개 그걸 사가지고 집으로 갔어요 그전에는 술먹으면 야구 못하는줄 알았어요 그냥 한국으로 가버릴려구.... 그리고 맥주 6개먹고 확 죽어버릴려고 그랬어요 야구 못하게 되니깐 그러나 집에가서 일단은 부모님에게 전화를 해야겠다고 생각을 했어요 다음날 가려고 전화를 딱 했는데 어머니께서 찬호야 어후~ 찬호야 아들 잘있어 밥은 먹고 다니는겨~ 잘지내는겨 대뜸 그러시는 거에요 내가 말도 하기도 전해 그래서 저는 야구좀 안되지만 잘하고 있다고 여기사람들 잘챙겨준다고 라고 거짓말을 했어요 한국은 못가게 됬지 내일 야구장은 가야하지 막막하더라구요 그럼 어떻게 가야하나 생각을 했어요 그리고 나서 영어공부를 하게 됬는데요...') util.pytorch_cos_sim(x, y)
2) Faiss를 이용한 문서 검색 시스템 만들기
# Import Package from langchain_community.document_loaders import TextLoader from langchain_community.vectorstores import FAISS from langchain.embeddings import HuggingFaceBgeEmbeddings from langchain_text_splitters import CharacterTextSplitter from IPython.display import display_markdown embeddings = HuggingFaceBgeEmbeddings() # huggingface 에서 제공하는 무료 임베딩 모델 이용 # Load Data documents = TextLoader("./html_basics.md", encoding='utf8').load() # Text Split text_splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=0) docs = text_splitter.split_documents(documents) # Create DB db = FAISS.from_documents(docs, embeddings) # Query query = "HTML은 무엇일까" answer = db.similarity_search(query) display_markdown(answer[0].page_content, raw=True) # 쿼리 결과 유사도 확인 db.similarity_search_with_score(query)
📙 내일 일정
- 자연어 처리(NLP) 모델
'TIL _Today I Learned > 2024.10' 카테고리의 다른 글
[DAY 60] 자연어 처리 (NLP) 모델 (1) | 2024.10.15 |
---|---|
[DAY 59] 자연어 처리 (NLP) (2) | 2024.10.14 |
[DAY 57] SQL 실습 (0) | 2024.10.10 |
[DAY 56] 비관계형 데이터베이스 (0) | 2024.10.08 |
[DAY 55] SQL의 응용 (1) | 2024.10.07 |