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

Python과 TensorFlow에서 유니코드 문자열 다루는 방법 (tf.strings.length 활용 예제)

TensorFlow에서 유니코드 연산을 수행하려면 먼저 문자열의 길이를 구하고, 길이 계산 단위를 기본값인 '바이트(BYTE)'에서 다른 값으로 지정하는 방식을 사용합니다. 또한 'encode' 메서드를 활용하면 코드 포인트(code point) 벡터를 인코딩된 문자열 스칼라로 변환할 수 있으며, 이 과정을 통해 인코딩된 각 문자열 안에 어떤 유니코드 코드 포인트가 들어 있는지 파악할 수 있습니다.

자연어 처리와 유니코드의 관계

자연어를 처리하는 딥러닝 모델은 서로 다른 문자 집합을 사용하는 다양한 언어를 동시에 다루어야 하는 경우가 많습니다. 유니코드는 전 세계 거의 모든 언어의 문자를 표현할 수 있는 표준 인코딩 시스템으로, 모든 문자가 0부터 0x10FFFF 사이의 고유한 정수 코드 포인트로 매핑됩니다. 즉, 하나의 유니코드 문자열은 0개 이상의 코드 포인트로 이루어진 시퀀스라고 정의할 수 있습니다.

이번 글에서는 Python으로 유니코드 문자열을 표현하는 방법과 이를 조작하는 방법을 살펴보고, 나아가 표준 문자열 연산의 유니코드 버전을 활용해 스크립트(script) 감지를 기반으로 유니코드 문자열을 토큰 단위로 분리하는 방식까지 소개합니다.

실행 환경: Google Colaboratory

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

print("마지막 문자는 UTF-8 인코딩에서 약 4바이트를 차지합니다")
thanks = u'Hello 😊'.encode('UTF-8')
num_bytes = tf.strings.length(thanks).numpy()
num_chars = tf.strings.length(thanks, unit='UTF8_CHAR').numpy()
print('{} bytes; {} UTF-8 characters'.format(num_bytes, num_chars))

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

실행 결과

마지막 문자는 UTF-8 인코딩에서 약 4바이트를 차지합니다
10 bytes; 7 UTF-8 characters

코드 설명

  • tf.strings.length 연산에는 unit이라는 매개변수가 있으며, 문자열 길이를 계산하는 방식을 지정합니다.
  • unit의 기본값은 "BYTE"이지만, 필요에 따라 "UTF8_CHAR" 또는 "UTF16_CHAR" 같은 다른 값으로 설정할 수 있습니다.
  • 위 예제에서 'Hello 😊' 문자열은 일반 문자 6개와 이모지 1개로 총 7개의 UTF-8 문자로 구성되며, 이모지가 4바이트를 차지하기 때문에 전체 바이트 수는 10바이트가 됩니다.
  • 이처럼 unit 옵션을 활용하면 인코딩된 각 문자열에 포함된 유니코드 코드 포인트의 개수를 정확하게 구할 수 있습니다.

더 읽어보기

TensorFlow란 무엇이며, Keras는 TensorFlow와 어떻게 연동되어 신경망을 구축할까요?