본문 바로가기

Contact English

【알고리즘】 21강. 자연어 처리(NLP)와 거대 언어 모델(LLM)

 

21강. 자연어 처리(NLP)와 거대 언어 모델(LLM)

 

추천글 : 【알고리즘】 알고리즘 목차


1. 자연어 처리 [본문]

2. 거대 언어 모델 [본문]

3. 생물정보학과 언어 모델 [본문]


a. 프롬프트 엔지니어링 

b. 자연어 처리 및 LLM 유용 함수 모음

c. LLM 관련 탐구 주제


 

1. 자연어 처리(natural language processing, NLP) [목차]

⑴ 정의 : 텍스트 기반의 인공지능 모델

⑵ 텍스트 전처리 : 비정형 텍스트를 컴퓨터가 인식하게 하기 위해 수행하는 전처리  

① 토큰화(tokenization)

○ 문장 혹은 말뭉치(corpus)에서 최소 의미 단위인 토큰으로 분할하여 컴퓨터가 인식하도록 하는 방법

영어 : 주로 띄어쓰기 기준으로 나눔

○ 75개의 영단어 ≃ 100개의 토큰

○ 예 : I / ate / noodle / very / deliciously

한글 : 주로 단어 안의 형태소를 기준으로 나눔 

○ 예 : 나 / 는 / 국수 / 를 / 매우 / 맛있게 / 먹었다  

○ 예 : OpenAI Tokenizer 

② 품사 태깅(POS tagigng, part of speech tagging)

○ 형태소의 품사를 태깅하는 기법 

③ 표제어 추출(lemmatization)

○ 단어들로부터 표제어(사전어)를 찾는 기법

○ 예 : am, are, is → be 

④ 어간 추출(stemming)

○ 단어에서 접두사 및 접미사를 제거하여 어간을 획득하는 기법

⑤ 불용어(stopword) 처리

○ 조사, 접미사 같은 실제 의미 분석을 하는 데 거의 기여하지 않는 단어를 처리하는 기법 

⑶ 텍스트 마이닝(text mining)

① 토픽 모델링 

기계학습 및 자연어 처리 분야에서 토픽이라는 문서 집합의 추상적인 주제를 발견하기 위한 통계적 모델 중 하나

○ 텍스트 본문의 숨겨진 의미 구조를 발견하기 위해 사용됨 

② 워드 클라우드

○ 자연어 처리를 통해 사람들의 관심사 또는 빈도수를 단순 카운트하여 시각화

③  소셜 네트워크 분석(SNA, social network analysis)

○ 그룹에 속한 사람들 간의 네트워크 특성과 구조를 분석하고 시각화하는 분석 기법

④ TF-IDF(term frequency-inverse document frequency)

○ 여러 문서로 이루어진 문서 군이 있을 때 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지 추출하는 기법

⑷ 자연어 처리 모델

 종류 1. LSA(latent semantic analysis)

 종류 2. PLSA(probabilistic latent semantic analysis)

 종류 3. LDA(latend dirichlet allocation) : 생성형 확률 모델. reference 없이 deconvolution을 할 때에도 사용할 수 있음 (ref)

⑸ 자연어 모델의 평가 (ref)

① parallel text dataset : Canadian Parliament (영어 ↔ 프랑스어), European Parliament (여러 언어 지원)

SNS

③ Bleu score (ref)

④ perplexity 

 

 

2. 거대 언어 모델(large language model, LLM) [목차]

⑴ 정의 : 파라미터의 수가 billion 단위인 자연어 처리 모델

① 파라미터의 수를 세는 방법은 다음을 참고 

용어 1. 7B, 13B, 30B, 65B의 의미 : 자연어 모델을 구성하는 파라미터 개수가 7 billion, 13 billion, 30 billion, 및 65 billion이라는 것

용어 2. token : 모델이 처리하는 텍스트의 단위

○ word-level tokenization : [ChatGPT, is, an, AI, language, model, .

 subword-level tokenization : [Chat, G, PT, is, an, AI, language, model, .

 character-level tokenization : [C, h, a, t, G, P, T,  , i, s,  , a, n,  , A, I,  , l, a, n, g, u, a, g, e,  , m, o, d, e, l

용어 3. 0-shot, 1-shot, 5-shot, 64-shot 등의 의미 : 하나의 task 당 주어지는 예시의 개수를 의미

○ 0-shot prompting

 

Q: <Question>?
A:

 

○ few-shot prompting 

 

Q: <Question>?
A: <Answer>
Q: <Question>?
A: <Answer>
Q: <Question>?
A: <Answer>
Q: <Question>?
A:

 

트랜스포머(transformer) 

단계 1. 트랜스포머 인코더(transformer encoder) : 입력 시퀀스를 받아서 이를 더 높은 수준의 표현으로 변환

 훈련 방식 : NSP, MLM 

○ 다음 문장 예측(next sentence prediction; NSP) : 입력 데이터의 문장쌍 A, B를 구성하여, B가 A 다음 문장인지 여부 결정

○ 첫 번째 문장 : "The quick brown fox jumps over the lazy dog."

○ 두 번째 문장 : "The dog is not amused."

○ 예측 결과 : 두 번째 문장이 첫 번째 문장의 다음 문장인지 여부 (예 : "No")

○ 마스킹된 언어 모델링(masked language modeling; MLM) : 문장의 일부 단어를 마스킹하고, 마스킹된 단어를 예측  

○ BERT 등의 트랜스포머에서 인코더를 트레이닝시킴 

1-1. 자기 주의 메커니즘(self-attention mechanism

1-1-1. 문장을 여러 개의 토큰으로 분리 

1-1-2. 입력된 시퀀스에서 각 토큰의 쌍에 대해 "query", "key", "value"를 생성하여, 각 토큰이 다른 토큰에 얼마나 주의를 기울일지(attention score)를 계산  

 

Figure. 1. 토큰쌍의 attention score

 

1-1-3. positional encoding : 트랜스포머는 입력된 단어의 순서를 직접 알 수 없어서, 각 단어의 위치 정보를 positional encoding으로 추가. 이를 통해 모델이 시퀀스 내의 순서 정보를 이해할 수 있음. 예를 들어, sin, cos 함수로 정의되는 경우 가까울수록 내적값이 커져서 인접 관계를 이해할 수 있음 

1-1-4. 인코더 내의 각 토큰(단어)은 다른 모든 토큰들과의 관계를 학습

1-1-5. 토큰 임베딩(token embedding) : attention score를 기반으로 각 토큰의 가중합을 계산하여 각 토큰을 새로운 표현으로 변환. positional encoding으로 임베딩된 결과를 positional embedding이라고 함 

1-1-6. attention head가 여러 개인 경우를 multi-head attention이라고 함 

1-2. FFN(feed-forward neural network) : self-attention을 통해 생성된 표현을 더욱 정교하게 변환 

○ 각 토큰 임베딩을 개별적으로 튜닝하고 이때 비선형 활성화 함수가 사용됨

1-3. Add&Norm (LayerNorm) : self-attention과 FFN 뒤에 붙어 layer normalization을 수행 

1-4. "self-attention → Add&Norm FFN Add&Norm"과 같은 구조가 여러 레이어로 반복됨

○ 이를 통해 각 토큰 임베딩을 점점 더 문맥화된 벡터로 변환

 유형 1. 초기 레이어 

 각 레이어의 여러 attention head들이 입력 피처에서 집중하는 부분에 편차가 큰 단계 

○ 이 단계에서는 폭넓은 탐색을 통해 중요한 정보와 그렇지 않은 정보를 구분함

 유형 2. 중간 레이어

○ 각 레이어의 여러 attention head들이 일관되게 랭크가 낮은 정보에 집중하는 단계

○ 데이터에 내재된 노이즈를 식별하고 세부 사항을 이해함

 유형 3. 최종 레이어

 각 레이어의 여러 attention head들이 일관되게 랭크가 높은 정보에 집중하는 단계

○ 이를 통해 결정적인 정보를 추출하고 최종 결정을 내리는데 기여함 

1-5. sentence embedding : 최종적으로 각 토큰 임베딩을 종합하여 문장의 전체 의미를 나타내는 하나의 벡터로 변환. 트랜스포머 디코더는 트랜스포머 인코더가 만든 sentence embedding을 입력받는 게 아님. 트랜스포머 디코더는 인코더의 문맥화된 토큰 임베딩을 입력으로 받음 

단계 2. 트랜스포머 디코더(transformer decoder) : 인코더에서 생성한 표현을 받아서 최종적으로 원하는 출력을 생성 

○ 훈련 방식 : NWP

 

Figure. 2. 트랜스포머 디코더 문제 정의

 

다음 단어 예측(next word prediction; NWP) : 주어진 문맥 내에서 다음 단어를 예측하는 작업

○ GPT 등의 트랜스포머에서 디코더를 트레이닝시킴 

2-1. 마스크된 자기 주의 메커니즘(masked self-attention mechanism) 

2-1-1. 디코더는 인코더에서 생성된 토큰 임베딩을 참고 

2-1-2. 디코더 내의 각 토큰은 이전 토큰들만을 참고하여 다음 토큰을 예측 : 모델이 미래의 정보를 보지 않도록 하기 위해 마스크 적용. 아래 그림에서 각 토큰들이 벡터 표현으로 임베딩됐음을 알 수 있음

 

Figure. 3. 토큰 임베딩 결과와 다음 단어 예측 상황

 

2-2. FFN(feed-forward neural network)

○ 디코더에서 생성된 표현을 더 정교하게 변환하여 최종 출력을 생성하는 데 사용

○ 인코더와 마찬가지로, FFN은 각 토큰 임베딩을 비선형적으로 변환

 

Figure. 4. attention multilayer perceptron

 

2-3. 다중 디코더(multilayer decoder) : 여러 개의 디코더 레이어가 쌓여서 최종적으로 출력 시퀀스를 생성

attention multilayer percentron을 serial 하게 붙임으로써 계속 문장을 생성할 수 있음

○ 디코더는 인코더의 정보와 현재 생성 중인 시퀀스 정보를 결합하여 새로운 토큰을 예측

○ To date, the cleverest thinker of all time was ___ → undoubtedly

To date, the cleverest thinker of all time was undoubtedly ___ → Einstein

To date, the cleverest thinker of all time was undoubtedly Einstein, ___ → for 

 

Figure. 5. 다중 디코더

 

주요 파라미터 

① temperature = 0 : 매우 결정론적 출력을 생성
② max_tokens API Call settings = 100 : 100 토큰까지의 응답이 capped
③ top_p = 1.0 : 모든 가능한 토큰을 사용하여 응답을 생성
④ frequency_penalty = 0.0 : 자연스럽게 반복되는 토큰을 피하지 않음
⑤ presence_penalty = 0.0 : 토큰 재사용에 대한 벌칙이 적용되지 않음

⑷ 종류

BERT, RoBERTa, ALBERT 

○ 양방향 트랜스포머를 사용하여 입력 시퀀스의 좌우 문맥을 모두 고려하여 텍스트 이해에 유리함

○ BERT의 입력은 최대 512 토큰이지만, positional embedding을 확장하여 입력을 늘릴 수 있음 : 2n을 보통 최대 입력으로 함

○ BERT 혹은 BioBERT를 Hugging Face에서 불러와서 주어진 문장에 대한 attention matrix를 만드는 함수

 

import torch
from transformers import BertTokenizer, BertModel
import matplotlib.pyplot as plt
import seaborn as sns

# BERT 모델과 토크나이저 불러오기 (OPTION 1)
'''
model_name = 'bert-base-uncased'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name, output_attentions=True)
'''

# BioBERT 모델과 토크나이저 불러오기 (OPTION 2)
model_name = 'dmis-lab/biobert-base-cased-v1.1'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name, output_attentions=True)

# 입력 문장
sentence = "Find diseases associated with glucose"

# 토큰화
inputs = tokenizer(sentence, return_tensors='pt')

# 모델을 통해 출력값과 attention 가중치 계산
outputs = model(**inputs)
attentions = outputs.attentions  # 이 값이 각 층의 attention 가중치

# 첫 번째 층의 첫 번째 헤드의 attention 가중치 시각화
attention = attentions[0][0][0].detach().numpy()

# 토큰 리스트
tokens = tokenizer.convert_ids_to_tokens(inputs['input_ids'][0])

# Attention 가중치 시각화
plt.figure(figsize=(10, 10))
sns.heatmap(attention, xticklabels=tokens, yticklabels=tokens, cmap='viridis')
plt.title('Attention Weights')
plt.show()

 

GPT, GPT-2, GPT-3, GPT-J, GPT-Neo, GPT-3.5, GPT-4, GPT-4o, GPT-o1 

○ 입력 시퀀스의 좌에서 우로 순차적으로 문맥을 고려하여 다음 단어 예측에 집중함 

○ 자기 회귀 모델(autoregressive model)을 사용함 

 

 

BERT와 GPT의비교 

 

  BERT GPT-4
개발자 Google AI OpenAI
입력 데이터 입력 시퀀스의 좌우 문맥을 모두 고려 입력 시퀀스의 좌에서 우로 순차적으로 고려
파라미터 1.5 B 340 M (= 0.34 B)
훈련 방식 트랜스포머 인코더 (MLM, NSP) 트랜스포머 디코더 (NWP)
훈련 데이터 3 TB 45 TB
주요 응용분야 텍스트 이해 텍스트 생성

Table. 1. BERT와 GPT의 비교

 

④ Gopher

Chinchilla

⑥ Flan, PaLM, Flan-PaLM

⑦ OPT-IML

LLaMA, LLaMA2, LLaMA3 : 설치형 모델. Meta에서 개발 

 Alpaca

XLNet, T5, CTRL, BART

⑪ Gemma

○ multi-query attention

○ RoPE embedding

○ GeGLU activation

○ RMSNorm

⑫ Mistral

○ group-query attention

○ sliding window attention

○ rolling buffer cache

○ pre-fill and chunking

ollama : 다음 LLM들을 모두 지원

Llama2 (7B)

○ Mistral (7B)

○ Dolphin Phi (2.7B)

○ Phi-2 (2.7B)

○ Neural Chat (7B)

○ Starling (7B)

○ Code Llama (7B)

○ Llama2 Uncensored (7B)

○ Llama2 (13B)

○ Llama2 (70B)

○ Orca Mini (3B)

○ Vicuna (7B)

○ LLaVA (7B)

AlphaGeometry : symbolic deduction을 구현하여 IMO 수준의 기하 문제를 풀 수 있음

⑮ MiniLM (Miniature language model)

○ 임의의 가변 길이 자연어 문장을 그 의미를 고려하여 384차원으로 만드는 함수 (ref

 

from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings
import numpy as np
from scipy.sparse import csr_matrix
import pandas as pd
from sklearn.neighbors import NearestNeighbors
import torch
from torch.utils.data import DataLoader, TensorDataset
from xgboost import XGBClassifier

def sentences_to_embedding(sentences):
    embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
    db = embedding_function.embed_documents(sentences)
    emb_res = np.asarray(db)
    return emb_res


sentences = []
sentences.append("What is the meaning of: obsolete")
sentences.append("What is the meaning of: old-fashioned")
sentences.append("What is the meaning of: demagogue")
emb_res = sentences_to_embedding(sentences)

 

⑯ 기타 유용한 생성형 AI 툴

GitHub Copilot 

Perplexity AI 

Consensus

Scite

○ SciSpace / typeset.io 

○ Elicit.com 

Claude AI

○ Elicit AI

○ Research Rabbit

Gemini 

Mistral AI

○ Tabnine 

○ CodiumAI

○ AWS Code Whisperer

○ Sourcegraph Cody

○ NotebookLM

 

 

3. 생물정보학과 언어 모델 [목차]

 

출처: 이미지 클릭(Med-PaLM)
출처 : 이미지 클릭

 

Figure. 6. 생물정보학과 언어 모델

 

BioBERT

⑵ BioNER

⑶ SQuAD

⑷ BioASQ

PubMedGPT (BioMedLM)

⑹ BioGPT 

scBERT, scFormer : BERT 기반

⑻ GPT-Neo

⑼ PubMedBERT

⑽ BioLinkBERT

⑾ DRAGON

⑿ BioMedLM

Med-PaLM, Med-PaLM M, Med-Gemini 

BioMedGPT

tGPT 

CellLM 

Geneformer : BERT 기반. 트랜스포머 인코더 기반의 아키텍처 사용. pretraining → finetuning과 같이 사용. zero-shot 기능이 사실상 무용지물

scGPT : GPT 기반. 트랜스포머 디코더 기반의 아키텍처 사용. pretraining → finetuning과 같이 사용. pretraining model의 zero-shot 퍼포먼스도 상당히 우수함 

scFoundation 

SCimilarity

CellPLM 

Nicheformer 

 

입력: 2021.12.11 17:34

수정: 2024.09.13 15:30