TensorFlow Text에서는 unicode_split 메서드를 사용해 문자열을 문자별로 분할할 수 있습니다. 먼저 분할할 문자열을 인코딩한 뒤, 함수 호출 결과를 변수에 할당하면 해당 변수가 분할 결과를 담게 됩니다.
함께 읽기: TensorFlow란 무엇이며, Keras는 어떻게 TensorFlow와 함께 신경망을 만드는가?
사전 지식
이 글에서는 Keras Sequential API를 사용합니다. Sequential API는 레이어를 순서대로 쌓아 올리는 순차 모델을 구축하는 데 유용하며, 각 레이어는 정확히 하나의 입력 텐서와 하나의 출력 텐서를 가집니다.
컨볼루션 신경망(CNN)은 학습 모델을 구축하는 데 널리 활용되는 대표적인 신경망 구조입니다.
TensorFlow Text는 TensorFlow 2.0과 함께 사용할 수 있는 텍스트 관련 클래스와 연산(op)들의 모음입니다. 특히 시퀀스 모델링을 위한 전처리 작업에 유용하게 쓰입니다.
아래 코드는 Google Colaboratory 환경에서 실행했습니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 무료로 GPU(그래픽 처리 장치)에 접근할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
토큰화란?
토큰화(Tokenization)는 문자열을 토큰(token) 단위로 나누는 과정입니다. 토큰은 단어, 숫자 또는 문장부호가 될 수 있습니다.
주요 인터페이스로는 Tokenizer와 TokenizerWithOffsets가 있으며, 각각 tokenize와 tokenize_with_offsets 메서드를 하나씩 제공합니다. 여러 종류의 토크나이저가 TokenizerWithOffsets(Tokenizer 클래스를 확장)를 구현하고 있으며, 이를 통해 원본 문자열 내 바이트 오프셋을 얻을 수 있습니다. 덕분에 각 토큰이 원본 문자열의 어느 부분에서 생성되었는지 파악할 수 있습니다.
예제
print("인코딩된 문자들을 분할합니다")
tokens = tf.strings.unicode_split([u"仅今年前".encode('UTF-8')], 'UTF-8')
print("토큰화된 데이터를 리스트로 변환합니다")
print(tokens.to_list())코드 출처 − https://www.tensorflow.org/tutorials/tensorflow_text/intro
출력 결과
인코딩된 문자들을 분할합니다
토큰화된 데이터를 리스트로 변환합니다
[[b'\xe4\xbb\x85', b'\xe4\xbb\x8a', b'\xe5\xb9\xb4', b'\xe5\x89\x8d']]
설명
모든 토크나이저는 RaggedTensor를 반환하며, 가장 안쪽 차원의 토큰들은 개별 원본 문자열에 매핑됩니다.
결과 텐서의 랭크(rank)는 기존보다 1 증가합니다.
공백으로 단어를 구분하지 않는 언어를 토큰화할 때는 문자 단위로 분할하는 것이 일반적입니다.
이러한 분할은 TensorFlow 코어에 포함된 unicode_split 연산으로 수행할 수 있습니다.
unicode_split이 호출된 후에는 토큰화된 데이터가 리스트에 추가됩니다.