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

TensorFlow에서 유니코드 문자열을 표현하고 조작하는 방법

유니코드 문자열은 기본적으로 UTF-8로 인코딩됩니다. TensorFlow 모듈의 constant 메서드를 사용하면 유니코드 문자열을 UTF-8로 인코딩된 스칼라 값으로 표현할 수 있으며, encode 메서드를 활용하면 UTF-16으로 인코딩된 스칼라 형태로도 나타낼 수 있습니다.

유니코드란 무엇인가?

자연어를 처리하는 모델은 서로 다른 문자 집합을 가진 다양한 언어를 다루게 됩니다. 유니코드(Unicode)는 거의 모든 언어의 문자를 표현하기 위해 사용되는 표준 인코딩 체계입니다. 각 문자는 0부터 0x10FFFF 사이의 고유한 정수 코드 포인트(code point)로 인코딩되며, 유니코드 문자열은 하나 이상의 코드 값으로 구성된 시퀀스입니다.

이번 글에서는 Python으로 유니코드 문자열을 표현하는 방법과, 표준 문자열 연산의 유니코드 대응 기능을 활용해 스크립트 감지(script detection)를 기반으로 유니코드 문자열을 토큰으로 분리하는 방법을 살펴보겠습니다.

Google Colab에서 실습하기

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

import tensorflow as tf

print("상수 정의")
tf.constant(u"Thanks 😊")

print("텐서의 shape 확인")
tf.constant([u"You are", u"welcome!"]).shape

print("UTF-8로 인코딩된 스칼라로 표현된 유니코드 문자열")
text_utf8 = tf.constant(u"语言处理")
print(text_utf8)

print("UTF-16으로 인코딩된 스칼라로 표현된 유니코드 문자열")
text_utf16be = tf.constant(u"语言处理".encode("UTF-16-BE"))
print(text_utf16be)

print("유니코드 코드 포인트 벡터로 표현된 유니코드 문자열")
text_chars = tf.constant([ord(char) for char in u"语言处理"])
print(text_chars)

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

실행 결과

A constant is defined
The shape of the tensor is
Unicode string represented as UTF-8 encoded scalar
tf.Tensor(b'\xe8\xaf\xad\xe8\xa8\x80\xe5\xa4\x84\xe7\x90\x86', shape=(), dtype=string)
Unicode string represented as UTF-16 encoded scalar
tf.Tensor(b'\x8b\xed\x8a\x00Y\x04t\x06', shape=(), dtype=string)
Unicode string represented as a vector of Unicode code points
tf.Tensor([35821 35328 22788 29702], shape=(4,), dtype=int32)

코드 설명

  • TensorFlow의 tf.string은 기본 데이터 타입(dtype)입니다.
  • tf.string을 사용하면 바이트 문자열(byte string)로 이루어진 텐서를 만들 수 있습니다.
  • 유니코드 문자열은 기본적으로 UTF-8로 인코딩됩니다.
  • 바이트 문자열이 원자적 단위로 취급되기 때문에, tf.string 텐서는 길이가 서로 다른 바이트 문자열도 담을 수 있습니다.
  • 문자열의 길이는 텐서 차원에 포함되지 않습니다.
  • Python으로 문자열을 생성할 때 유니코드 처리 방식은 버전 2와 3에서 서로 다릅니다. v2에서는 유니코드 문자열에 "u" 접두사를 붙여 표시합니다.
  • v3에서는 문자열이 기본적으로 유니코드로 인코딩됩니다.

TensorFlow에서 유니코드 문자열을 표현하는 두 가지 표준 방식

  • string 스칼라: 코드 포인트 시퀀스를 알려진 문자 인코딩 방식으로 인코딩하여 표현합니다.
  • int32 벡터: 벡터의 각 위치에 단일 코드 포인트가 담기는 방식으로 표현합니다.