자연어 전처리 과정

FSA·2024년 3월 1일
0

NLP

목록 보기
1/1

1. 어휘(vocabulary)를 만들기

  1. 데이터 수집:
  • 자연어 처리 모델을 학습시키기 위해 대량의 텍스트 데이터를 수집
  • 이 데이터는 일반적으로 코퍼스(corpus)라고 불리며, 모델이 사용할 언어의 좋은 대표 예시를 포함해야 함
  1. 토크나이징(Tokenizing):
  • 수집된 텍스트 데이터를 개별 단어나 토큰으로 분리
  • 이 과정에서 특수 문자를 제거하거나, 대소문자를 통일하는 등의 정규화 작업
  1. 빈도 계산:
  • 각 토큰의 빈도를 계산하여, 얼마나 자주 등장하는지를 파악
  1. 어휘 설정:
  • 빈도가 높은 순서대로 단어를 정렬하고, 일반적으로 가장 자주 등장하는 N개의 단어를 어휘로 선택
  • N의 크기는 모델의 복잡성과 처리할 수 있는 메모리에 따라 달라집니다.
  1. 희귀 단어 처리:
  • 드물게 등장하는 단어들은 'Out-Of-Vocabulary'(OOV) 또는 'Unknown' 토큰으로 대체
  • 이렇게 함으로써 모델이 처리할 수 없는 단어가 입력될 때 그 단어를 일관된 방식으로 처리할 수 있습니다.
  1. 특수 토큰 추가:
  • 시작, 종료, 패딩, 미지의 단어 등을 나타내는 특수 토큰을 어휘에 추가

2. 단어를 숫자에 매핑(word embedding)

  1. 인덱싱:
  • 선택된 어휘의 각 단어에 고유한 인덱스를 할당
  • 일반적으로 0부터 시작하여 연속적인 숫자를 사용
  • 사용 사례
    • 이렇게 만들어진 어휘(vocabulary)는 모델이 텍스트 데이터를 처리할 때 기준이 되는 사전(dictionary) 역할을 합니다.
    • 이 사전을 통해 모델은 텍스트를 수치적인 형태로 변환하고, 그 반대의 과정도 수행할 수 있음

3. lookup table 만드는 법

  • 단어 임베딩을 위한 lookup table은 대체로 다음과 같은 방법으로 만들어집니다:

3.1. 초기화

  • 랜덤 초기화: (특수한 task에서 사용)
    • 임베딩 테이블은 종종 작은 랜덤 값으로 초기화됩니다. 학습 과정에서 이 값들은 수정되어 각 단어의 의미적 특성을 더 잘 반영하게 됩니다.
  • 사전 학습된 임베딩 사용: (보편적 task에서 사용)
    • Word2Vec, GloVe, FastText 같은 알고리즘으로 사전 학습된 임베딩을 사용하여 lookup table을 초기화할 수 있습니다.
    • 이 방법은 특히 새로운 데이터셋에 대한 학습을 시작할 때 유용하며, 일반적으로 모델의 학습 시간을 단축시키고 성능을 개선하는 데 도움을 줍니다.

3.2. 학습

  • 엔드-투-엔드 학습: (이게 훨씬 더 보편적)
    • 임베딩 테이블은 네트워크의 다른 파라미터와 함께 엔드-투-엔드로 학습될 수 있습니다.
    • 이는 특정 작업에 대한 학습 과정에서 단어의 임베딩이 자동으로 조정되는 것을 의미합니다.
  • 별도의 임베딩 학습:
    • 특정 작업에 앞서, 대규모 코퍼스(대량의 텍스트 데이터)를 사용하여 Word2Vec, GloVe 등의 알고리즘으로 단어 임베딩을 별도로 학습시킬 수도 있습니다.
    • 이렇게 학습된 임베딩은 그 후 특정 작업의 모델에 사용될 수 있습니다.

3.3. 사용

  • 학습이 완료된 후, lookup table은 모델에 입력되는 각 단어의 인덱스를 해당 단어의 임베딩 벡터로 매핑하는 데 사용
  • 모델의 입력으로 사용되는 각 단어 또는 토큰은 사전에서 해당하는 인덱스를 찾아, 임베딩 테이블에서 해당하는 벡터를 검색하여 얻어짐
  • 이러한 과정을 통해, 단어 임베딩 lookup table은 NLP 모델이 텍스트 데이터를 수치적 형태로 처리하고, 단어 간의 의미적 관계를 반영하는 벡터 표현을 활용할 수 있도록 합니다.

3. Embedding lookup (id -> vector)

  • Embedding Lookup은 단어나 기호(id)를 고정된 크기의 밀집 벡터로 변환하는 과정

3.1. Input

  • Input:
    • Embedding lookup의 입력은 일반적으로 단어나 토큰의 정수 인덱스 목록
    • 이 인덱스는 사전(vocabulary)에 정의된 단어의 위치를 나타냄
    • 예를 들어, 단어 "cat"이 사전에서 5번째 인덱스에 위치한다면, "cat"을 나타내는 입력 인덱스는 5
  • Input Dimension:
    • 입력의 차원은 [batch_size, sequence_length]
    • sequence_length는 각 데이터(예: 문장) 내의 토큰 수

3.2. 과정

  1. 사전에 정의된 각 단어는 고유한 정수 인덱스에 매핑
  2. Embedding 레이어는모든 단어에 대해 미리 정의된 차원의 벡터를 저장하는 행렬을 포함합니다. 이 행렬의 각 행은 사전의 하나의 단어를 나타내며, 각 단어는 고유한 벡터로 표현됩니다.
  3. 입력으로 주어진 정수 인덱스해당하는 벡터를 embedding 행렬에서 검색(lookup)

3.3. Output

  • Output: 출력은 검색된 embedding 벡터입니다. 이 벡터는 입력된 단어의 의미적 정보를 수치적으로 나타냄
  • Output Dimension:
    • [batch_size, sequence_length, embedding_dim]
    • 여기서 embedding_dim은 embedding 벡터의 차원이며, 사전에 정의된 값

3.4.예시

  • 사전에 "cat", "dog", "bird"와 같은 단어가 있고, 각각 0, 1, 2의 인덱스를 가진다고 가정해 봅시다.
  • 또한, embedding_dim이 4라고 하면, "cat"에 해당하는 embedding 벡터는 4차원 벡터가 됩니다.
  • 따라서, 문장 "cat and dog"을 나타내는 입력 [0, 3, 1] (여기서 3은 "and"의 인덱스)에 대해 embedding lookup을 수행하면,
  • 각 단어에 대한 4차원 벡터가 반환되고, 최종 출력 차원은 [1, 3, 4]가 됩니다(여기서 batch_size는 1로 가정).
profile
모든 의사 결정 과정을 지나칠 정도로 모두 기록하고, 나중에 스스로 피드백 하는 것

0개의 댓글