Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

텐서플로우(TensorFlow)로 일리아드 데이터셋의 토큰을 정수로 변환하는 방법

텐서플로우(TensorFlow)는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스 기반으로 파이썬(Python)과 함께 사용되어 알고리즘 구현, 딥러닝 애플리케이션 개발 등 다양한 작업에 활용되며, 연구 목적과 상용 환경 모두에서 널리 쓰이고 있습니다.

윈도우(Windows) 환경에서는 아래 명령어를 통해 'tensorflow' 패키지를 설치할 수 있습니다.

pip install tensorflow

텐서(Tensor)란 무엇인가?

텐서는 텐서플로우에서 사용되는 기본 데이터 구조입니다. 텐서는 데이터 흐름 다이어그램(데이터 플로우 그래프)에서 엣지(edge)를 연결하는 역할을 하며, 본질적으로 다차원 배열 또는 리스트라고 할 수 있습니다.

텐서는 다음 세 가지 주요 속성으로 식별할 수 있습니다.

  • 랭크(Rank) - 텐서의 차원 수를 나타냅니다. 텐서의 차수(order) 또는 정의된 차원의 개수로 이해할 수 있습니다.

  • 타입(Type) - 텐서 요소에 연결된 데이터 타입을 의미합니다. 1차원, 2차원 또는 n차원 형태일 수 있습니다.

  • 형상(Shape) - 행과 열의 개수를 함께 나타낸 값입니다.

일리아드 데이터셋 소개

이번 예제에서는 일리아드(Illiad) 데이터셋을 사용합니다. 이 데이터셋에는 윌리엄 카우퍼(William Cowper), 에드워드 더비 백작(Earl of Derby), 새뮤얼 버틀러(Samuel Butler)의 세 가지 번역본 텍스트가 담겨 있습니다. 모델은 한 줄의 텍스트가 주어졌을 때 해당 번역가를 식별하도록 학습됩니다.

사용된 텍스트 파일은 사전에 전처리 과정을 거쳤습니다. 여기에는 문서 헤더와 푸터 제거, 줄 번호 삭제, 장(chapter) 제목 제거 등이 포함됩니다.

아래 코드는 구글 코래버러토리(Google Colaboratory)에서 실행합니다. 코랩(Colab)은 브라우저에서 파이썬 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU(그래픽 처리 장치)를 무료로 사용할 수 있다는 장점이 있습니다. 코래버러토리는 주피터 노트북(Jupyter Notebook)을 기반으로 만들어졌습니다.

예제 코드

다음은 토큰을 정수로 변환하는 코드 스니펫입니다.

keys = vocab
values = range(2, len(vocab) + 2) # 패딩용 0과 OOV용 1을 위해 0, 1은 비워둠
print("토큰을 정수로 매핑합니다")
init = tf.lookup.KeyValueTensorInitializer(
    keys, values, key_dtype=tf.string, value_dtype=tf.int64)
num_oov_buckets = 1
vocab_table = tf.lookup.StaticVocabularyTable(init, num_oov_buckets)
print("토크나이저와 조회 테이블을 사용해 데이터셋을 표준화, 토큰화, 벡터화하는 함수를 정의했습니다")
def preprocess_text(text, label):
    standardized = tf_text.case_fold_utf8(text)
    tokenized = tokenizer.tokenize(standardized)
    vectorized = vocab_table.lookup(tokenized)
    return vectorized, label

코드 출처 - https://www.tensorflow.org/tutorials/load_data/text

출력 결과

Map the tokens to integers
A function has been defined to standardize, tokenize and vectorize the dataset using tokenizer
and lookup table

코드 설명

  • vocab 집합을 사용하여 StaticVocabularyTable(정적 어휘 테이블)을 생성합니다.

  • 토큰은 [2, vocab_size + 2] 범위 내의 정수로 매핑됩니다.

  • 숫자 0은 패딩(padding)을 나타내는 데 사용되며, 숫자 1은 어휘 사전에 없는 토큰(OOV, Out-of-Vocabulary)을 나타내는 데 사용됩니다.