Загружаем каталог…
Загружаем каталог…
1. 토큰화란? 자연어 처리(NLP)에서는 크롤링, 문서 수집, 로그 데이터 등을 통해 얻은 텍스트 데이터인 코퍼스(corpus) 를 그대로 사용하기 어렵다. 목적에 맞게 텍스트를 전처리해야 하며, 대표적인 전처리 과정에는 다음이 있다. 토큰화(Tokenization) 정제(Cleaning) 정규화(Normalization) 이 중 토큰화란 문장이나 문서에서 의미 있는 최소 단위인 토큰(token) 으로 나누는 작업이다. 토큰은 상황에 따라 단어, 형태소, 문장, 서브워드 등이 될 수 있다. wikidocs 예를 들어 다음 문장이 있다고 가정해보자. Time is an illusion. Lunchtime double so! 구두점을 제거하고 공백을 기준으로 단어 토큰화를 하면 다음과 같이 나눌 수 있다. ["Time", "is", "an", "illusion", "Lunchtime", "double", "so"] 하지만 실제 자연어 처리에서는 단순히 공백 기준으로 문장을 나누는 것만으로 충분하지 않다. 줄임말, 구두점, 숫자, 이메일 주소, 날짜, 한국어 조사처럼 예외적으로 처리해야 하는 요소가 많기 때문이다. wikidocs 2. 단어 토큰화 토큰의 기준을 단어로 설정해 나누는 방식을 단어 토큰화(Word Tokenization) 라고 한다. 영어는 띄어쓰기 단위가 단어와 비교적 잘 일치하기 때문에, 기본적인 경우 공백을 기준으로 나누는 방식이 어느 정도 작동한다. 하지만 아포스트로피, 하이픈, 약어, 고유명사, 숫자 표현 등이 등장하면 토큰화 기준을 세밀하게 설정해야 한다. 예를 들어 아래 문장에서 Don't , Jone's 는 어떻게 분리해야 할까? Don't be fooled by the dark sounding name, Mr. Jone's Orphanage. 토큰화 도구별 결과는 다를 수 있다. 도구 Don't 처리 방식 Jone's 처리 방식 word_tokenize Do , n't Jone , 's WordPunctTokenizer Don , ' , t Jone , ' , s text_to_word_sequence don't 유지 jone's 유지 from nltk.tokenize import word_tokenize, WordPunctTokenizer from tensorflow.keras.preprocessing.text import text_to_word_sequence text = "Don't be fooled by the dark sounding name, Mr. Jone's Orphanage." print(word_tokenize(text)) print(WordPunctTokenizer().tokenize(text)) print(text_to_word_sequence(text)) 이처럼 어느 결과가 정답이라고 단정하기보다, 분석 목적과 이후 모델링 방식에 적합한 토큰화 기준을 선택하는 것 이 중요하다. wikidocs 3. 토큰화 시 고려할 점 구두점과 특수문자는 무조건 제거하지 않는다 구두점이나 특수문자는 항상 불필요한 노이즈가 아니다. 문장의 경계나 특정 의미를 표현할 수 있기 때문에, 단순 삭제 전에 데이터의 역할을 확인해야 한다. 다음과 같은 사례가 있다. 표현 의미 주의점 Ph.D. 학위 약어 마침표를 제거하면 약어 정보가 훼손될 수 있음 AT&T 기업명 특수문자가 이름의 일부임 m.p.h 속도 단위 점을 기준으로 분리하면 의미가 달라질 수 있음 $45.55 가격 $ , 소수점이 의미를 가짐 01/02/06 날짜 / 가 날짜 구분자 역할을 함 123,456,789 큰 수 , 가 숫자 단위 표현에 필요함 즉, 구두점 제거는 일괄적으로 수행하기보다 데이터의 도메인과 모델의 목적에 따라 결정해야 한다. 금융 텍스트에서는 금액, 수익률, 날짜, 종목 코드와 같은 정보가 많으므로 숫자·통화기호·소수점·쉼표의 처리 기준을 특히 주의할 필요가 있다. wikidocs 줄임말과 띄어쓰기가 포함된 표현 영어에는 아포스트로피를 통해 단어가 축약되는 경우가 많다. I'm → I am we're → we are what're → what are doesn't → does not 또한 여러 단어가 하나의 의미 단위로 사용되기도 한다. New York rock 'n' roll 따라서 토큰화 과정은 단순히 공백이나 기호를 기준으로 자르는 작업이 아니라, 문맥과 언어 규칙을 고려해 의미 단위를 보존하는 작업 이라고 볼 수 있다. wikidocs Penn Treebank 토큰화 예시 Penn Treebank 토큰화 규칙의 대표적 특징은 다음과 같다. 하이픈으로 연결된 단어는 하나의 토큰으로 유지한다. doesn't 처럼 접어(clitic)가 붙은 축약형은 분리한다. from nltk.tokenize import TreebankWordTokenizer tokenizer = TreebankWordTokenizer() text = ( "Starting a home-based restaurant may be an ideal. " "it doesn't have a food chain or restaurant of their own." ) print(tokenizer.tokenize(text)) 출력 예시는 다음과 같다. [ 'Starting', 'a', 'home-based', 'restaurant', 'may', 'be', 'an', 'ideal.', 'it', 'does', "n't", 'have', 'a', 'food', 'chain', 'or', 'restaurant', 'of', 'their', 'own', '.' ] home-based 는 하나의 토큰으로 유지되고, doesn't 는 does 와 n't 로 분리되는 것을 확인할 수 있다. wikidocs 4. 문장 토큰화 문장을 기준으로 텍스트를 나누는 작업을 문장 토큰화(Sentence Tokenization) 또는 문장 분리(Sentence Segmentation)라고 한다. 가장 단순한 방법은 마침표( . ), 물음표( ? ), 느낌표( ! )를 기준으로 나누는 것이다. 하지만 마침표는 문장의 끝뿐 아니라 약어, 이메일 주소, IP 주소, 소수점 등에도 사용된다. 예를 들어 아래 문장을 단순히 마침표 기준으로 나누면 문제가 생긴다. IP 192.168.56.31 서버에 접속해 주세요. 결과는 aaa@gmail.com으로 보내주세요. IP 주소의 점, 이메일 주소의 점, 문장 종결의 점을 모두 같은 방식으로 처리하면 잘못된 문장 분리가 발생할 수 있다. 또 Ph.D. 처럼 약어 내부에 포함된 마침표도 문장 끝으로 판단하면 안 된다. wikidocs NLTK 영어 문장 토큰화 NLTK의 sent_tokenize() 는 단순한 마침표 분할보다 더 정교하게 문장을 나눈다. from nltk.tokenize import sent_tokenize text = ( "I am actively looking for Ph.D. students. " "and you are a Ph.D student." ) print(sent_tokenize(text)) [ 'I am actively looking for Ph.D. students.', 'and you are a Ph.D student.' ] Ph.D. 내부의 마침표를 문장 종결로 오해하지 않고 처리한다. wikidocs 한국어 문장 토큰화 한국어 문장 분리에는 KSS(Korean Sentence Splitter)를 사용할 수 있다. pip install kss import kss text = ( "딥 러닝 자연어 처리가 재미있기는 합니다. " "그런데 문제는 영어보다 한국어로 할 때 너무 어렵습니다. " "이제 해보면 알걸요?" ) print(kss.split_sentences(text)) [ '딥 러닝 자연어 처리가 재미있기는 합니다.', '그런데 문제는 영어보다 한국어로 할 때 너무 어렵습니다.', '이제 해보면 알걸요?' ] 한국어 NLP에서는 한국어의 문장 종결 표현과 문장 부호 특성을 고려한 도구를 사용하는 것이 유리하다. wikidocs 5. 한국어 토큰화가 어려운 이유 한국어는 영어와 달리 단순한 띄어쓰기 기준 토큰화만으로 충분한 결과를 얻기 어렵다. 가장 큰 이유는 한국어가 교착어 이기 때문이다. 교착어는 조사, 어미, 접사 등이 어근이나 명사 뒤에 붙어 문법적 의미를 만드는 언어를 말한다. 예를 들어 다음 문장을 보자. 에디가 책을 읽었다. 띄어쓰기 기준으로 분리하면 다음과 같다. ['에디가', '책을', '읽었다'] 하지만 형태소 단위로 나누면 다음처럼 분석할 수 있다. 에디 / 가 / 책 / 을 / 읽 / 었 / 다 구분 예시 설명 자립 형태소 에디, 책 독립적으로 의미를 지니는 단위 의존 형태소 가, 을, 었, 다 다른 형태소와 결합해 문법적 기능을 하는 단위 한국어 자연어 처리에서는 명사, 동사 어간, 조사, 어미 등을 분리해야 하는 경우가 많다. 따라서 한국어에서는 어절 단위 토큰화보다 형태소 토큰화(Morpheme Tokenization) 가 중요하다. wikidocs 또한 실제 한국어 데이터에는 띄어쓰기 오류가 흔하다. 제가이렇게띄어쓰기를전혀하지않고글을썼다고하더라도 글을이해할수있습니다. 한국어는 띄어쓰기가 완벽하지 않아도 문맥으로 의미를 추론할 수 있는 경우가 많다. 하지만 모델 입장에서는 단어 경계가 불명확해질 수 있으므로, 실제 서비스 데이터에서는 띄어쓰기 교정이나 형태소 분석 품질이 NLP 성능에 영향을 줄 수 있다. wikidocs 6. 품사 태깅 품사 태깅(Part-of-Speech Tagging, POS Tagging) 은 토큰마다 문법적 역할을 부여하는 작업이다. 같은 표기를 가진 단어라도 품사에 따라 의미가 달라질 수 있다. fly 동사: 날다 명사: 파리 한국어도 마찬가지다. 못 명사: 망치로 박는 물건 부사: 어떤 행동을 할 수 없다는 의미 따라서 단어의 문맥상 의미를 이해하거나, 명사만 추출해 키워드 분석을 수행하거나, 동사·형용사 중심의 감성 분석을 수행하려면 품사 정보가 유용하다. wikidocs NLTK 영어 품사 태깅 from nltk.tokenize import word_tokenize from nltk.tag import pos_tag text = "I am actively looking for Ph.D. students." tokens = word_tokenize(text) print(pos_tag(tokens)) [ ('I', 'PRP'), ('am', 'VBP'), ('actively', 'RB'), ('looking', 'VBG'), ('for', 'IN'), ('Ph.D.', 'NNP'), ('students', 'NNS'), ('.', '.') ] 대표적인 Penn Treebank 품사 태그는 다음과 같다. 태그 의미 PRP 인칭대명사 VBP 동사 RB 부사 VBG 현재분사 IN 전치사 NNP 고유명사 NNS 복수 명사 CC 접속사 DT 관사 7. KoNLPy를 이용한 한국어 형태소 분석 한국어 NLP에서는 KoNLPy를 이용해 형태소 분석과 품사 태깅을 수행할 수 있다. KoNLPy에서 활용할 수 있는 대표적인 형태소 분석기는 다음과 같다. Okt(Open Korean Text) Mecab Komoran Hannanum Kkma 대표적으로 Okt 는 다음 메서드를 제공한다. 메서드 기능 morphs() 형태소 추출 pos() 형태소와 품사 태그 추출 nouns() 명사 추출 from konlpy.tag import Okt okt = Okt() text = "열심히 코딩한 당신, 연휴에는 여행을 가봐요" print(okt.morphs(text)) print(okt.pos(text)) print(okt.nouns(text)) 출력 예시는 다음과 같다. # 형태소 분석 ['열심히', '코딩', '한', '당신', ',', '연휴', '에는', '여행', '을', '가봐요'] # 품사 태깅 [ ('열심히', 'Adverb'), ('코딩', 'Noun'), ('한', 'Josa'), ('당신', 'Noun'), (',', 'Punctuation'), ('연휴', 'Noun'), ('에는', 'Josa'), ('여행', 'Noun'), ('을', 'Josa'), ('가봐요', 'Verb') ] # 명사 추출 ['코딩', '당신', '연휴', '여행'] 같은 문장이라도 분석기마다 결과가 달라질 수 있다. 예를 들어 Okt는 가봐요 를 하나의 동사 형태로 처리할 수 있지만, Kkma는 가보 , 아요 처럼 더 세분화할 수 있다. 따라서 형태소 분석기를 선택할 때는 다음을 기준으로 판단하는 것이 좋다. 처리 속도가 중요한가 신조어·SNS 문체 처리가 중요한가 문어체·뉴스 데이터가 중심인가 명사 추출만 필요한가 세밀한 문법 분석이 필요한가 프로젝트 환경에서 설치와 운영이 쉬운가 특히 대규모 한국어 데이터 처리에서는 처리 속도가 중요한 경우가 많아 Mecab을 고려할 수 있고, SNS·구어체 데이터 분석에서는 Okt를 실험 후보로 사용할 수 있다. wikidocs 8. 정리 토큰화는 텍스트를 모델이 처리할 수 있는 의미 단위로 나누는 NLP 전처리 과정이다. 토큰의 단위는 단어, 문장, 형태소, 서브워드 등 목적에 따라 달라질 수 있다. 구두점, 특수문자, 숫자, 날짜, 통화기호는 무조건 제거하지 않고 의미를 고려해야 한다. 영어는 공백 기반 토큰화가 어느 정도 가능하지만 축약형, 약어, 하이픈 등의 예외 처리가 필요하다. 문장 토큰화에서는 마침표가 약어·이메일·IP 주소·소수점 등에 포함될 수 있음을 고려해야 한다. 한국어는 조사와 어미가 결합하는 교착어이므로, 띄어쓰기 단위보다 형태소 단위 토큰화가 중요하다. 품사 태깅은 단어의 문법적 역할을 부여해 의미 분석, 키워드 추출, 감성 분석 등에 활용할 수 있다. 한국어 형태소 분석기마다 토큰 분리와 품사 태깅 결과가 다르므로, 실제 데이터와 목적에 맞춰 비교·선택해야 한다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
4.3 토큰화. 1. 토큰화란? 자연어 처리(NLP)에서는 크롤링, 문서 수집, 로그 데이터 등을 통해 얻은 텍스트 데이터인 코퍼스(corpus) 를 그대로 사용하기 어렵다. 목적에 맞게 텍스트를 전처리해야 하며, 대표적인 전처리 과정에는 다음이 있다. 토큰화(Tokenization) 정제(Cleaning) 정규화(Normalization) 이 중 토큰화란 문장이나 문서에서 의미 있는 최소 단위인 토큰(token) 으로 나누는 작업이다. 토큰은 상황에 따라 단어, 형태소, 문장, 서브워드 등이 될 수 있다. wikidocs 예를 들어 다음 문장이 있다고 가정해보자. Time is an illusion. Lunchtime double so! 구두점을 제거하고 공백을 기준으로 단어 토큰화를 하면 다음과 같이…
Открыть источник4.3 토큰화. 텍스트를 모델에 넣으려면 먼저 무엇을 하나의 입력 단위로 볼지 정해야 한다. 문장을 어디서 나누느냐에 따라 토큰의 수와 내용이 달라지고, 이후 모델이 처리할 시퀀스도 달라진다. 토큰화(Tokenization) 는 이 입력 단위를 만드는 작업이다. 토큰화는 텍스트를 어떤 단위로 나누는가 분석에 사용하는 텍스트 자료의 모음을 코퍼스(Corpus) 라고 한다. 코퍼스를 일정한 기준으로 나눈 단위가 토큰(Token) 이다. 토큰은 항상 사전에 실린 단어 하나일 필요는 없다. 문장, 단어, 형태소 등 목적에 맞는 단위를 사용할 수 있다. 단어 토큰화(Word tokenization) 는 문장 안의 단어 등을 구분하고, 문장 토큰화(Sentence tokenization) 는 글에서 문장의 경계를…
Открыть источник