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

TensorFlow와 Python으로 일리아드 데이터셋의 토큰화된 단어에서 어휘 사전 구축하기

TensorFlow는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, Python과 함께 사용하여 알고리즘, 딥러닝 애플리케이션 등을 구현할 수 있습니다. 연구 목적과 실제 서비스(프로덕션) 목적 모두에서 널리 활용되고 있으며, 복잡한 수학 연산을 빠르게 처리할 수 있는 최적화 기법을 갖추고 있습니다. 이는 내부적으로 NumPy와 다차원 배열을 활용하기 때문인데, 이러한 다차원 배열을 '텐서(tensor)'라고 부릅니다. 또한 TensorFlow는 딥 신경망 작업도 지원합니다.

텐서(Tensor)는 TensorFlow에서 사용되는 핵심 데이터 구조로, 플로우 다이어그램의 엣지(edge)를 연결하는 역할을 합니다. 이 플로우 다이어그램은 '데이터 흐름 그래프(Data flow graph)'라고 불립니다. 텐서란 결국 다차원 배열 또는 리스트를 의미합니다.

이번 글에서는 일리아드(Illiad) 데이터셋을 사용합니다. 이 데이터셋에는 윌리엄 카우퍼(William Cowper), 에드워드(더비 백작, Earl of Derby), 새뮤얼 버틀러(Samuel Butler)의 세 가지 번역본 텍스트 데이터가 담겨 있습니다. 모델은 한 줄의 텍스트가 주어졌을 때 해당 문장을 누가 번역했는지 식별하도록 학습됩니다. 사용된 텍스트 파일은 사전에 전처리 과정을 거쳤으며, 여기에는 문서 머리글과 바닥글, 행 번호, 챕터 제목을 제거하는 작업이 포함됩니다.

아래 코드는 Google Colaboratory 환경에서 실행됩니다. Google Colab(Colaboratory)은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU(그래픽 처리 장치)를 무료로 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

예제

다음은 코드 스니펫입니다 −

print("Build a vocabulary using the tokens")
tokenized_ds = configure_dataset(tokenized_ds)
vocab_dict = collections.defaultdict(lambda: 0)
for toks in tokenized_ds.as_numpy_iterator():
    for tok in toks:
        vocab_dict[tok] += 1
print("Sort the vocabulary")
vocab = sorted(vocab_dict.items(), key=lambda x: x[1], reverse=True)
vocab = [token for token, count in vocab]
vocab = vocab[:VOCAB_SIZE]
vocab_size = len(vocab)
print("The vocabulary size is : ", vocab_size)
print("First six vocabulary entries are :", vocab[:6])

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

출력 결과

Build a vocabulary using the tokens
Sort the vocabulary
The vocabulary size is : 10000
First six vocabulary entries are : [b',', b'the', b'and', b"'", b'of', b'.']

다음 단계에서는 토큰들을 빈도순으로 정렬한 뒤 상위 VOCAB_SIZE개의 토큰만 유지하여 어휘 사전을 구축하게 됩니다.

설명

  • 토큰들을 출현 빈도를 기준으로 정렬한 후 어휘 사전이 구축됩니다.

  • 구축된 어휘 사전의 일부 항목이 콘솔에 출력되어 확인할 수 있습니다.