본문 바로가기
X

텐서플로우(TensorFlow)를 사용하여 텍스트 라벨링을 구현 - 간단한 텍스트 감정 분류 모델의 예제

by green post it 2023. 11. 30.
반응형

 

 

 

 

텐서플로우는 주로 딥러닝 모델을 구축하고 훈련하는 데 사용되며, 텍스트 라벨링도 이에 포함됩니다.

 

가장 먼저, 텐서플로우와 관련 라이브러리를 설치합니다.

 

 

pip install tensorflow

 

 

이후에는 다음과 같은 과정으로 텍스트 라벨링을 진행할 수 있습니다.

 

 

 

데이터 전처리 : 텍스트 데이터를 숫자 형태로 변환하여 모델에 입력할 수 있도록 전처리합니다. 이 과정은 주로 토큰화와 패딩을 포함합니다.

 

 

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

# 예제 텍스트 데이터
text_data = ["이 영화 정말 좋아요.", "이 책은 흥미로워요.", "이 음악은 너무 시원해요.", "이 식당의 음식은 별로에요.", "이 게임은 정말 어려워요."]
labels = ["긍정", "긍정", "긍정", "부정", "부정"]

# 레이블을 숫자로 매핑
label_mapping = {"긍정": 1, "부정": 0}
numeric_labels = [label_mapping[label] for label in labels]

# 토큰화 및 패딩
tokenizer = Tokenizer()
tokenizer.fit_on_texts(text_data)
sequences = tokenizer.texts_to_sequences(text_data)
padded_sequences = pad_sequences(sequences)

 

 

모델 구축 : 텍스트를 처리하기 위한 딥러닝 모델을 구축합니다. 여기서는 Embedding 레이어를 사용한 간단한 모델을 예시로 들겠습니다.

 

 

 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Flatten, Dense

# 단어의 총 개수는 토큰화된 단어의 개수 + 1
vocab_size = len(tokenizer.word_index) + 1

# 모델 구축
model = Sequential()
model.add(Embedding(vocab_size, 32, input_length=padded_sequences.shape[1]))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

 

 

 

모델 훈련 : 라벨이 지정된 데이터를 사용하여 모델을 훈련합니다.

 

 

 

# 모델 훈련
model.fit(padded_sequences, numeric_labels, epochs=10, validation_split=0.2)

 

 

 

새로운 데이터 예측 : 훈련된 모델을 사용하여 새로운 텍스트 데이터에 대한 예측을 수행합니다.

 

 

 

# 새로운 데이터 텍스트
new_text_data = ["이 책은 정말 재미있어요.", "이 영화는 별로에요."]

# 텍스트를 시퀀스로 변환하고 패딩
new_sequences = tokenizer.texts_to_sequences(new_text_data)
new_padded_sequences = pad_sequences(new_sequences, maxlen=padded_sequences.shape[1])

# 예측
predictions = model.predict(new_padded_sequences)

# 결과 출력
for i, text in enumerate(new_text_data):
    sentiment = "긍정" if predictions[i] > 0.5 else "부정"
    print(f"텍스트: {text}, 예측 감정: {sentiment}")

 

 

 

반응형