Applied Data Analysis Study
문자를 숫자로 표현하는 방법 & Corpus & Out-of-Vocabulary(OOV) 본문
문자를 숫자로 표현하는 방법
1. 문장을 의미 있는 부분(단위)로 나눈다(text segmentation)
s="부평역은 길이 복잡하다"
s=s.split(" ")
print(s) # ["부평역은", "길이", "복잡하다"]
Tokenization이라고 하고, 쪼개진 부분을 Token(문장을 구성하는 기본단위)이라고 부른다. 단어를 기준으로 나눌 수도 있고 형태소 단위로 나눌 수도 있고 언어의 특성마다 단위를 어떻게 하느냐에 따라서 성능이 달라질 수 있음
컴퓨터에게 "여기부터 여기까지의 문자의 나열은 특정한 의미가 있는 부분이니 하나로 인식하렴"이라고 가르쳐주는 과정이라고 볼 수 있다.
2. 나눠진 의미 있는 부분을 숫자로 바꿔 문장을 숫자로 표현한다.(Representation)
token2idx={}
index=0
for sentence in [s]:
tokens=sentance.split()
for token in tokens:
if token2idx.get(token)==None:
token2idx[token]= index
index+=1
print(token2idx)
def indexed_sentence(sentence):
return [token2idx[token] for token in sentence]
s_1=indexed_sentence(s.split( ))
print(s_1)
Corpus
- Token을 많이 모아 놓은 문장의 모음을 "말뭉치(Corpus)"라고 한다.
- 몇가지 유명한 Corpus가 있고, 위키피디아를 기반으로 하는 다양하 Corpus를 사용하기도 하고 웹커뮤니티의 글을 수집하여 Corpus를 만들기도 한다.
- Corpus의 크기가 커지면 사전의 크기가 커지고, 사전의 크기가 커질수록 우리가 만드는 모델의 사이즈도 커진다. 크기가 커지면 메모리에 부담을 줄 수 있으므로 효율적으로 만드는 방법을 고민하게 된다.
Token을 저장해뒀던 Vocabulary에는 없는 단어는 어떻게 처리할까?
이런 상황을 대비해서 특수한 Token인 <uuk> Token(Unkonwn의 앞 글자를 뜻함)을 Vocabulary에 없는 단어를 <uuk>로 변환하도록 처리한다.
'딥러닝 & 파이토치' 카테고리의 다른 글
one-hot encoding (0) | 2022.04.29 |
---|---|
딥러닝 논문 모아두는곳 (0) | 2022.04.29 |
[NLP] n-gram Tokenization (0) | 2022.04.23 |
Byte Pair Encoding (0) | 2022.04.22 |
VGG & GoogleNet (1) | 2022.04.16 |
Comments