LLM 이해하기
LLM이란
- 방대한 양의 텍스트 데이터를 학습하여 인간의 언어를 이해하고 생성할 수 있는 인공지능 모델
NLP부터 이해하기
- 자연어를 컴퓨터가 이해할 수 있도록 처리하는 인공지능의 한 분야
- 자연어의 경우 시계열 데이터이기 때문에, RNN, LSTM등의 모델로 자연어 처리에 도전할 수 있다.
- 감성 분석, 워드 클라우드 만들기로 자연어 전처리를 연습해보자
단어 임베딩
- 단어를 벡터(vector) 형태로 표현하는 방법
- 자연어 처리에서 컴퓨터가 텍스트를 이해하고 처리할 수 있도록 단어를 숫자들의 배열로 변환하는 과정으로, 현대에는 원 핫 인코딩같은 희소 벡터를 사용하는 대신 밀집 벡터를 사용한다.
- 또, 자연어에는 비슷한 뜻을 가지거나 서로 연관이 높은 단어들이 존재함 → 유사한 의미를 가진 단어들은 벡터 공간에서 가까운 위치에 분포하도록 학습(예시로, 사람과 사과보다는 사과와 과일이 더 가까울 것이다.)
- 기존의 희소 벡터(예: 원-핫 벡터)와 달리, 워드 임베딩은 밀집 벡터를 사용 → 즉, 각 단어 벡터의 모든 차원 값이 0이 아닌 실수 값을 가지며, 차원 수도 상대적으로 작음.
- 워드 임베딩을 생성하는 방법에는 Word2Vec, GloVe, FastText 등 다양한 기법들이 존재함
뉴스 데이터를 크롤링 하고, 최빈값으로 워드 클라우드 만들기
import streamlit as st
from pymongo import MongoClient
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# MongoDB 연결
# admin 계정에 접속
client = MongoClient("mongodb://admin:admin@localhost:27017")
db = client["news"]
collection = db["word_cnt"]
doc = collection.find_one()
# 'result' 딕셔너리만 추출
raw_freq = doc.get('result', {})
cleaned_freq = {}
# 숫자 값만 정리
for word, count in raw_freq.items():
if isinstance(count, int): # 또는 float도 허용하려면 (int, float)
cleaned_freq[word] = count
# 워드클라우드 생성
wc = WordCloud(
font_path='/usr/share/fonts/truetype/nanum/NanumSquareRoundB.ttf', # 👉 한글 폰트 경로
background_color='white',
width=800,
height=600
).generate_from_frequencies(cleaned_freq)
# Streamlit 시각화
st.set_page_config(layout="wide")
st.title("Word Cloud")
fig, ax = plt.subplots(figsize=(10, 6))
ax.imshow(wc, interpolation='bilinear')
ax.axis('off')
st.pyplot(fig)
크롤링한 뉴스 데이터에서 Word2Vec을 사용하여 연관도 높은 단어 찾기
github 링크
Transformer
- 논문 링크
- 시퀀스 데이터에 혁명을 가져온 딥러닝 모델.
- 기존의 RNN(순차적으로 입력을 기다려야함)과 다르게 병렬 처리가 가능하다는 장점이 있다.
- 가장 큰 키포인트는 바로 쿼리, 키, 값을 이용한 어텐션 연산!
- 어텐션 메커니즘은 쿼리(Query), 키(Key), 값(Value)이라는 세 가지 벡터를 사용함. 쿼리는 현재 처리해야 할 정보, 키는 입력 시퀀스의 각 요소에 대한 정보, 값은 실제 출력에 사용될 정보를 의미!
-
- 트랜스포머 모델은 어텐션 연산을 통해 쿼리와 키 간의 유사도를 계산하여 어텐션 스코어를 얻고, 해당 입력 요소가 현재 쿼리에게 얼마나 영향을 미치는지 계산함!