[모두의 딥러닝] 22. 텍스트 전처리 - 토큰화(tokenization), 빈도 수 세기

자연어 처리(Natural Language Processing, NLP)

- 인간의 언어를 컴퓨터가 이해하고 처리할 수 있는 형태로 변환하는 기술

- 딥러닝을 하기 전 텍스트를 정제하는 텍스트 전처리 과정 필요

 

 

 

텍스트 토큰화(tokenization)

- 토큰(token) : 텍스트 데이터를 작은 단위로 분할하는 과정에서 생성된 단어, 음절, 형태소와 같은 개별적인 단위

- 토큰화(tokenization) : 입력된 텍스트를 잘게 나누는 과정

 

 

  • text_to_word_sequence

: 텍스트를 단어 단위로 나눔

: keras에 존재

# 케라스의 텍스트 전처리와 관련한 함수중 text_to_word_sequence 함수를 불러옴
from tensorflow.keras.preprocessing.text import text_to_word_sequence

# 전처리할 텍스트 결정
text = '내 죽음이 내 삶보다 더 가치 있기를'

# 해당 텍스트 토큰화
result = text_to_word_sequence(text)
print("원문 :", text)
print("토큰화 :", result)
원문 : 내 죽음이 내 삶보다 더 가치 있기를
토큰화 : ['내', '죽음이', '내', '삶보다', '더', '가치', '있기를']

 

 

 

텍스트 빈도수 세기(Bag-of-Words)

- 텍스트 데이터를 단어의 집합으로 표현

- 문서를 단어들의 출현 여부 또는 등장 빈도로 표현하여 벡터 형태로 나타냄

 

 

  • Tokenizer()

: 텍스트 데이터를 토큰화하고 정수 인덱스로 변환하는 기능을 제공

: keras에 존재

from tensorflow.keras.preprocessing.text import Tokenizer

# 전처리하려는 세 개의 문장
docs = ['먼저 텍스트의 각 단어를 나누어 토큰화 합니다.',
       '텍스트의 단어로 토큰화해야 딥러닝에서 인식됩니다.',
       '토큰화한 결과는 딥러닝에서 사용할 수 있습니다.',
       ]

 

  • fit_on_texts()

: 주어진 텍스트 데이터에 대해 토큰화를 수행하고, 각 단어를 딕셔너리 형태로 구성

: Tokenizer에 존재

# 토큰화 함수 지정
token = Tokenizer()
# 토큰화 함수에 문장 적용
token.fit_on_texts(docs)

 

  • word_counts()

: 단어의 빈도수를 계산

: 순서를 기억하는 OrderedDict 클래스에 담겨 있는 형태로 출력

: Tokenizer에 존재

print("단어 카운트 :", token.word_counts)
단어 카운트 : OrderedDict([('먼저', 1), ('텍스트의', 2), ('각', 1),
('단어를', 1), ('나누어', 1), ('토큰화합니다', 1), ('단어로', 1),
('토큰화해야', 1), ('딥러닝에서', 2), ('인식됩니다', 1), ('토큰화한', 1),
('결과는', 1), ('사용할', 1), ('수', 1), ('있습니다', 1)])

 

  • document_count

: 텍스트의 문장 수를 계산

: Tokenizer에 존재

print("문장 카운트 :", token.document_count)
문장 카운트 : 3

 

  • word_docs()

: 각 단어들이 등장한 문장의 수 나타냄

: Tokenizer에 존재

print("각 단어가 몇 개의 문장에 포함되어 있는가 :", token.word_docs)
각 단어가 몇 개의 문장에 포함되어 있는가 : defaultdict(<class 'int'>, 
{'각': 1, '나누어': 1, '먼저': 1, '단어를': 1, '텍스트의': 2, '토큰화합니다': 1, 
'인식됩니다': 1, '단어로': 1, '토큰화해야': 1, '딥러닝에서': 2, '결과는': 1, 
'수': 1, '있습니다': 1, '사용할': 1, '토큰화한': 1})

 

  • word_index()

: 각 단어에 매겨진 인덱스 값 나타냄

: Tokenizer에 존재

print("각 단어에 매겨진 인덱스 값 :", token.word_index)
각 단어에 매겨진 인덱스 값 : {'텍스트의': 1, '딥러닝에서': 2, '먼저': 3, '각': 4, 
'단어를': 5, '나누어': 6, '토큰화합니다': 7, '단어로': 8, '토큰화해야': 9, 
'인식됩니다': 10, '토큰화한': 11, '결과는': 12, '사용할': 13, '수': 14, '있습니다': 15}

 

 

 

'모두의 딥러닝 개정 3판'의 내용과 https://github.com/taehojo/deeplearning의 코드 참고