인공지능(Artificial Intelligence)/자연어 처리(natural language processing)
[자연어처리] Preprocessing(전처리) 종류
HAN_PY
2020. 11. 11. 14:18
반응형
[tensorflow] preprocessing(전처리) 하기
0. 들어가면서
TensorFlow로 입력값을 모델에 넣기 위해서는 딥러닝 모델이 처리 있도록 전처리라는 과정을 거쳐 숫자로 입력값을 넣어야한다. 전처리의 종류에는 여러가지가 있지만, 오늘은 tensorflow.keras에서 제공하는 text 전처리에 대해 알아 보고자 한다. 자연어 처리에 대한 전반적인 내용을 알려면 아래의 블로그를 참고하자.
tf.keras.preprocessing.text 종류
tf.keras.preprocessing.text의 종류는 hashing_trick, one_hot, text_to_word_sequence, Tokenizer으로 크게 4가지가 있다. 필요한 전처리에 맞게 아래와 같이 불러와서 사용하면 된다.
from tensorflow.keras.preprocessing.text import text_to_word_sequence
그렇다면 이제 위의 4가지 전처리에 대해 하나씩 알아보자.
1 hashing_trick
Converts a text to a sequence of indexes in a fixed-size hashing space.
tf.keras.preprocessing.text.hashing_trick(
text,
n,
hash_function=None,
filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
lower=True,
split=' '
)
- text : input값으로 문자열(string)을 넣어준다.
- n : 해시 공간 차원
- hash_function : default는 hash 함수이고, md5 함수도 넣을 수 있다. 문자열을 받아서 정수를 반환한다.
- filters : 걸러낼 문자리스트를 적어준다. 디폴트는 '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n' 이렇다.
- lower : 입력 받은 문자열을 소문자로 변환할지를 True, False로 적어준다.
- split : 문자열을 적어 줘야하고, 단어를 분리하는 기준을 적어준다.
return
리턴 값으로는 단어 별로 indices되어 integer가 붙여진 list가 출력된다. 그리고 할당되지 못한 단어들은 인덱스에 0이 들어간다.
2 one_hot
One-hot encodes a text into a list of word indexes of size n
.
text를 입력 받아서 주어진 단어에 인코딩되어 일치하는 숫자(integers)를 리턴한다.
tf.keras.preprocessing.text.one_hot(
input_text,
n,
filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
lower=True,
split=' '
)
- input_text : input값으로 문자열(string)을 넣어준다.
- n : 단어 목록의 크기로 정수를 넣어준다.
- filters : 걸러낼 문자리스트를 적어준다. 디폴트는 '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n' 이렇다.
- lower : 입력 받은 문자열을 소문자로 변환할지를 True, False로 적어준다.
- split : 문자열을 적어 줘야하고, 단어를 분리하는 기준을 적어준다.
return
각 정수는 한 단어를 인코딩하여 정수로 이뤄진 리스트을 return한다.
3 text_to_word_sequence
text를 단어의 순서나 토큰의 순서로 반환한다.
tf.keras.preprocessing.text.text_to_word_sequence(
input_text,
filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
lower=True,
split='
'
)
- input_text : input값으로 문자열(string)을 넣어준다.
- filters : 걸러낼 문자리스트를 적어준다. 디폴트는 '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n' 이렇다.
- lower : 입력 받은 문자열을 소문자로 변환할지를 True, False로 적어준다.
- split : 문자열을 적어 줘야하고, 단어를 분리하는 기준을 적어준다.
from keras.preprocessing.text import text_to_word_sequence
text = '나는 오늘 집에 간다. 나는 내일 밖에 나간다!!'
tokens = text_to_word_sequence(text)
print(tokens)
> ['나는', '오늘', '집에', '간다', '나는', '내일', '밖에', '나간다']
4. Tokenizer
Tokenizer은 사전에 있는 단어의 순서에 맞게 단어를 turning하면서 말뭉치를 벡터화 시킨다.
tf.keras.preprocessing.text.Tokenizer(
num_words=None,
filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
lower=True,
split=' ',
char_level=False,
oov_token=None,
document_count=0,
**kwargs
)
- num_words : 단어 빈도가 많은 순서로 num_words개의 단어를 보존한다.
- filters : 걸러낼 문자리스트를 적어준다. 디폴트는 '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n' 이다.
- lower : 입력 받은 문자열을 소문자로 변환할지를 True, False로 적어준다.
- split : 문자열을 적어 줘야하고, 단어를 분리하는 기준을 적어준다.
- char_level : True인 경우 모든 문자가 토큰으로 처리된다.
- oov_token : 값이 지정된 경우, text_to_sequence 호출 과정에서 word_index에 추가되어 out-of-vocabulary words를 대체한다.
반응형