최근 몇 년 간 바이오 분야에서는 딥러닝 기술의 발전으로 인해 많은 혁신이 일어났습니다. 특히, 허깅페이스(Hugging Face) 트랜스포머 라이브러리는 자연어 처리(NLP)에서 큰 주목을 받으며, 다양한 모델과 도구들을 제공하고 있습니다. 이번 강좌에서는 허깅페이스 트랜스포머를 사용하여 모더나(Moderna)와 화이자(Pfizer)의 백신 관련 데이터를 시각화하는 t-SNE 방법에 대해 설명하겠습니다.
1. 트랜스포머의 이해
트랜스포머 모델은 2017년 ‘Attention is All You Need’라는 논문에서 처음 소개되었습니다. 기존의 RNN 및 LSTM 모델과는 달리, 트랜스포머는 입력 데이터의 모든 위치를 동시에 처리할 수 있는 자기 주의(attention) 메커니즘을 사용합니다. 이러한 특징 덕분에 트랜스포머 모델은 대규모 데이터셋에서 뛰어난 성능을 발휘합니다.
2. 허깅페이스 라이브러리 설치 및 준비
허깅페이스 트랜스포머 라이브러리를 사용하기 위해서는 먼저 해당 라이브러리를 설치해야 합니다. 다음과 같은 명령어로 설치할 수 있습니다:
pip install transformers datasets
3. 데이터 준비
이번 강좌에서는 모더나와 화이자의 백신에 관한 데이터를 사용하여 t-SNE 시각화를 진행합니다. 데이터를 수집하고 전처리하는 단계는 다음과 같이 쉽게 설명할 수 있습니다:
- 각 백신에 대한 텍스트 데이터 수집
- 수집된 데이터에서 텍스트 전처리 (소문자 변환, 구두점 제거 등)
- 전처리된 텍스트를 사용하여 임베딩 생성
3.1 데이터 수집 예제
모더나와 화이자에 대한 기사를 크롤링하거나, 미리 준비한 CSV 파일을 사용하여 데이터셋을 만들 수 있습니다. 아래는 모더나와 화이자의 데이터셋를 로드하는 예시입니다.
import pandas as pd
moderna_df = pd.read_csv('moderna.csv')
pfizer_df = pd.read_csv('pfizer.csv')
# 데이터 확인
print(moderna_df.head())
print(pfizer_df.head())
4. 텍스트 임베딩 생성
모델이 텍스트를 이해할 수 있도록 임베딩 벡터를 생성해야 합니다. 허깅페이스의 ‘BERT’나 ‘DistilBERT’ 모델을 활용하여 텍스트를 임베딩할 수 있습니다. 아래 코드를 참고하여 임베딩을 생성해 보세요.
from transformers import DistilBertTokenizer, DistilBertModel
import torch
# 모더나와 화이자 텍스트 데이터 합치기
texts = list(moderna_df['text']) + list(pfizer_df['text'])
# 모델과 토크나이저 초기화
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
model = DistilBertModel.from_pretrained('distilbert-base-uncased')
# 입력 데이터 토큰화
inputs = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
outputs = model(**inputs)
embeddings = outputs.last_hidden_state.mean(dim=1) # 평균으로 임베딩 생성
5. t-SNE 시각화
t-SNE(두 개의 고차원 데이터 포인트 간의 차이를 보존하는 기술)는 고차원 데이터를 2차원 또는 3차원으로 시각화하는 데에 효과적입니다. 아래 코드는 t-SNE를 사용하여 모더나와 화이자의 데이터 분포를 시각화하는 방법을 보여줍니다.
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# t-SNE를 통해 2차원으로 차원 축소
tsne = TSNE(n_components=2, random_state=0)
tsne_results = tsne.fit_transform(embeddings)
# 결과 시각화
plt.figure(figsize=(10, 7))
plt.scatter(tsne_results[:len(moderna_df), 0], tsne_results[:len(moderna_df), 1], label='Moderna', alpha=0.5)
plt.scatter(tsne_results[len(moderna_df):, 0], tsne_results[len(moderna_df):, 1], label='Pfizer', alpha=0.5)
plt.title('t-SNE Visualization of Moderna vs Pfizer')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.legend()
plt.show()
6. 결과 분석
t-SNE의 결과를 분석하여 모더나와 화이자 간의 관계성을 이해할 수 있습니다. 데이터 포인트간의 분포가 어떻게 형성되었는지 시각적으로 확인하면, 각 백신이 가지는 특성 및 차별점에 대해서도 알 수 있습니다. 이 분석을 통해 과학적 연구와 마케팅 전략 수립에 기여할 수 있습니다.
결론
허깅페이스의 트랜스포머 모델을 활용하면 복잡한 텍스트 데이터에 대한 임베딩을 쉽게 생성하고, 이를 통해 다양한 시각화 기법으로 데이터를 분석할 수 있습니다. 본 강좌를 통해 배운 내용은 바이오 데이터 분석, 특히 백신 데이터와 같은 민감한 주제를 다루는 데에 큰 도움을 줄 것입니다. 향후에는 다른 모델과 기법을 활용하여 더욱 깊이 있는 분석을 진행할 수 있을 것입니다.