tokenizer 생성

hooo·2024년 1월 12일
2

자연어처리(NLP)

목록 보기
6/8

최근 다양한 분야에서 각광받는 NLP(자연어처리)는 많은 언어를 대상으로 수행될 수 있다.

하지만 본 처리 이전에 필히 거쳐야 할 과정이 있는데 바로 '전처리' 과정이다.


전처리를 진행하지 않고 NLP task를 수행하면 그 결과가 전처리를 한 결과와 비교했을 때 대부분 전저리를 한 데이터가 훨씬 좋은 성능과 insight를 준다.

데이터의 특성에 따라 전처리 과정이 다를 수 있기에 어떤 데이터인 지 파악하는 게 우선 요소다.

가령 예를 들면 영화 리뷰 데이인터인 IMDB datasets에는 데이터 중에 아무래도 표준 단어보단 gooood이라 던지, bb라던 지 통상적으로 표현하는 단어들도 포함되기 때문에 전처리 과정 이전, 어떤 데이터인 지 확인하는 게 우선으로 수행되어야 한다.

보통 일반적인 전처리 과정은 아래와 같다.

  • tag 제거
  • 띄어쓰기 문자 제거
  • 문장 분리
  • 토큰화
  • 구두점, stopwords 제거

오늘은 위 방법 중 토큰화를 수행하는 토크나이저를 직접 생성하는 방법에 대해서 간단하게 알아보려고 한다.




사용할 Data, model

사용 Data

  • IMDB 데이터 중 target이 positve(긍정)인 데이터 500개, negative(부정)인 데이터 500개를 사용해서 텍스트 데이터를 구성하였다

사용 model

  • BERTWordPieceTokenizer
    (BERT에서 사용된 word-piece tokenizer)



생성 과정

(우선 imdb 데이터셋을 가져오면 정수 형태로 인코딩 되어 있는데 이 정수를 단어로 만드는 과정이 필요! -> 쉽게 찾아볼 수 있으니 다른 포스팅 참고)

  1. 정수 형태의 데이터를 변환하면 다음과 같이 변환된다.

  1. 생성된 'new_txt'의 결과를 하나의 텍스트 파일로 저장하기 위해 빈 문자열 객체를 생성하고 순서에 맞게 하나로 쭉 이어져 내용을 옮겨 담아 객체를 만들어 준다. (이 과정은 단순 for문 사용으로도 가능)

  1. -(1) (필자는 기본적인 불용어, 구두점, 특수문자 등이 제거된 텍스트로 vocabulary를 만들기 위해 아래 코드를 사용)
def txt_preprocess(text):    
    my_text = copy.copy(text.translate(translator)) 
    my_text = my_text.replace('br', '') # HTML 태그 제거
    my_text = my_text.replace('\t', '') # 띄어 쓰기 제거 
    p = re.compile(r'<br\s*/?>|[^A-Za-z]') # 알파벳 제외한 추가 문자 제거
    my_text = p.sub(' ', my_text)
    
    result = [word for word in my_text.split() if word not in stopwords]
    
    last = ' '.join(result)
    
    return last

전처리 결과
(기존 corpus 결과와 다름을 확인할 수 있음)


  1. 토크나이저 훈련 위한 라이브러리와 객체를 생성
from tokenizers import BertWordPieceTokenizer

tokenizer = BertWordPieceTokenizer(strip_accents=True, lowercase=True)

lowercase는 대소문에 대한 파라미터
strip_accencents는 발음 기호 제거에 대한 파리미터


  1. 텍스트 파일 저장, 토크나이저 훈련
with open('use.txt','w') as f:  
    f.write(use_txt)  # 텍스트 파일 저장 ('use.txt'가 저장할 파일 이름)


data_file = 'use.txt'
vocab_size = 30000  # vocabulary 크기 지정
limit_alphabet = 1000 # 최대 글자 수 제한
min_frequency = 5  # 단어 등장 최소 빈도

tokenizer.train(
        files = data_file,
        vocab_size = vocab_size,
        limit_alphabet = limit_alphabet,
        min_frequency = min_frequency
)

  1. 생성된 토크나이저 확인, 저장 후 DataFrame으로 불러오기

생성된 토크나이저 정보

tokenizer.save_model('./')   # 현재 경로에 vocab.txt 생성

df = pd.read_fwf('vocab.txt', header = None) 
# 현재 경로에 생성된 파일 Dataframe으로 생성

토크나이저 Dataframe


  1. 확인

위와 같이 잘 동작 되는 것을 볼 수 있다.



profile
Data Science

0개의 댓글

관련 채용 정보