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

TensorFlow 텍스트 데이터 세분화(Segmentation)란 무엇일까?


텍스트 세분화(Segmentation)란?

세분화(Segmentation)는 텍스트를 단어와 같은 단위로 분할하는 작업을 의미합니다. 영어처럼 공백 문자로 단어를 구분하는 언어라면 비교적 간단하지만, 중국어나 일본어처럼 띄어쓰기를 사용하지 않는 언어도 있고, 독일어처럼 긴 합성어가 많아 의미 분석을 위해 반드시 분할 과정이 필요한 언어도 있습니다.

함께 읽으면 좋은 글: TensorFlow란 무엇이며, Keras는 어떻게 TensorFlow와 함께 신경망을 만들까요?

유니코드(Unicode)와 문자 인코딩

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

파이썬에서 유니코드 문자열을 어떻게 표현하고 조작하는지 살펴보겠습니다. 먼저 표준 문자열 연산의 유니코드 버전을 활용해, 스크립트(script) 감지를 기준으로 유니코드 문자열을 토큰 단위로 분리합니다.

Google Colab 실행 환경

아래 코드는 구글 코랩(Google Colaboratory)에서 실행했습니다. 코랩은 브라우저에서 별도 설정 없이 파이썬 코드를 바로 실행할 수 있고, GPU를 무료로 사용할 수 있다는 장점이 있으며, Jupyter Notebook을 기반으로 만들어졌습니다.

print("Below is the sentence that is processed")
sentence_texts = [u'Hello, there.', u'世界こんにちは']
print("The code point values for characters in the sentence")
sentence_char_codepoint = tf.strings.unicode_decode(sentence_texts, 'UTF-8')
print(sentence_char_codepoint)
print("The unicode script values for characters in the sentence")
sentence_char_script = tf.strings.unicode_script(sentence_char_codepoint)
print(sentence_char_script)

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

실행 결과

Below is the sentence that is processed
The code point values for characters in the sentence

The unicode script values for characters in the sentence
<tf.RaggedTensor [[25, 25, 25, 25, 25, 0, 0, 25, 25, 25, 25, 25, 0], [17, 17, 20, 20, 20, 20, 20]]>

코드 상세 설명

  • 세분화(Segmentation)는 텍스트를 단어와 같은 단위로 나누는 작업입니다.
  • 주로 공백으로 단어를 구분하는 언어에 사용되지만, 중국어·일본어처럼 띄어쓰기를 쓰지 않는 언어도 존재합니다.
  • 독일어처럼 긴 합성어를 포함하는 언어는 의미를 제대로 분석하기 위해 분할 과정이 필요합니다.
  • 웹상의 텍스트는 여러 언어와 문자 체계가 섞여 있는 경우가 많습니다. 예를 들어 "NY株価"(뉴욕 증시)처럼 영문과 한자가 한 문자열에 함께 등장합니다.
  • 머신러닝 모델 없이도 스크립트(script)가 바뀌는 지점을 단어 경계로 간주하면 대략적인 세분화가 가능합니다.
  • "NY株価" 같은 문자열에 이 방식이 잘 동작합니다. 또한 공백을 사용하는 대부분의 언어에서도 효과적인데, 그 이유는 다양한 문자 체계의 공백 문자가 실제 텍스트와 구별되는 특수 스크립트 코드인 USCRIPT_COMMON으로 분류되기 때문입니다.
  • 위 코드에서는 먼저 각 문장을 UTF-8로 디코딩하여 모든 문자의 코드 포인트(code point) 값을 생성합니다.
  • 다음으로 tf.strings.unicode_script를 사용해 각 문장의 모든 문자에 대한 유니코드 스크립트 정보를 생성합니다.