목차(클릭하세요)
우연히 본 영상, Gemini의 가능성을 탐하다!
1. 핵심자료가 유튜브로 몰리기에
1-1. gemini 결과(2.5flash)
•
영상은 잘 찾으나.. 유튜브 영상의 직접적인 접근 및 요약이 안되는 듯
•
1-2. gemini 결과(2.5pro)
1-3. GPT결과(o4-mini기준)
-영상별 요약이 되고, 링크도 잘 연동됨
1-4.claude
•
구체적인 영상접근이 어려운 듯
•
검색결과를 바탕으로 사용자가 요구하는 결과물에 근접한 자료를 내놓기는 함.
1-5.결론
•
유튜브 영상관련 작업을 위해서는 유료 결제 후 2.5pro모델을 쓰거나 노트북LM을 활용하는 것을 권장
2. 수업용 자료 웹페이지 만들기
이렇게 학생들과 직접 수업에서 활용할만한 콘텐츠를 만드는 데 있어, Gemini 와 GPT의 결과물을 비교해보자!
•
똑똑한 교수님께서 정확하지만 다소 난해한 설명을 해주는 느낌(학문적으로 보다 디테일함이 느껴짐)
https://damien0x0023.github.io/rnnExplainer/
이사이트 처럼 rnn의 개념을 한국어로 설명해주면서 시뮬레이션해주는 코드 구현해봐.
1. 벡터의 개념을 포함함.
2. 워드 임베딩 과정을 보다 시각적으로 보여줌
3. 수학을 잘모르는 고등학교1학년 학생들도 이해할 수 있을만큼 직관적인 시각자료로 구현
HTML
복사
2-1. Gemini
2-2.Claude
•
사용자의 의도를 캐치하여 딱 적절한 설명만 해주고, 어려운 내용은 생략하는 과외해주는 오빠같은 느낌?
2-3.GPT
•
현재 배포하여 서비스해주는 기능이 없는 것으로 확인됨.
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 1. 페이지 제목 및 설명
st.title("🌱 RNN 개념 시뮬레이터")
st.write("고1도 이해할 수 있는 직관적 시각자료로 RNN 구조를 단계별로 살펴봄")
# 2. 벡터의 개념
st.header("1. 벡터의 개념 설명")
st.write("문장을 수치 벡터로 변환하는 과정을 살펴봄")
# 예시 벡터 생성
vec = np.array([1, 0, 1, 0, 0])  # 단순 예시용
st.write("예시 벡터:", vec)
# 벡터 시각화
fig1, ax1 = plt.subplots()
# 2차원으로만 표시하기 위해 앞 두 요소 사용
ax1.quiver(0, 0, vec[0], vec[1], angles='xy', scale_units='xy', scale=1)
ax1.set_xlim(-1, 2); ax1.set_ylim(-1, 2)
ax1.set_xlabel("벡터 x축 성분"); ax1.set_ylabel("벡터 y축 성분")
ax1.set_title("벡터 시각화")
ax1.grid(True)
st.pyplot(fig1)
# 3. 워드 임베딩 과정
st.header("2. 워드 임베딩 시각화")
words = ["사과", "바나나", "포도", "오렌지"]
# 랜덤 임베딩(차원=5) 생성
embeddings = np.random.randn(len(words), 5)
# PCA로 2차원 축소
pca = PCA(n_components=2)
emb2d = pca.fit_transform(embeddings)
# 2D 산점도
fig2, ax2 = plt.subplots()
for i, w in enumerate(words):
    ax2.scatter(emb2d[i, 0], emb2d[i, 1])
    ax2.text(emb2d[i, 0] + 0.02, emb2d[i, 1] + 0.02, w, fontsize=12)
ax2.set_title("2D 워드 임베딩 공간")
ax2.set_xlabel("PCA 축 1"); ax2.set_ylabel("PCA 축 2")
ax2.grid(True)
st.pyplot(fig2)
# 4. RNN 시퀀스 시뮬레이션
st.header("3. RNN 시퀀스 시뮬레이션")
seq = st.text_input("문장을 입력하세요", "나는 학교에 간다")
# 전처리: 단어 토큰화
tokens = seq.split()
# RNN 파라미터 초기화
input_dim = 5
hidden_dim = 5
U = np.random.randn(hidden_dim, input_dim)    # 입력→은닉 가중치
W = np.random.randn(hidden_dim, hidden_dim)   # 은닉→은닉 가중치
V = np.random.randn(input_dim, hidden_dim)    # 은닉→출력 가중치
h = np.zeros(hidden_dim)  # 초기 hidden state
for t, tok in enumerate(tokens):
    st.subheader(f"스텝 {t+1}: 입력 단어 '{tok}'")
    # 단순 임베딩 예시: 글자 수 기준 벡터 생성
    x = np.zeros(input_dim)
    x[:len(tok) % input_dim] = 1
    # 상태 업데이트: h_t = tanh(U x_t + W h_{t-1})
    h = np.tanh(U @ x + W @ h)
    # 출력 계산: y_t = V h_t
    y = V @ h
    st.write("• 현재 은닉 상태 h:", np.round(h, 2))
    st.write("• 현재 출력 y:", np.round(y, 2))
    # 은닉 상태 바 차트로 시각화
    fig3, ax3 = plt.subplots()
    ax3.bar(range(hidden_dim), h)
    ax3.set_ylim(-1, 1)
    ax3.set_xlabel("은닉 유닛 인덱스"); ax3.set_ylabel("활성화 값")
    ax3.set_title(f"Hidden State at Step {t+1}")
    st.pyplot(fig3)
Python
복사
3. 유튜브 영상자료를 반응형 학습자료로
반응형 웹페이지를 바로 보여주지 못하는 GPT는 일단 들어가 계시고..ㅠㅠ
3-1. gemini결과물
•
스크립트에 충실한 웹페이지
•
선지 선택해 정답/오답 유무도 에러없이 바로 진행
•
3-2. claude결과물
•
클로드 개인설정을 반영하여 비유로 설명을 시작함
•
선지 선택해 정답/오답 유무에서 에러발생
•
이후 오류수정의 과정을 거침(한번의 수정으로 오류가 모두 수정되지는 않았음
•
한 두번 수정으로 오류가 해결되지 않는다면 처음부터 다시 생성하는 것이 더 효과적인 솔루션
•
비유를 통한 설명이 매력적이긴 한데, 그 비유가 적합한 비유인지는 사람이 다시한번 체크할 필요가 있음
•
치명적 단점? 대량의 html코드를 생성하는 과정에서 컴퓨터 이더넷 리소스를 과도하게 사용하여, 잠시 컴퓨터가 버벅이거나 심할 경우 다운되는 현상이 발견되기도 함.
4. 결론
모두 LLM서비스는 각자의 강점 영역이 존재함
1개만 고집하는 습관을 버리고, 상황에 맞게 도구를 사용하는 쉐프와 같은 마인드셋 필요!
- 과일깍는데 굳이 중식도를 쓸 이유가..
4-1. 시뮬레이션 자료를 만드는데 있어서
•
GPT보다는 claude와 gemini가 배포적인 측면에서 강점을 가짐
•
clade와 gemini의 선호도는 상황과 추구하는 스타일에 따라 달라질 수 있음
4-2. 시뮬레이션의 구현 레벨은 확실히 claude 우위
**회귀 시뮬레이션
** 지도학습 시뮬레이션



















