TensorFlow Text를 사용하면 UTF-8 문자열을 손쉽게 분할(토큰화)할 수 있습니다. 이 작업은 UnicodeScriptTokenizer를 활용하는데, 먼저 토크나이저 객체를 생성한 뒤 해당 객체의 tokenize 메서드를 문자열에 호출하면 됩니다.
사전 개념 정리
이 글에서는 Keras Sequential API를 사용합니다. Sequential API는 여러 층(layer)이 순서대로 쌓인 순차 모델을 만들 때 유용하며, 각 층은 정확히 하나의 입력 텐서와 하나의 출력 텐서를 가집니다.
참고로 최소 하나 이상의 합성곱 층(convolutional layer)을 포함하는 신경망을 합성곱 신경망(CNN)이라고 하며, 이를 활용해 학습 모델을 구축할 수 있습니다.
TensorFlow Text는 TensorFlow 2.0과 함께 사용할 수 있는 텍스트 관련 클래스와 연산(op)들의 모음입니다. 시퀀스 모델링을 위한 전처리 작업에 활용됩니다.
개발 환경
본 예제 코드는 Google Colaboratory에서 실행합니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 설정이 필요 없고 GPU에 무료로 접근할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
토큰화(Tokenization)란?
토큰화는 하나의 문자열을 토큰(token) 단위로 나누는 과정입니다. 토큰은 단어, 숫자 또는 문장 부호가 될 수 있습니다.
주요 인터페이스로는 Tokenizer와 TokenizerWithOffsets가 있으며, 각각 tokenize 메서드와 tokenize_with_offsets 메서드를 제공합니다. 대부분의 토크나이저는 Tokenizer 클래스를 확장한 TokenizerWithOffsets를 구현하고 있어, 원본 문자열 내에서 토큰이 생성된 바이트 오프셋(byte offset) 정보까지 얻을 수 있습니다. 이를 통해 해당 토큰이 원본 문자열의 어느 부분에서 추출되었는지 알 수 있습니다.
모든 토크나이저는 RaggedTensor를 반환하며, 가장 안쪽 차원의 토큰들이 원본 개별 문자열에 매핑됩니다. 결과 텐서의 랭크(rank)는 입력보다 1 증가합니다.
예제 코드
print("유니코드 스크립트 토크나이저를 호출합니다")
tokenizer = text.UnicodeScriptTokenizer()
tokens = tokenizer.tokenize(['everything not saved will be lost.', u'Sad☹'.encode('UTF-8')])
print("토큰화된 데이터를 리스트로 변환합니다")
print(tokens.to_list())코드 출처 − https://www.tensorflow.org/tutorials/tensorflow_text/intro
실행 결과
유니코드 스크립트 토크나이저를 호출합니다 토큰화된 데이터를 리스트로 변환합니다 [[b'everything', b'not', b'saved', b'will', b'be', b'lost', b'.'], [b'Sad', b'\xe2\x98\xb9']]
동작 원리 설명
UnicodeScriptTokenizer는 유니코드 스크립트 경계를 기준으로 UTF-8 문자열을 분할합니다.
여기서 사용되는 스크립트 코드는 국제 유니코드 컴포넌트(ICU)의 UScriptCode 값에 해당합니다.
WhitespaceTokenizer와 비슷하지만, 차이점이라면 언어 텍스트에서 문장 부호(USCRIPT_COMMON)를 분리할 뿐만 아니라 서로 다른 언어의 텍스트들도 서로 분리한다는 점입니다.