토큰화

Jan 10 2023
토큰화란?? 간단히 말해서 텍스트를 단어나 문장으로 분할합니다... 여기서는 NLP에서 사용할 수 있는 다양한 토크나이저에 대해 살펴보겠습니다... 2. 특정 분할 공백과 동일하지만 여기서는 원하는 분할자를 제공합니다 3.

토큰화란?? 간단히 말해서 텍스트를 단어 또는 문장으로 분할합니다…

토큰화

여기서는 NLP에서 사용할 수 있는 다양한 토크나이저에 대해 살펴보겠습니다.

  1. 여백

text = 'Earth was born around 4.54 billion years ago.'
print(text.split())
# output
# ['Earth', 'was', 'born', 'around', '4.54', 'billion', 'years', 'ago.']

2. 특정 분할

공백과 동일하지만 여기서는 split원하는 스플리터를 제공합니다.

text = 'Egypt, a country linking northeast Africa with the Middle East, dates to the time of the pharaohs.'
print(text.split(','))
# output
# ['Egypt', ' a country linking northeast Africa with the Middle East', ' dates to the time of the pharaohs.']

3. NLTK

NLTK는 인간 언어 데이터로 작업하는 Python 프로그램을 구축하기 위한 선도적인 플랫폼입니다. 사용할 수 있는 많은 토크나이저가 있습니다.

l) word_toknizer: 분할 기능의 문제를 해결합니다.

word_toknizer: 위의 노란색 표시 참조

ll) sent_tokenize: 이전에 학습한 모델로 분할 텍스트를 사용합니다.

sent_tokenize: 이것은 내 인용문입니다. 인용문과 내 이름으로 나누었습니다.

lll) wordpunct_tokenize: 여기에서 모든 단어와 구두점을 분할합니다.

wordpunct_tokenize: 모든 단어와 문장 부호가 있는 토큰을 제공합니다.

lV) TreebankWordTokenizer: 텍스트를 이러한 구두점 ?!.,;으로 분할하는 한편, 영어 단어에 대한 다양한 공통 규칙입니다.

TreebankWordTokenizer: 위의 노란색 표시를 보면 내 이름임을 알 수 있으므로 토큰으로 인식합니다.

V) TweetTokenizer: 이 문장 부호로 텍스트를 분할 ?!.,;하므로 이모티콘

트윗토큰나이저

Vl) MWETokenizer:add_mwe 여기에서 이 토크나이저가 제공 하는 대로 원하는 대로 토큰을 추가할 수 있습니다 .

MWETokenizer: 결과에서 볼 수 있듯이 토큰을 추가했습니다. 해당 토큰을 볼 수 있습니다.

4. 텍스트블롭

TextBlob은 텍스트 데이터 처리를 위한 Python(2 및 3) 라이브러리입니다 . 품사 태깅, 명사구 추출, 감정 분석, 분류, 번역 등과 같은 일반적인 자연어 처리(NLP) 작업에 들어가기 위한 간단한 API를 제공합니다.

from textblob import TextBlob
text="""But I'm glad you'll see me as I am. Above all, I wouldn't want people to think that I want to 
prove anything. I don't want to prove anything, I just want to live; to cause no evil to anyone but myself. 
I have that right, haven't I? Leo Tolstoy """

blob_object= TextBlob(text)     # Word tokenization of  the text
text_words = blob_object.words  # To see all tokens
print(text_words)  # To count the number of tokens
print(len(text_words))

# output
# ['But', 'I', "'m", 'glad', 'you', "'ll", 'see', 'me', 'as', 'I', 'am', 'Above', 'all', 'I', 'would', "n't", 'want', 'people', 'to', 'think', 'that', 'I', 'want', 'to', 'prove', 'anything', 'I', 'do', "n't", 'want', 'to', 'prove', 'anything', 'I', 'just', 'want', 'to', 'live', 'to', 'cause', 'no', 'evil', 'to', 'anyone', 'but', 'myself', 'I', 'have', 'that', 'right', 'have', "n't", 'I', 'Leo', 'Tolstoy']
# 55

5. 여유

spaCy는 Python의 자연어 처리를 위한 무료 오픈 소스 라이브러리입니다 . NER, POS 태그 지정, 종속성 구문 분석, 단어 벡터 등을 제공합니다.

토큰과 색인에 모든 단어와 구두점 및 이모티콘을 제공합니다.

6. 젠심

Gensim: Radim Rehurek이 작성한 비지도 토픽 모델링 및 자연어 처리 에 사용되는 Python의 오픈 소스 라이브러리입니다 . 문서에서 의미론적 주제를 추출하도록 설계되었습니다. 대용량 텍스트 컬렉션을 처리할 수 있습니다.

여기서는 모든 구두점과 이모티콘을 제거합니다.

7. 케라스

Keras는 오픈 소스 라이브러리로 가장 신뢰할 수 있는 딥 러닝 프레임워크 중 하나입니다. 토큰화를 수행하기 위해 다음을 사용합니다. Class Keras.preprocessing.text 클래스의 text_to_word_sequence 메서드. Keras의 장점은 알파벳을 토큰화하기 전에 소문자로 변환하여 시간을 상당히 절약할 수 있다는 것입니다.

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.text import text_to_word_sequence

text = "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.  #Albert Einstein"


tokinzer = Tokenizer(num_words=20)  # as recommended we put here the max text length we have
tokinzer.fit_on_texts(text)
tokens = text_to_word_sequence(text)
print(tokens)

# output
# ['two', 'things', 'are', 'infinite', 'the', 'universe', 'and', 'human', 'stupidity', 'and', "i'm", 'not', 'sure', 'about', 'the', 'universe', '', 'albert', 'einstein']

8. 서브워드 기반 토큰화

인기 있는 토큰화는 단어 기반 토큰화와 문자 기반 토큰화 사이의 솔루션인 하위 단어 기반 토큰화입니다. 주요 아이디어는 단어 기반 토큰화(매우 큰 어휘 크기, 많은 수의 OOV 토큰, 매우 유사한 단어의 다른 의미) 및 문자 기반 토큰화(매우 긴 시퀀스 및 덜 의미 있는 개별 토큰)가 직면한 문제를 해결하는 것입니다.

하위 단어 기반 토큰화 알고리즘은 다음 원칙을 사용합니다.

  1. 자주 사용하는 단어를 더 작은 하위 단어로 나누지 마십시오.
  2. 드문 단어를 더 작은 의미 있는 하위 단어로 나눕니다.

도전

토큰화 작업의 문제점과 한계에 대해 논의해 봅시다.

일반적으로 이 작업은 문장의 경계를 정의하기 위해 공백이나 문장 부호를 사용하여 단어를 구분하는 영어 또는 프랑스어로 작성된 텍스트 코퍼스에 사용됩니다. 안타깝게도 이 방법은 중국어, 일본어, 한국어 태국어, 힌디어, 우르두어, 타밀어 등과 같은 다른 언어에는 적용할 수 없습니다. 이 문제로 인해 모든 언어를 결합하는 공통 토큰화 도구를 개발해야 합니다.

또 다른 제한은 아랍어가 언어로서 복잡한 형태를 가지고 있기 때문에 아랍어 텍스트의 토큰화에 있습니다. 예를 들어, 하나의 아랍어 단어는 "عقد"(eaqad)라는 단어와 같이 최대 6개의 다른 토큰을 포함할 수 있습니다.

같은 문자이지만 다른 의미를 가짐

결론

우리는 토큰화와 우리가 사용할 수 있는 많은 기술에 대해 이야기했습니다. 이 분야에서 수행된 많은 유형의 연구가 있고 성장하고 있으며 NLP가 직면한 많은 문제가 있지만 이러한 문제가 해결될 미래를 보게 될 것입니다.

이 링크 에서 코드를 볼 수 있습니다