Natural Language Processing in TensorFlow week1

han811·2020년 11월 14일
0
post-thumbnail

Sentiment in text

사람이 사용하는 자연어 처리와 관련하여 tensorflow code 작성을 하여보자.

from tensorflow.keras.preprocessing.text import Tokenizer

sentences = [
    'i love my dog',
    'I, love my cat',
    'You love my dog!'
]

tokenizer = Tokenizer(num_words = 100)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index
print(word_index)

keras의 preprocessing의 text에 Tokenizer 객체를 사용하면 단어들을 쉽게 tokenizing이 가능하다.
fit_on_texts를 하면 각 문장의 단어들이 0부터 1씩 증가하는 정수 값으로 tokenizing되는 것을 볼 수 있다.
num_words는 tokenizing할 단어의 최대 개수를 정해준다.
num_words보다 단어가 많으면 빈도수가 높은 순으로 선택하여 tokenizing한다.
Tokenizer의 fit_on_texts를 사용하면 문장 list들의 단어들로 tokenizing이 진행되며, 대문자는 소문자로 느낌표같은 문자들은 다 제거된다.
Tokenizer의 word_index는 tokenizing된 단어들을 dictionary의 형태로 저장하고있는 attribute이다.

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

sentences = [
    'I love my dog',
    'I love my cat',
    'You love my dog!',
    'Do you think my dog is amazing?'
]

tokenizer = Tokenizer(num_words = 100, oov_token="<OOV>")
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index

sequences = tokenizer.texts_to_sequences(sentences)

padded = pad_sequences(sequences, maxlen=5)

padded = pad_sequences(sequences, maxlen=5, padding='post', truncating='post')

Tokenizer의 num_words에 들지 못한단어들은 oov_token옵션을 설정해주지 않으면 토크나이징에서 아예 제외되어버리며 oov_token을 정해주면 해당 토큰으로 전부 대체된다.
texts_to_sequences의 경우 인자로 주어지는 문자열 list들을 토크나이징한 값들의 list로 반환해준다.
keras preprocessing의 sequence의 경우 pad_sequence라는 객체를 불러오면 해당 객체는 토크나이징된 리스트값을 패딩해주며 maxlen인자를 정해주면 해당 길이를 기준으로 패딩하며 없을 시 가장 긴 token list를 기준으로 패딩해준다.
default로는 앞부분에 패딩이 들어가며 padding 인자로 'post'를 줄 경우 token list 뒷부분으로 패딩이 이루어진다.
truncating인자의 경우 maxlen보다 긴 token list들을 잘라주는 기준을 정해주며 default로는 'pre'로 앞부분을 자르며 'post'를 인자로 줄 경우 뒷 부분을 잘라준다.

tf.keras.preprocessing.text.Tokenizer docu
https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/text/Tokenizer

tf.keras.preprocessing.sequence.pad_sequences
https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/sequence/pad_sequences

my github repo - https://github.com/han811/tensorflow

profile
han811

0개의 댓글