ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NLP 자연어 처리 정리 1
    DEV/nlp 2024. 8. 22. 10:57

    [노트]

    자연어 처리

     - Speech Recognition (음성 인식)

     - Translation (번역)

     - Text Summary (요약)

     - Text Classification (분류)

     

    자연어 처리의 요소들

     - Sentiment Analysis : 텍스트에 녹아 있는 감성 또는 의견을 파악

     - Tokenization : 단어의 최소한의 의미를 파악하는 쪼개기

     - Named Entity Recognition : 텍스트로부터 주제 파악하기

     - Normalization : 의도된 오타 파악하기

     - Dependenct Parsin : 문장 구성 성분의 분석

     - Feature Analysis : 음성 데이터로부터 특징을 추출

     - Language Model : 언어별로 갖고 있는 특성을 반영

     - Deep Learning : 이미 학습된 데이터로부터 음성 신호 처리

     - HMM(Hidden Markov Model) : 앞으로 나올 단어 또는 주제의 예측

     - Similarity Analysis : 음성 신호가 어떤 기준에 부합하는가?

     - Encoding : 유사도 기반 자연어 특징 추출

     - Time Series Modeling : 문장을 시간에 따른 데이터로 처리

     - Attention Mechanism : 번역에 필요한 부분에만 집중하기

     - Self-Attention : 문장 사이의 상관관계를 분석

     - Transformer (Attention Mechanism + Self-Attention) : Attention 구조를 이용한 번역 원리

     

    텍스트 전처리 과정

    1. 토큰화 : 문장을 단어로 쪼개기 (필요한 기준에 맞게)
    2. 정제 및 추출 : 오타 수정, 의미가 비슷한 단어끼리 묶기, 필요 없는 단어 제거 등등... 필요한 정제 및 추출 실행
    3. 인코딩 : 단어를 숫자로 변환 (정수 인코딩, 원핫 인코딩 등등...)

     

     

    언어 전처리 : 컴퓨터가 자연어를 효과적으로 처리할 수 있도록 하는 것

    1. Sentence 문장
    2. Tokenization 토큰화
      주어진 문장에서 "의미 부여"가 가능한 단위를 찾음, 주로 패키지를 사용하여 처리하며 패키지 처리 방식 및 특성을 잘 고려하여 사용
    3. Cleaning Stemming 정제 추출 :
      [정제]
       - 대문자 -> 소문자
       - 노이즈 제거 (출현 횟수가 적은 단어 제거 등..)
       - 제거할 때 해당 단어가 중요한 단어라면 제거하지 않는 것을 고려해야 함
       - 길이가 짧은 단어 제거, 지시(대)명사 및 관사 제거. 즉 대세에 지장이 없는 토큰을 제거하는 방법들...

      [추출]
       - 어간 추출 (Porter Algorithm과 같은 알고리즘)
       - 복수, 진행형와 같은 필요 없는 부분 제거 (해당 문맥에 문제가 없다면)
       - 표제어 추출 (is, are -> be / having -> have)

      *표제어 추출은 단어의 품사 정보를 포함
      *어간 추출은 품사 정보를 갖고 있지 않음

      [Stopword 불용어]
       - 문장에서 대세로 작용하지 않는, 중요도가 낮은 단어 제거
       - 전처리 과정에서 패키지를 이용하여 제거 (필요에 따라, 메모리/시간 등 고려)
       - 불용어 목록 받아오기 > 정제할 문장 토큰화 > 토큰화된 각 단어에 불용어가 존재하는 경우 제거
    4. Encoding 인코딩
       - 1, 2, 3 과정을 거치면 진짜 필요한 단어 리스트를 가지게 되며 해당 리스트를 컴퓨터가 인식할 수 있게 변경해야 함
       - 정수 인코딩 : 순서대로 정수로 변환 >> 1, 2, 3 ....
       - 원핫 인코딩 : 0, 1로 백터화 >> [1, 0, 0, 0], [0, 1, 0, 0] ....
      메모리를 많이 차지하는 단점 존재, 필요할 때만 잠깐 적용하는 방법 등을 사용
       - Wrod2vec : 단어의 유사성을 인코딩에 반영 (인코딩 벡터가 비슷하면 단어가 유사하다고 볼 수 있음)

      TF-IDF (Term Frequency -Inverse Document Frequency) : 단어들의 중요한 정도를 가중치로 매기는 방법
      *TF - IDF = tf (d,t) x idf (d, t)
       - d : 특정 문서 번호
       - t : 특정 단어 번호
       - tf(d, t) : 특정 문서 d에서 특정 단어 t의 등장 횟수
       - idf(d,t) : idf(d,t) = log(N/df(t))
       - df(t) : 특정 단어 t가 등장한 문서의 수
       - N : 총 문서의 수
    5. Sorting 분류
       - 빈도수 기준으로 재정렬 등...
    6. Padding Similarity  길이 조정 유사도 분석
       - Zero-padding : 같은 길이로 padding을 주는데 빈 공간을 0으로 채워서 길이를 맞춤

    언어 모델 (Language Model)

     - 통계(확률) 기반 언어 모델
    개별 단어 : w
    단어 sequence = W = {w1, w2, w3 ... wn}
    n개의 단어로 이루어진 sequence가 등장할 확률 : p(W) = p(w1, w2, ... wn)
    즉, 개별 단어가 나올 확률의 곱


    이미 n-1개의 단어가 주어진 경우, 다음에 등장할 단어는?
    p(wn|w1, w2 ... wn-1) = p(w1 ... wn) / p(w1 ... wn-1)

    Markov Chain : 다음 단어의 영향만을 주고 이후의 단어가 이전에 단어에 영향을 주지 않는다를 가정.
    - 표본수가 적은 경우 확률을 구하여 사용하기 적합할까...? (Sparsity Problem)
    - 위 문제를 해결하기 위해 N-gram Language Model이 나옴
    - 한국어의 경우 순서가 중요하지 않기 때문에 적용하기 힘든 모델

    N-gram Language Model : 앞의 N개의 단어를 가지고 근사하겠다.
    - 정확성은 낮아지나 Sparsity 문제를 어느정도 해결할 수 있음

    NNLM (NN-Language Model / NN : Neural Network) : 앞의 N개의 단어를 Neural Network에 태워서 Input / Outpu 도출

    - 정해진 길이의 과거 정보만을 참조하므로 함축 정보를 파악할 수 없음

      - 문장의 길이가 달라질 겨우 한계점이 명확함

     - 인공 신경망 기반 언어 모델

     

    유사도 분석

     - 벡터 유사도 (Cosine Metric)
    벡터는 크기와 방향을 가짐
    같은 방향은 1, 90도 차이는 0, 180도 차이는 -1

    두 벡터의 내적 = norm*cosΘ
    벡터의 내적 : 각 성분끼리 곱한 값의 합
    norm : root(성분의 제곱들의 합)
    [1, 1, 0] , [1, 0, -1] >> 1 = root(2)*root(2)*cosΘ >> cosΘ = 0.5

     

    - bag of words : 단어의 발생 빈도만을 가지고 유사도를 분석하는 단순 모형

    - Euclidean Metric : 벡터 사이의 길이를 기반으로 분석

    - Levenshtein Distance : 단어 사이의 거리를 나타내는 대표적인 척도

     

    텍스트 마이닝

     - Word2Vec : 정수/one-hot 인코딩 단점 보완 

    - 정수 인코딩 : 단어 사이의 연관성 파악 어려움

    - one-hot 인코딩 : 메모리 문제, 연관성 파악 어려움, 희소 표현(Sparse Representation)
    밀집 표현 (Dense Representation) <--> 희소 표현
    - one-hot encoding의 S.R 문제를 보완

    - 벡터의 차원을 원하는 대로 설정
    - 데이터를 이용하여 표현을 학습함 (Neural Network 이용)

    - CBOW (Continuous Bag of Words)

    주변 단어를 활용하여 중간에 있는 단어를 예측 (*예측 : 학습을 위한 레이블링)
    1. 모든 단어 토큰화 > 정제 및 추출 > 인코딩 후 중심 단어 기준으로 주변 단어를 모두 Input Layer에 집어 넣음
    (단어의 수는 설정 : 좌/우 N개...)

    2. Projection Layer를 거친 후 Output Layer에서 중심 단어(임베딩 된)가 출력되게

    - Skip-Gram

    중간 단어를 활용해 주변에 있는 단어를 예측

    (CBOW와 반대 흐름)

    - SGNS : 중심 단어와 주변 단어의 관계를 수치화 (1에 가까울 수록 관계적인 단어다.)
    CBOW나 Skip-Gram은 classification을 했다면, SGNS는 binary classification (연산량에 강점)
    예) 단어 2개를 비교하여 관계있는 단어는 1, 없는 단어는 0으로 데이터셋을 구성, binary classification함.

     

     - Glove
    중심 단어와 주변 단어 벡터의 내적 = Corpus 동시 등장 학률

     

     - FastText

    Facebook에서 개발한 Word2Vec 알고리즘

    단어 단위에서 더 쪼갠 "subword"의 개념 도입

    - 글자 단위 n-gram (mouse|3-gram > mo, mou, ous, use, se)

    쓰는 이유?

    1. OOV(Out of Vocabulary) : 모르는 단어(OOV)가 등장할 경우 Word2Vec에서 처리가 불가능 (해당 단어가 인코딩이 안되어있기 때문)

    >> backdrop > back + drop 처럼 단어의 느낌(뉘양스)을 이해할 수 있다는 장점이 있음.

    2. Rare word 처리 : 빈도 수가 적은 단어들 처리에 강함

    3. 오타에 강함

     

     

    Pre-trained Word Embedding

     - 지도 학습에서 training dataset이 적을 경우 underfitting 발생 가능

     - 이를 해결하기 위해 사전훈련된 model 사용

     - CBOW, GloVe, FastText 등으로 훈련된 사전 모델 존재

     

    RNN (Recurrent Neural Network)

     - 시계열 데이터 처리하기에 좋은 뉴럴 네트워크 구조 (음성인식, 음악생성, DNA 염기서열 분석, 번역기, 감정분석 등 시간에 따른 변화가 있는 데이터들 처리에 유리)

     - CNN은 이미지 구역별로 같은 weight를 공유한다면, RNN은 시간 별로 같은 weight를 공유함

     - Frist Order System : 현재 시간의 상태가 이전 시간의 상태와 관련이 있다고 생각함. xt = f(tx-1)
    - 현재 입력(ut)이 존재하는 경우(이전 시간의 상태 + 현재의 입력) xt = f(xt-1, ut) ***이전 State를 참조함!!

     - 외부 입력 없이 자기혼자 돌아감. (autonomous system), 물론 입력이 있을 수 있음.

     - ANN(Artificial Neural Network)와 다르게 self-feedback(loop)이 존재함

     - 즉, xt는 hidden layer의 state를 의미 (이전 xt-1를 참조함)

     - 그렇기 때문에 xt는 이전까지의 상태와 이전까지의 입력을 대표할 수 있는 압축본이라고 할 수 있음 (아닐 수 도 있음)

     - 상태 xt는 시계열로 들어오는 입력들을 최대한 상세하게 표현할 수 있어야 함.

     - ANN, CNN처럼 back-propagation을 이용함

     - 한계점
    - exploding / vanishing gradient 문제 :
    W*x가 계속 곱하지다 보니 무한대 또는 0으로 수렴하는 문제가 있음 (학습이 어려움)

    - inf가 뜨는 경우 더 이상 학습 진행이 불가 >> Gradient clipping (임계값을 정해놓고 그 이상은 값 고정)

    - 반대로 vanishing gradient 문제는 학습 중 파악이 어려움.

     

    RNN의 한계점을 해결하기 위해 나온 것 Gated RNN(LSTM / GUR)

     

    LSTM(Long short-term memory)

     - gradient flow를 제어할 수 있는 밸브 역할

     - State space의 입력, 상태, 출력 구조는 동일함

      - 1. (forget gate) 입력값과 이전 상태를 어느정도 비율로 사용할 지 결정 (또는 얼마나 잊어버릴 것인가?)

    - 2. (input gate) 새로운 입력과 이전 상태를 참조하여 이 정보들을 얼마나 활용할 것인가? (어떤 정보를 활용할 것인가?)

    - 3. (cell gate) 1, 2번(input / forget gate)을 적절하게 섞음

    - 4. (output gate) 일련의 정보들을 모두 종합하여 다음 상태를 결정

     

    GRU

     - LSTM은 너무 복잡함 > 간소화

     - Cell state가 없음 (input, forget, output)

     - LSTM보다 파라미터 수가 적어 학습 시간 절약됨

     - 성능의 차이는 상황에 따라 너무 다름. BUT) RNN 보다는 성능 차원에서는 보장된다.

     

    Seq2seq

     - RNN(LSTM)을 Encoder, Decoder 이중으로 사용.

     - input이 encoder를 지나서 나오는 "상태값"을 decoder 상태값으로 입력 (decoder 입력같에는 시작 시그널과 종료 시그널이 포함됨)

     

    CNN (Convolutional Neural Network)

     - nxn 배열로 쪼개서 이미지 처리에 주로 사용

     - 이를 언어 모델로 사용할 수 없을까? >> 1D-CNN Model

    - 단어 정제 및 추출 후 인코딩 -> Pooling

    - word2vec + CNN 필터를 사용한다고 생각하면 됨

     

    Bi-LSTM

     - State가 한방향으로 흐르는 LSTM과는 다르게 양방향으로 State가 흐름(즉, State의 흐름이 2배가 됨)

     - 과거 데이터와 미래 데이터가 영향을 주는 모델로 성능은 LSTM보다 좋은 편

     

    BERT(bidirectional encoder representation transformers)

     - Transformer 구조를 이용한 사전학습모델

    - 사전 학습한 weight에 fine-tuning 하여 사용

     - 양방향(bidirectional) (Bi-directional Language Model)

     - Transformer 구조의 encorder 부분을이용

     - 대용량 corpus data로 모델(Glove, FastText, SGNS, CBOW 등...)을 학습시킨 후 task에 알맞게 전이학습을 하는 모델 (Word Embedding의 한 방법)

     - LSTM, NCC, Attention 구조 없이 ANN만 이어서 Task를 수행해도 성능이 잘 나온다는 장점이 있음

     - 두 가지 Pre-Training 구조를 가짐 (두 자기 동시 학습하는 구조)

    - 1. Masked Language Model (MLM) : 가려서 학습 << 단어 단위 학습

    - 1. 입력 단어의 15%를 Masking 함

    - 1.1. 이 중 80%는 그대로 마스킹

    - 1.2. 나머지 중 10%는 마스킹 대신 Random word로 치환

    - 1.3. 나머지 10%는 원래 단어를 그대로 두고 추론할 수 있게 둠 (학습이 잘 되지 않은 상태를 보정하기 위함)
    - 비율은 실험 결과적으로 성능이 가장 좋은 비율을 정한 것으로 비중을 바꿀 수 있는듯.

    - 2. Masking한 단어를 예측하도록 인공신경망에게 요구 (가린 단어를 맞출 때 보여주기 때문에 Supervised learning)

    - 단어를 양방향 참조 (GPT와는 다른 구조)

    - 2. Next Sentence Prediction (NSP) : 두 문장을 넣었을 때 연결되어 있는가? 자연스러운가? (Supervised) << 문장 단위 학습

    - 1. A 문장과 B 문장이 자연스럽게 이어지는 문장인지 (supervised)

     - INPUT(3개) : Token Embeddings, Segment Embeddings, Position Embeddings

     

    GPT(generative pre-trained transformer)

     - Transformer의 Decoder 구조만을 사용

     - Masked self-attention 구조를 사용

     - Text & Position Embed -> [ Masked Self attention layer -> Layer Norm -> Feed forward -> Layer Norm ] * 12 -> Text Prediction / Task Classification

     - 양방향성을 띄는 BERT와는 다르게 순차적으로 계산하는 단방향성 Pre-train 모델

     - 그래서 GPT는 문장 생성과 같은 Task에 강점이 있음

     - BERT는 문장 의미 및 감성 분석 추출과 관련된 Task에 강점이 있음

     

     

     

    [정리]

    자연어 처리의 주요 분야:

    • 음성 인식(Speech Recognition): 음성을 텍스트로 변환
    • 번역(Translation): 한 언어를 다른 언어로 변환
    • 텍스트 요약(Text Summary): 긴 텍스트를 요약하여 핵심 내용 제공
    • 텍스트 분류(Text Classification): 텍스트를 사전 정의된 카테고리로 분류

     

    자연어 처리의 주요 기술:

    • 감성 분석(Sentiment Analysis): 텍스트 내 감정 파악
    • 토큰화(Tokenization): 문장을 작은 단위로 분리
    • 명명체 인식(Named Entity Recognition): 텍스트 내의 주요 주제 식별
    • 정규화(Normalization): 오기나 약어를 표준 형태로 변환
    • 의존성 분석(Dependency Parsing): 문장 구조 분석
    • 특징 분석(Feature Analysis): 음성 데이터에서 중요한 특징 추출
    • 언어 모델(Language Model): 언어의 통계적 특성 반영
    • 딥러닝(Deep Learning): 대량의 데이터에서 패턴 학습
    • 은닉 마르코프 모델(Hidden Markov Model): 미래의 단어 또는 주제 예측
    • 유사도 분석(Similarity Analysis): 음성 신호의 기준 부합 여부 분석
    • 인코딩(Encoding): 텍스트의 특징 추출
    • 시계열 모델링(Time Series Modeling): 시간에 따른 데이터 분석
    • Attention Mechanism: 중요 부분에 집중
    • 셀프 어텐션(Self-Attention): 문장 내의 상호 관계 분석
    • 트랜스포머(Transformer): Attention 기반의 번역 원리

     

    텍스트 전처리 과정:

    1. 토큰화(Tokenization): 문장을 단어로 분리
    2. 정제 및 추출: 오타 수정, 필요없는 단어 제거
    3. 인코딩(Encoding): 단어를 컴퓨터가 이해할 수 있는 형태로 변환

     

    언어 모델의 종류:

    • 통계(확률) 기반 언어 모델
    • N-gram 언어 모델: 앞의 N개의 단어를 이용한 확률 계산
    • 인공 신경망 기반 언어 모델: 신경망을 이용한 언어 패턴 학습

     

    유사도 분석 방법:

    • 코사인 유사도(Cosine Similarity)
    • 백터 유사도(Bag of Words)
    • 유클리드 거리(Euclidean Distance)
    • 레벤슈타인 거리(Levenshtein Distance)

     

    텍스트 마이닝 기법:

    • 워드투벡(Word2Vec): 단어의 의미를 벡터로 표현
    • 글로브(GloVe): 단어와 주변 단어의 동시 등장 확률을 기반으로 단어 벡터 학습
    • FastText: 서브워드(subword)를 이용한 단어 벡터 학습, OOV 단어 및 드문 단어에 강함

     

    사전 훈련된 워드 임베딩:

    • CBOW, GloVe, FastText 등으로 사전 훈련된 모델을 사용하여 학습 데이터 부족 문제 해결

     

    딥러닝 기반 자연어 처리 모델:

    • RNN(Recurrent Neural Network): 시계열 데이터 처리에 적합
    • LSTM(Long Short-Term Memory): RNN의 gradient vanishing/exploding 문제 해결
    • GRU(Gated Recurrent Unit): LSTM보다 간결하고 학습이 빠름
    • Seq2Seq: RNN 또는 LSTM을 이용한 인코더-디코더 구조
    • CNN(Convolutional Neural Network): 이미지 분석 뿐 아니라 텍스트 분석에도 적용 가능
    • Bi-LSTM: 양방향 LSTM, 과거와 미래 데이터 모두 고려
    • BERT: 양방향 사전학습 모델, 트랜스포머 구조 이용
    • GPT: 단방향 사전학습 모델, 트랜스포머의 디코더 구조만 사용

    댓글

Designed by Tistory.