-
NLP 입문자를 위한 text 전처리AI 2023. 4. 26. 12:32
문장을 단어로 쪼개고 단어에 미리 매긴 번호로 문장을 표현하는 것
을 목표로 한다.
1. 챗봇 모델을 블랙박스로 생각해 본다.
산에서 문명의 도움 없이 불을 피는 방법을 알려주세요 -> BLACK BOX -> 산에서 문명의 도움 없이 불을 피우는 방법은 여러 가지가 있습니다. 여기 몇 가지 기본적인 방법들을 소개합니다 .........
2. 컴퓨터에서 문장을 어떻게 표현하는 지 궁금해 한다.
3. 문장을 단어로 쪼개고 단어에 미리 매긴 번호로 문장을 표현하는 것이 좋다고 다른 사람들이 밝혀냈으므로 받아들인다.
그리고 한국어 단어를 다뤄야 하므로 konlpy의 Okt와 tensorflow의 TextVectorization을 사용해 본다.
from konlpy.tag import Okt import tensorflow import tensorflow as tf from tensorflow.keras import layers from tensorflow.keras.layers import TextVectorization okt = Okt() vocab = okt.morphs('불을 피우기 전에 안전을 위해 다음 사항을 유의하세요.') vocab_set = set() for word in vocab: vocab_set.add(word) vectorizor = TextVectorization( vocabulary=list(vocab_set) ) vector = vectorizor(' '.join(okt.morphs('불을 피우기 전에 안전을 위해 다음 사항을 유의하세요.'))) decoded = [] for v in vector: decoded += [vectorizor.get_vocabulary()[v]] decoded = ' '.join(decoded) print(vocab) print(vectorizor.get_vocabulary()) print(vector) print(decoded)
4. 언어 모델들은 다음 단어를 예측하는 방식으로 동작한다는 것을 떠올린다.
input: "<START>산에서 문명의 도움 없이 불을 피는 방법을 알려주세요"
output: "산 에서 문명의 도움 없이 불을 피우는 방법은 여러 가지가 있습니다. 여기 몇 가지 기본적인 방법들을 소개합니다...<END>"
"모델에 처음 들어가는 input 단어인 <START>"와 "모델 가동을 언제 끝낼지를 나타내기 위한 output 단어인 <END>" 를 위한 번호를 따로 할당하고 나중에 vectorize 된 vector의 앞이나 뒤에 <START>나 <END>의 번호를 붙여 줘야 한다.
'AI' 카테고리의 다른 글
파이썬 버전 여러 개 사용하는 방법 (0) 2024.06.24 isaac sim ddpg solution of cartpole problem (14) 2024.04.16 AI할 때 수치 안정성 (0) 2023.04.25 tensorflow custom gradient (0) 2023.04.25 tensorflow용 RNN-T custom 함수 제작 후기 (0) 2023.04.25