[자연어처리] 인코딩

코딩

  • 성능을 위해 텍스트와 숫자를 일치시켜야 함
  • 각 단어에 고유 색인이 필요합니다.

  • 전처리는 텍스트가 디지털화되기 전에 가능한 한 많이 수행되어야 합니다.

정수 인코딩

  • 빈도별로 정렬하고 높은 빈도에서 낮은 빈도로 정수를 지정하여 일련의 단어를 만들 수 있습니다.

  • 가장 일반적인 단어부터 시작하여 한 번에 정수를 입력하여 빈도가 낮은 단어를 제외할 수도 있습니다.

  • 희귀 단어를 제거하면 단어 집합에 없는 단어가 생성될 수 있습니다(어휘 부족 = OOV).
  • 새 단어 “OOV”를 추가하고 문장에 없는 단어를 “OOV” 인덱스로 인코딩합니다.

  • 이런 종류의 코딩 작업을 지원하는 라이브러리가 있습니다.

    • 카운터, FreqDist, eumerate, keras.tokenizer
  • 스위치
    • 카운터(word_list): 키(단어)와 값(개수) 형태의 맵을 반환합니다.

    • 그런 다음 다음 명령을 사용하여 반환 값에서 상위 주파수를 추출할 수 있습니다.

      • result.most_commont(5) : 상위 5개 조회수
  • NLTK의 FreqDisk
    • Count와 마찬가지로 키 및 값 형식으로 단어 및 빈도를 반환합니다.

  • 낱낱이 세다
    • 정렬된 데이터 유형을 입력으로 사용하고 인덱스가 있는 값을 반환합니다.

  • Keras 텍스트 전처리
    • Keras의 Tokenizer.fit_on_tests를 사용하여 빈도를 기반으로 단어 집합을 생성합니다.

    • Tokenizer.texts_to_sequences()는 말뭉치를 위해 단어를 지정된 인덱스로 변환합니다.

    • 상위 n개를 추출하려면 토크나이저 생성 시 num_words 옵션을 n+1(패딩에 0 사용)으로 설정해야 합니다.


      tokenizer = Tokenizer(num_words = 5 + 1)
    • 상위 n개를 지정해도 단어 검색이나 인덱싱은 같은 방식으로 이루어집니다.

      texts_to_sequencesAPI에 적용
    • 기본적으로 OOV 단어는 제거되지만 유지하려면 oov_token 옵션을 사용하십시오.
      tokenizer = Tokenizer(num_words = 5 + 1, oov_token = 'OOV')

가구류

  • 서로 다른 집합은 병렬 작업을 위해 임의로 동일한 길이여야 합니다.

  • 숫자 0을 사용하면 “제로 패딩”이라고 합니다.

  • 가장 긴 문장의 길이를 추출하고 긴 문장보다 짧은 문장에 대해 가상의 단어 “PAD”를 추가합니다.

  • “PAD”라는 단어는 숫자 0으로 정의됩니다.

    긴 문장보다 짧은 문장에 0을 추가합니다.

  • 가장 긴 문장이 항상 기준으로 사용될 필요는 없습니다.

  • Keras에서 이 패딩 작업은 API로 노출됩니다.


    from tensorflow.keras.preprocessing.sequence import pad_sequence
    • 문장 시작 부분에 패딩 값을 추가하는 옵션을 지정할 수 있습니다.

단일 호스트 인코딩

  • 단어 집합
    • 다른 단어 세트
    • 단어 변형도 다른 단어로 계산됩니다.

  • 선글라스 단어 텍스트 벡터
  • 표현할 단어의 인덱스에 값 1을 할당
    • word_to_idx = {hello: 0, me: 1, is: 2, princess: 3}
    • one_hot_encoding(hello, word_to_idx) = (1, 0, 0, 0)
    • 벡터의 길이는 단어 집합의 크기입니다.

    • Hello는 인덱스가 0이므로 벡터의 0번째 요소를 1로 변경합니다.

    • “is”라는 단어가 (idx=2) -> (0, 0, 1, 0)인 경우
  • Keras에는 인코딩된 값에 대해 원-핫 인코딩을 수행하는 API가 있습니다.

    to_categorical
  • 단어의 수가 증가함에 따라 벡터를 저장할 공간이 증가합니다(=벡터 차원이 증가함).
  • 단어의 유사성을 표현하지 못함
  • 단어의 잠재된 의미를 반영하여 다차원 공간에서 벡터화하는 기법이 있습니다.

데이터 분리

감독 학습

  • “문제” 및 “수정” 데이터로 구성
  • 기계가 문제와 정답을 보고 학습하고 정답이 없는 데이터에 대해 예측할 수 있습니다.

  • 학습 후 평가를 위해 테스트 데이터에서 학습에 사용할 데이터를 분리합니다.

  • x_train: 종이 데이터 조회
  • y_train: 설문 응답 데이터
  • x_test: 시험지 데이터
  • y_test: 시험지 응답 데이터
  • X와 Y 분리
    • zip() 또는 dp.DataFrame 또는 np.slicing
  • 테스트 데이터의 분리
    • scikit 실행 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size, random_state)
    • X: 독립 변수 데이터(배열 또는 데이터 프레임)
    • y: 레이블(정답) 데이터
    • test_size: 테스트할 데이터의 개수, 1보다 작으면 비율로 간주
    • random_state: 무작위 시드
    • 데이터 순서의 내부 섞기
    • 난수를 제공한 후 난수를 다시 작성하고 API를 호출하여 동일한 데이터를 얻을 수 있습니다.

  • 어레이 슬라이싱도 수동으로 가능하지만 데이터가 섞이지 않거나 소수점 계산으로 인해 데이터가 누락될 수 있습니다.

한국 전처리 패키지

  • PyKoSpacing
    • 공백이 없는 문장은 공백이 있는 문장으로 변환됩니다.

  • 파이 한스펠
    • 네이버 한글 맞춤법 검사기를 기반으로 제작
    • 거리 수정
  • 소인프
    • 품사 태깅, 단어 토큰화의 일부
    • 기존 형태소와 달리 토크나이저가 단어의 빈도와 앞뒤 테스트를 결정합니다.

    • 다음과 같은 미등록 단어 토큰화에 강함 나. 신조어
    • 학습 기반 토크나이저
    • 집계 확률을 계산하여 단일 단어 결정
    • 분기 엔트로피
      • 단어의 가능한 발생 수가 높을수록 더 큽니다.

  • 명사 등이 하이픈으로 연결되지 않도록 사용자 지정 사전을 추가할 수 있습니다.