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

파이썬에서 tf.text의 wordshape 메서드로 문자열의 특정 속성을 확인하는 방법

TensorFlow Text에서 제공하는 wordshape 메서드를 사용하면 'HAS_TITLE_CASE', 'IS_NUMERIC_VALUE', 'HAS_SOME_PUNCT_OR_SYMBOL'과 같은 특정 조건을 통해 문자열이 특정 속성을 가지고 있는지 손쉽게 확인할 수 있습니다.

시작하기 전에 알아두어야 할 사항

이 튜토리얼에서는 Keras Sequential API를 사용합니다. Sequential API는 각 레이어가 정확히 하나의 입력 텐서와 하나의 출력 텐서를 갖는 순차적 모델을 구축할 때 매우 유용하며, 일반적인 레이어 스택 구조를 다룰 때 적합합니다. 하나 이상의 레이어를 포함하는 신경망을 통해 학습 모델을 만들 수 있으며, 합성곱 신경망(CNN) 역시 이러한 방식으로 구축됩니다.

TensorFlow Text는 TensorFlow 2.0과 함께 사용할 수 있는 텍스트 관련 클래스와 연산(op)들의 모음입니다. 주로 시퀀스 모델링을 위한 전처리 작업에 활용됩니다.

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

토큰화(Tokenization)란?

토큰화는 문자열을 토큰 단위로 분리하는 방법입니다. 토큰은 단어, 숫자 또는 문장부호가 될 수 있습니다. 주요 인터페이스로는 TokenizerTokenizerWithOffsets가 있으며, 각각 tokenize와 tokenize_with_offsets 메서드를 제공합니다. 다양한 종류의 토크나이저가 존재하며, 대부분 Tokenizer 클래스를 확장한 TokenizerWithOffsets를 구현합니다. 덕분에 원본 문자열에서 해당 토큰이 생성된 바이트 오프셋(byte offset) 정보까지 얻을 수 있습니다.

wordshape로 문자열 속성 확인하기

자연어 이해(NLU) 모델에서 흔히 사용되는 기능 중 하나는 텍스트 문자열이 특정 속성을 가지고 있는지 판별하는 것입니다. Wordshape는 입력 텍스트에서 다양한 관련 패턴을 매칭할 수 있도록 정규식 기반의 유용한 헬퍼 함수들을 제공합니다. 몇 가지 예제를 살펴보겠습니다.

예제

print("공백 문자 토크나이저 호출")
tokenizer = text.WhitespaceTokenizer()
print("토큰 생성 중")
tokens = tokenizer.tokenize(['Everything that is not saved will be lost.', u'Sad☹'.encode('UTF-8')])
print("첫 글자가 대문자인지 확인")
f1 = text.wordshape(tokens, text.WordShape.HAS_TITLE_CASE)
print("모든 글자가 대문자인지 확인")
f2 = text.wordshape(tokens, text.WordShape.IS_UPPERCASE)
print("토큰에 문장부호가 포함되어 있는지 확인")
f3 = text.wordshape(tokens, text.WordShape.HAS_SOME_PUNCT_OR_SYMBOL)
print("토큰이 숫자인지 확인")
f4 = text.wordshape(tokens, text.WordShape.IS_NUMERIC_VALUE)
print("결과 출력")
print(f1.to_list())
print(f2.to_list())
print(f3.to_list())
print(f4.to_list())

코드 출처 − https://www.tensorflow.org/tutorials/tensorflow_text/intro

출력 결과

Whitespace tokenizer is being called
Tokens being generated
Checking if it is capitalized
Checking if all the letters are uppercase
Checking if the tokens contain punctuation
Checking if the token is a number
Printing the results
[[True, False, False, False, False, False, False, False], [True]]
[[False, False, False, False, False, False, False, False], [False]]
[[False, False, False, False, False, False, False, True], [True]]
[[False, False, False, False, False, False, False, False], [False]]

코드 설명

  • 'WhitespaceTokenizer'를 호출하여 문자열로부터 토큰을 생성합니다.
  • 생성된 토큰의 첫 글자가 대문자(TITLE CASE)인지 확인합니다.
  • 모든 글자가 대문자인지, 문장부호나 기호가 포함되어 있는지, 그리고 숫자 값인지 여부도 함께 검사합니다.
  • 모든 연산이 완료되면 각 조건에 대한 불리언(Boolean) 값 목록이 출력됩니다.