재형이의 성장통 일지
  • NLP (3)
    2024년 03월 10일 10시 48분 42초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
     

     

    • 오늘은 UFC 션 오말리의 챔피언 타이틀 방어전이 하는 날입니다
    • 지금 아침부터 작성 중인데 아마 글을 올릴 때 쯤이면 이미 결과가 나왔을 수도 있겠네요
    • 션 오말리 화이팅~!!

     

     

    • 션 오말리 승~

     

     

     

     

     


     

     

     

     

     

     

     

     

     

    1. 의미 연결망 분석(Semantic Network Analysis)

    • 단어 간의 관계를 분석하기 위해 사용
    • 단어의 관계에 적용하여 텍스트의 의미 구조를 파악하려는 분석 기법이다
    • 특정 단어가 어떤 단어와 함께 자주 사용되었는가?
      • 문서의 저자가 강조하고자 하는 것이 무엇인지, 어떤 어조를 띄고 있는지 추측할 수 있음
    • SNA 분석 방법
      • 문서를 구성하고 있는 단어를 노드로 구성하고 노드와 노드를 연결
      • 네트워크 = 문서를 구성하고 있는 단어와 관계
    • SNA 분석는 배달 어플의 리뷰를 분석해서 글쓴이의 감정을 파악하는데 사용할 수 있다
    • 예시) 피자 배달 리뷰 SNA 분석
      1. 원문
        • 피자는 치즈!, 토핑 종류가 많아요, 치즈도 많네요
      2. 텍스트 정제
        • 피자, 치즈, 토핑, 종류, 많다
      3. 인접 행렬 (Adjacent Matrix)
          피자 치즈 많다 토핑 종류
        피자 0 1 0 0 0
        치즈 1 0 1 0 0
        많다 0 1 0 1 1
        토핑 0 0 1 0 1
        종류 0 0 1 1 0
      4. 연결망 그래프
      5. SNA 속성
        1. 연결 정도
          • 하나의 노드에서 뻗어나가는 엣지의 갯수
        2. 연결 중심성 (Degree centrality)
          • 친구 수 (degree)가 많은 사람이 더 중심적 역할(한 단어에 직접 연결된 다른 단어의 수가 얼마나 많은지 측정)
          • 연결망의 크기에 따라 값을 비교하기 어렵기 때문에, 표준화 필요
          • $\frac{특정 노드 i와 직접 연결된 노드 수}{노드 i와 직간접적으로 연결된 모든 노드 수}$
        3. 매개 중심성 (Betweenness centrality)
          • 다리(bridge) 역할을 많이 하는 사람이 더 중심적 역할
          • 한 단어가 다른 단어들과의 연결망을 구축하는 데 매개자 역할을 얼마나 수행하는지 측정
          • 단어들의 등장 빈도가 낮더라도 매개 중심성이 높으면 단어들 간 의미 부여 역할이 커짐
        4. 근접 중심성 (Closeness centrality)
          • 다른 노드와 더 가깝게 연결된 노드가 더 중심적 역할
          • 한 단어가 다른 단어에 얼마나 가깝게 있는지 측정
          • 직접 연결 뿐 아니라 간접적으로 연결된 모든 단어들 사이의 거리를 측정

    2. SNA를 위한 파이썬 패키지

     

    Tutorial — NetworkX 3.2.1 documentation

    Tutorial This guide can help you start working with NetworkX. Creating a graph Create an empty graph with no nodes and no edges. >>> import networkx as nx >>> G = nx.Graph() By definition, a Graph is a collection of nodes (vertices) along with identified p

    networkx.org

    • nodes() : 노드 정보 확인
    • edges() : 엣지 정보 확인
    • number_of_nodes() : 노드의 수, number_of_edges() : 엣지의 수
    • nx.get_node_attributes(NetworkX, Key) : 노드의 속성 출력
    • nx.get_edge_attributes(NetworkX, 'weight') : 가중치 출력
    • neighbors(x) : 노드 x와 연결된 노드의 수
    • NetworkX [x] [y] : 노드 x와 노드 y 사이의 연결 강도 (weight) 구하기
    • pyplot 라이브러리를 이용한 그래프 시각화
    • SNA 속성 구하기
      1. 연결 중심성
      2. 매개 중심성
      3. 근접 중심성

    3. 자연어 처리 분야에서 사용하는 신경망

    • 자연어 처리 분야에서는 보통 다음과 같은 프로세스로 신경망이 이용된다
      1. 자연어를 벡터로 변환한다 → Embedding Layer
      2. 자연어의 특징을 추출한다 → Conv1D Layer
      3. 자연어의 시계열성을 학습한다 → RNN

    3-1. RNN (Recurrent Neural Network)

    • 유닛 사이의 연결이 방향성 있는 사이클(Directed Cycle)을 형성하며 자신을 가리키는 반복 가중치 구조(Recurrent Weight)를 포함하는 신경망 알고리즘
    • 연속된 데이터 상에서 이전 순서의 hidden node의 값을 저장하고, 다음 순서의 입력 데이터로 학습할 때 사용
    • Sequential Data 학습
      • 과거학습의 정보를 잃지 않고 연속적인 정보의 흐름을 학습에 반영 ($y_{k-1} → y_{k} → y_{k+1}$)

    • RNN의 방식에는 다양한 방식이 존재한다
    • Conv1D를 사용한 Text classifier code example
    # A integer input for vocab indices.
    inputs = keras.Input(shape=(None,), dtype="int64")
    
    # Next, we add a layer to map those vocab indices into a space of dimensionality
    # 'embedding_dim'.
    x = layers.Embedding(max_features, embedding_dim)(inputs)
    x = layers.Dropout(0.5)(x)
    
    # Conv1D + global max pooling
    x = layers.Conv1D(128, 7, padding="valid", activation="relu", strides=3)(x)
    x = layers.Conv1D(128, 7, padding="valid", activation="relu", strides=3)(x)
    x = layers.GlobalMaxPooling1D()(x)
    
    # We add a vanilla hidden layer:
    x = layers.Dense(128, activation="relu")(x)
    x = layers.Dropout(0.5)(x)
    
    # We project onto a single unit output layer, and squash it with a sigmoid:
    predictions = layers.Dense(1, activation="sigmoid", name="predictions")(x)
    
    model = keras.Model(inputs, predictions)
    
    # Compile the model with binary crossentropy loss and an adam optimizer.
    model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
    • LSTM를 사용한 Text classifier code example
    # Input for variable-length sequences of integers
    inputs = keras.Input(shape=(None,), dtype="int32")
    # Embed each integer in a 128-dimensional vector
    x = layers.Embedding(max_features, 128)(inputs)
    # Add 2 bidirectional LSTMs
    x = layers.Bidirectional(layers.LSTM(64, return_sequences=True))(x)
    x = layers.Bidirectional(layers.LSTM(64))(x)
    # Add a classifier
    outputs = layers.Dense(1, activation="sigmoid")(x)
    model = keras.Model(inputs, outputs)
    model.summary()

    4. 시퀀스 투 시퀀스(Sequence-to-Sequence, seq2seq)

    • seq2seq는 번역기에서 대표적으로 사용되는 모델입니다
    • seq2seq는 크게 인코더와 디코더라는 두 개의 모듈로 구성됩니다
    • 인코더는 입력 문장의 모든 단어들을 순차적으로 입력받은 뒤에 마지막에 이 모든 단어 정보들을 압축해서 하나의 벡터로 만드는데, 이를 컨텍스트 벡터(context vector)라고 합니다
    • 입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송합니다. 디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력합니다

    • 각각의 인코더와 디코더는 RNN 입니다
    • seq2seq의 단점
      • 인코더의 출력물인 context vector는 고정된 길이의 벡터이기 때문에 입력 문장의 길이가 길어지면 필요한 정보들이 모두 벡터에 담기지 못하여 loss가 생김 → Bottleneck Problem 발생
      • Vanishing Gradient 문제를 해결하지 못함
    • 그래서 seq2seq 논문이 발표된 바로 다음해 2015년에 Attention이라는 모델이 등장하게 됩니다

    5. Attention

    • 어텐션의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다는 점입니다
    • 이름이 Attention인 이유는 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 더 집중(attention)해서 보기 때문입니다. 쉽게 생각하면 중요한 부분에 형광펜으로 칠한다고 생각하면 될 것 같습니다

    Paper: Neural Machine Translation by Jointly Learning to Align and Translate(Dzmitry Bahdanau et al., ICLR 2015)

    • 어텐션을 함수로 표현하면 주로 다음과 같이 표현됩니다
      Attention(Q, K, V) = Attention Value
      • Q = Query : t 시점의 디코더 셀에서의 은닉 상태
      • K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
      • V = Values : 모든 시점의 인코더 셀의 은닉 상태들
    • 어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구합니다. 그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영해줍니다. 그리고 유사도가 반영된 '값(Value)'을 모두 더해서 리턴합니다
    • Attention에는 다양한 종류가 있는데 여기서는 닷 프로덕트 어텐션(Dot-Product Attention)을 다룬다

    • Attention에서는 인코더의 히든 스테이트들을 가지고 현재 시점에서 디코더에서 구하려고 하는 값과의 연관성을 구해서 어떤 단어가 현재 번역하려는 단어와 가장 연관이 있는지를 찾는다. 이렇게 하면 디코더가 출력 단어를 더 정확하게 예측하는데 도움을 줄 수 있다
    • 그렇게 하기 위해서 어텐션 값이라는 것을 구한 후에 현재 구하려고 하는 디코더의 히든 스테이트와 결합하여 출력물을 만들어야 한다.
    • 어텐션 값은 어텐션 스코어라는 것을 구한 후에 소프트맥스를 통해 어텐션 분포를 구해서 각각 나온 분포값과 인코더의 히든 스테이트를 내적하여 구해야 한다
    • 어텐션 스코어는 이전에 진행했던 시점에서의 인코더 히든 스테이트들 각각이 현재 구하려고 하는 디코더에 얼마나 연관이 있는지를 매긴 점수이다. 이것을 소프트맥스를 사용하면 확률로 나타낼 수 있다.
    • 어텐션 스코어 구하는 공식

    • Attention 정리
      • seq2seq에서 context vector가 fix된 것을 보완
      • 타겟 단어와 중요한 관계를 가지는 부분을 자동(동적)으로 찾음

    6. Transformer (Attention is all you need!)

    • Transformer는 RNN을 Long-term dependency, Gradient Vanishing 근본적인 한계로 지적하고, RNN은 제외하고 Attention 구조만 사용 (Attention is all you need!)한 모델이다
    • Model Architecture
      • Encoder and Decoder stacks
        • Encoder와 Decoder를 각각 6개 사용
        • Encoder
          • 두 파트로 구성(Multi-head self attention, Position wise fully connected feed forward network)
          • 각 파트에 residual connection 사용
          • 모든 파트의 Output dimension은 512
        • Decoder
          • 6개의 독립적인 구조
          • 세 파트로 구성 (Masked Multi-Head Attention, Multi-head self attention, Position wise fully connected feed forward network)
          • 각 파트에 residual connection 사용
          • 모든 파트의 Output dimension은 512
      • Attention
        • Scaled dot-product attention
        • Multi-head attention
        • Self attention
          • 입력 문장을 잘 표현하기 위해 사용
            Self attention
            Self attention
        • Masked Self attention
          • Masked Self attention는 Attention과 달리 Transformer는 한번에 입력값들을 전부 보기 때문에 아직 봐야할 부분이 아닌 곳을 Masking 처리를 해줘야 함 (미래의 데이터는 숨기기)
            Masked Self attention
      • Position wise feed forward networks
        • 문장의 각 위치를 서로 독립적으로 학습
      • Embeddings and Softmax
      • Positional Encoding
        • RNN을 제거하였지만 단어의 위치 정보를 전달 할 수 있는 방법이 필요
        • 입력 단어의 임베딩 벡터에 위치 정보를 더하여 사용
          – d = 512, (n = 10000)
          Positional Encoding

    7. BERT

    • BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, Jacob Devlin, Ming-Wei Chang , Kenton Lee, Kristina Toutanova
      • bi-directional Transformer로 이루어진 언어모델
      • 잘 만들어진 BERT 언어모델 위에 1개의 classification layer만 부착하여 다양한 NLP task를 수행
      • 영어권에서 11개의 NLP task에 대해 SOTA(state of the art) 달성
    • BERT는 대량의 코퍼스를 Pre-training한 다음, 각 Task에 따라서 fine-tuning을 진행하는 모델이다

    7-1. PLM

    • Pre-training then fine-tuning
    • 대량의 코퍼스를 Pre-training한 다음, 각 Task에 따라서 fine-tuning을 진행하는 모델
    • BERT를 시작으로 계속해서 다양해짐

     

     

     

     

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

     

    15-01 어텐션 메커니즘 (Attention Mechanism)

    앞서 배운 seq2seq 모델은 **인코더**에서 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터 표현으로 압축하고, **디코더**는 이 컨텍스트 벡터를 통해서 출력 …

    wikidocs.net

    반응형

    '인공지능 > 인공지능 기초' 카테고리의 다른 글

    GAN(2), AI 관련 지식(1)  (0) 2024.03.12
    Auto Encoder, GAN(1)  (0) 2024.03.11
    NLP (2)  (0) 2024.03.09
    Embedding (2), NLP (1)  (2) 2024.03.08
    신경망 성능 향상, 1D conv, Embedding (1)  (2) 2024.03.07
    댓글