[huggingface course] 2-4. Tokenizers

Gaeun Seo·2022년 9월 12일
0

huggingface 강의

목록 보기
1/1

과제를 위해서 허깅페이스 튜토리얼 강의를 보다가 한국어 버전이 없어서 공부겸 간단하게 번역본을 정리합니다.

제가 임의로 번역한거라 뜻이 이상할수도 있고 귀찮으면 번역기 돌리는 부분도 많을거라 내용 이상할수도 있습니다.

Tokenizers

토크나이저는 NLP 파이프라인의 핵심 요소 중 하나다. 토크나이저는 하나의 목적이 있는데 : 텍스트를 모델이 처리할 수 있는 데이터 형태로 번역하는 것이다. 모델들은 숫자만 처리할 수 있으므로, 토크나이저는 우리의 텍스트 input값을 수적인 제이터로 전환해야 한다. 이번 섹션에서, 우리는 tokenization 파이프라인에서 정확히 어떤 일이 일어나는지 탐색할 것이다.

NLP task들에서 일반적으로 처리된 데이터는 raw text이다. 그러한 text의 예시로는 다음과 같다.

Jim Henson was a puppeteer

그러나, 모델은 오로지 숫자만 처리할 수 있으므로, 우리는 raw text를 숫자로 전환할 방법을 찾아야 한다. 그것이 토크나이저가 하는 일이고, 이를 하기 위한 방법으로 매우 여러가지가 있다. 이번 섹션의 목적은 가장 의미있는 표현 방법을 찾아내는 것이다. 여기서 의미있는 표현 방법이란, 모델에게 가장 유용한 것이다. 그리고, 가능하다면 가장 간단한 표현 방법을 찾는 것이다.

이제 몇몇 토크나이징 알고리즘들 예시를 보고, 당시닝 tokenization에 갖고 있을 몇가지 궁금증들을 해소해보자.

Word-based

토크나이저의 첫번째 타입은 word-based이다. 이는 일반적으로 설정하기 매우 쉽고 오로지 몇가지의 규칙만을 사용한다. 그리고 종종 괜찮은 결과를 산출한다. 예를 들어서, 밑의 이미지에서 목적은 raw text를 단어들로 쪼개고 그들 각각의 숫자 표현을 찾는 것이다.

text를 쪼개는 여러가지 다른 방법들이 있다. 예를 들어서, 우리는 공백을 파이썬의 split() 함수에 적용하면서 텍스트를 단어들로 토크나이징할 수 있다.

tokenized_text = "Jim Henson was a puppeteer".split()
print(tokenized_text)
['Jim', 'Henson', 'was', 'a', 'puppeteer']

구두적인 상황을 고려한 추가적인 규칙이 있는 워드 토크나이저들도 있다. 이러한 유형의 토크나이저에서, 우리는 꽤 큰 "어휘"를 얻을 수 있는데, "어휘"란 우리가 갖고잇는 코퍼스에서의 독립적인 토큰들의 총 수로부터 정의되는 단어이다.

각각의 단어는 ID를 할당받는데, ID는 0에서 시작해서 어휘의 크기까지 증가한다. 모델은 이러한 ID들을 각 단어를 확인할 때 사용한다.

만약 우리가 word-based 토크나이저를 언어를 완전히 토크나이징하기 원한다면, 우리는 언어에서 각 단어를 구별할 identifier가 필요할 것이고, 이 identifier는 엄청난 양의 토큰을 생성할 것이다. 예를 들어서, 언어에는 거의 500,000개의 단어들이 있고, 그러므로 각각의 단어들을 input ID로 매핑하기 위해서 우리는 그렇게 수많은 id들을 추적해야 한다. 더욱이, "dog"와 같은 단어들은 "dogs"와 같은 단어로 다르게 대체될 수 있고, 모델은 처음에는 "dog"와 "dogs"가 같은 단어라고 알 방법이 없다. 모델은 결과적으로 두 단어가 연관이 없다고 결정을 내릴 것이다. 똑같은 문제점이 다른 동의어들에 적용되는데, "run"과 "running"같은 단어들이 있다.

결과적으로, 우리는 우리의 어휘에 없는 단어들을 표현하기 위해 custom token이 필요하다. 이는 "unknown" 토큰으로 알려져있고, 종종 "[UNK]" 혹은 ""라고 표현된다. 만약 너가 토크나이저가 이렇게 많은 토큰들을 생성하는 것을 보왔을 때 이는 일반적으로 나쁜 의미이다. 왜냐하면 이는 너가 정보를 잃고 있다는 것을 의미하기 때문이다. 언휘를 만들 때 목표는 토크나이저가 가능한 적은 단어로 알려지지 않은 토큰을 토크나이징하는 것이다.

unknown 토큰을 덜 생성하는 한가지 방법은 character-based tokenizer를 사용하는 것이다.

Character-based

character-based 토크나이저는 텍스트를 단어가 아닌 characters로 쪼갠다. 이는 두가지 장점들이 있다.

vocabulary가 더 작다.

profile
말하는 감자입니다.

0개의 댓글