NLP 기초: 토크나이제이션이란 무엇이며 어떻게 수행할까?
토크나이제이션을 다루는 튜토리얼로, nltk와 TensorFlow 같은 인기 라이브러리의 토크나이저를 사용하는 코드 예제가 포함되어 있습니다. 이 글은 AI로 번역되었습니다. 오역이 있을 수 있으니 댓글로 알려 주세요.
Created on September 15|Last edited on September 15
Comment
목차(클릭하여 펼치기)
소개
지난 10년 동안 NLP 연구가 놀라울 정도로 활발했음에도 불구하고, 여전히 충분히 탐구되지 않은 핵심 영역은 토크나이제이션이는 자연어 텍스트를 “”라고 불리는 더 작은 단위로 분할하는 과정입니다토큰.""
여기서 토큰(tokens)은 다의적인 용어입니다. 토큰은 단어, 하위 단위(subword), 심지어 문자까지 가리킬 수 있습니다. 기본적으로 문장을 구성 요소로 분해하는 과정을 의미합니다.
예를 들어, 다음 문장에서:
"커피가 차이보다 더 우수하다"
문장을 더 작은 조각으로 나누는 한 가지 방법은, 즉 문장에서 단어들을 분리해 내는 것입니다.
""커피", "is", "superior", "than", "차이""
바로 이것이 토크나이제이션의 핵심입니다.
물론 이것이 끝은 아닙니다. 실제 환경의 애플리케이션에서는 훨씬 더 영리한 사고와, 더 미묘한 방식의 토크나이즈가 필요합니다.
예를 들어, 위의 예시에서는 따옴표 같은 문장 부호를 어떻게 처리할지조차 고려하지 않았습니다.?"또는 a","또는 문장 부호가 붙은 단어들은 어떻게 토크나이즈할까요? 은/는?"안녕하세요"와(과) 다른"안녕하세요,"? 특히 그렇지는 않습니다. 하지만 이를 모델에 어떻게 전달할까요? 우리는 …을 고려해야 할까요?"말하다"그리고"말하기다른 토큰인가요? 그들은 하다 동일한 의미를 전달하되, 우리 모델이 동사의 시제도 어느 정도 이해하길 원하잖아요?
생각해야 할 예외 사례가 무수히 많으며, 이에 대해서는 앞으로의 글에서 다룰 예정입니다. 우선은 널리 사용되는 라이브러리의 대표적인 함수들을 활용해 임의의 문장을 토큰화하는 방법을 살펴보겠습니다.
파이썬에서의 토큰화
“우주의 깊은 곳에서 인간 세상을 바라보며 깜박이는 머나먼 눈동자 같았다, 별 하나하나가.” ― 류츠신, 슈퍼노바 시대
이번 튜토리얼에서는 이 문장을 예시로 사용해 보겠습니다.
가장 쉬운 방법부터 생각해 봅시다. 즉, 단어 단위로입니다. 이를 수행하는 가장 간단하고 논리적인 방법은 간단히 분할 단어 사이의 공백을 기준으로 문장을 분할하는 방법입니다(텍스트에 불필요한 공백이 없고 문법적으로 정돈되어 있다고 가정합니다. 일단은 그렇게 가정하고 진행하겠습니다).
Python에는 다음과 같은 내장 함수가 있습니다 split() 어떤 조건에 따라 문장을 분할할 수 있게 해 줍니다. 우리 사례에서 그 조건은 단순한 공백입니다.
sentence = "Each star was like a distant eye blinking at the human world from the depths of the universe"sentence.split(" ") # < --- Inbuilt Python Function
이렇게 하면 출력은 다음과 같습니다:
['Each','star','was','like','a','distant','eye','blinking','at','the','human','world','from','the','depths','of','the','universe']
하지만 방금 전 문장은 쉬운 예였으니, 이제 더 복잡한 문장을 살펴보겠습니다.
“판결을 내리는 자가 직접 칼을 휘둘러야 한다. 사람의 목숨을 거두려 한다면, 그의 눈을 똑바로 보고 마지막 말을 들어줄 의무가 있다. 그리고 그것을 견딜 수 없다면, 아마 그 사람은 죽을 만한 죄를 짓지 않았을지도 모른다.” 에다드 스타크, 스타크 가문의 수장, 윈터펠의 영주이자 북부의 최고 영주이자 수호자.
이제 동사와 구가 더 많은, 더 복잡한 문장입니다. 이 문장의 경우 먼저 문장을 분할한 다음 단어를 나누는 편이 더 낫다고 생각할 수 있습니다. 그다음 이를 문장 단위로 처리하거나, 더 나아가 단어 단위로 세분화하세요.
from nltk import sent_tokenizegot_quote = "..."sent_tokenize(got_quote)> ['The man who passes the sentence should swing the sword.',"If you would take a man's life, you owe it to him to look into his eyes and hear his final words.",'And if you cannot bear to do that, then perhaps the man does not deserve to die.']
요약
이 글은 토크나이징에 대한 빠른 소개를 제공하기 위한 것입니다. 토크나이징은 긴 텍스트를 더 작고 소화하기 쉬운 단위로 분할하여 모델이 내용을 더 잘 이해하도록 돕는 핵심 개념입니다. 수학적 배경이나 “처음부터 구현”한 코드 예제를 더 다룬 보고서를 원하신다면 아래 댓글이나 우리의 채널을 통해 알려주세요. 포럼 ✨!
추천 읽을거리
How To Use GPU with PyTorch
A short tutorial on using GPUs for your deep learning models with PyTorch, from checking availability to visualizing usable.
PyTorch Dropout for regularization - tutorial
Learn how to regularize your PyTorch model with Dropout, complete with a code tutorial and interactive visualizations
How to save and load models in PyTorch
This article is a machine learning tutorial on how to save and load your models in PyTorch using Weights & Biases for version control.
Image Classification Using PyTorch Lightning and Weights & Biases
This article provides a practical introduction on how to use PyTorch Lightning to improve the readability and reproducibility of your PyTorch code.
A Gentle Introduction To Weight Initialization for Neural Networks
An explainer and comprehensive overview of various strategies for neural network weight initialization
How to Compare Keras Optimizers in Tensorflow for Deep Learning
A short tutorial outlining how to compare Keras optimizers for your deep learning pipelines in Tensorflow, with a Colab to help you follow along.
Add a comment