목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제풀이
  3. LLM 특강
  4. 개인과제 수행
  5. 회고

학습 코드와 필기내용은 GITHUB링크를 이용해주세요


시작전 마음가짐

이번주 일정이 매우 빠듯합니다.

학습 1개만을 진득하게 할 수 있는 날은 없것 같은데요

여러가지를 만히 배우지만 한개를 진득하게 배운다고 생각하고 열심히 학습해서 모두 내것으로 만들어야겟습니다.

그럼 학습을 시작하겟습니다.


Python 문제풀이

1. 이어 붙인 수

  • join함수를 사용해서 완료
  • 다른 사람 풀이가 좋아서 2개 정도 같이 올림
# 나의 풀이
def solution(num_list):
    num_1 = ''.join(str(answer) for answer in num_list if answer % 2 == 0)
    num_2 = ''.join(str(answer) for answer in num_list if answer % 2 != 0)
    return int(num_1) + int(num_2)
# append사용 풀이
def solution(num_list):
    o=[]
    e=[]
    for n in num_list:
        if n%2:o.append(str(n))
        else:e.append(str(n))
    return int(''.join(o))+int(''.join(e))
# for문 사용 풀이
def solution(num_list):
    a=""#홀수
    b=""#짝수
    for i in num_list:
        if i%2!=0:
            a+=str(i)
        else:
            b+=str(i)
    return int(a)+int(b)

2. 마지막 두 원소

  • 완료
  • 리스트에 새로운 요소 추가 방법: append, insert, +=, extend, 슬라이싱
def solution(num_list):
    a = num_list[-1]
    b = num_list[-2]
    if a > b :
        num_list += [a - b]
    else:
        num_list += [a*2]
    return num_list

3. 수 조작하기 1

  • 반복문을 통해 쉽게 풀었다.
  • 에러가 나올 상황에 대처를 못했다.
  • 다른 함수를 이용해 쉽고 가독성 좋게 만들 수 있는 방법이 많았다.
# 나의 풀이
def solution(n, control):
    for i in control:
        if i == 'w':
            n += 1
        elif i == 's':
            n -= 1
        elif i == 'd':
            n += 10
        elif i == 'a':
            n -= 10
        else:
            pass # 다른 문자열이 왔을 때 넘어가기
    return n

# zip함수 풀이
def solution(n, control):
    key = dict(zip(['w','s','d','a'], [1,-1,10,-10]))
    return n + sum([key[c] for c in control])

# 딕셔너리 활용 풀이
def solution(n, control):
    answer = n
    c = { 'w':1, 's':-1, 'd':10, 'a':-10}
    for i in control:
        answer += c[i]
    return answer

LLM 특강 2일차

목차

  1. 프롬프트 엔지니어링
  2. 구조화된 추출
  3. 함수 호출

1. 프롬프트 엔지니어링

  • 맥락을 어떻게 주는지에 따라서 정확한 답을 얻거나 이상하게 나오거나한다.
  • 프롬프트에 따라서 응답 성능이 달라짐
  • 파인튜닝 보다 성능이 좋을 수 있다.
  • 많은 프롬프트 전략들이 정리가 되었다.(Open AI의 공식문서도 있다.)
  • 문서를 볼 때 딥엘 확장프로그램 사용하기

1) 맥락을 자세하게 짜라

  • 페르소나(역할)를 적용 시켜라
  • 마크다운 형식으로 작성하면 더 좋다.
  • few shot

2) reference text를 제공해라

3) 용도에 맞는 프롬프팅을 만들어야한다.

  • step 나누기
  • 맥락이 너무 길어지면 성능 저하

4) 이전 대화 내역을 필터링해서 성능을 유지 시켜라

5) 계산의 경우 풀이과정을 쓰게해서 답을 찾게하면 정확도가 올라간다.

6) 변경 점을 체계적으로 검증해야한다.

2. 구조화된 추출 Structured Output

1) type hint

  • 사용해도 안해도 괜찮다.
  • 함수 식에 영향을 주지않고 설명 역할

2) Pydantic

  • 데이터를 검사하고, 구조화할 수 있게 도와주는 라이브러리 `pytohn from pydantic import BaseModel

class CalendarEvent(BaseModel): name : str date : str participants : list[str] `

3. 함수 호출 Function Calling

  • 프로그래밍 된 함수를 LLM이 호출해서 사용해 결과를 출력Ex) gpt-4o는 2023데이터만 학습한 상태인데 프로그래밍 된 함수를 사용해 검색해서 2024 데이터를 활용하고 결과를 보여줄 수 있게할 수 있다.

개인과제

개인과제를 진행하며 프롬프트 마다 다른 상황과 역할을 부여하였습니다.

시스템 메세지에 {splits}를 넣어서 splits변수를 찾지 못하는 에러가 나왔고 이는 처음에 유니코드에러로만 나와서 어떤 에러인지도 파악하지못하고 상관없는 부분만 수정을 계속 진행하다.

재부팅을 하고 다시 실행하였을 때 변수를 찾을 수 없다는 에러가 나와 시스템 메세지에서 splits를 삭제해주니 정상작동하였습니다.

또한 프롬프트를 직접 입력주는 형태로 진행했는데 txt파일에 따로 작성한 뒤 불러오는 형태로 진행해야한다는 것을 이제야 알았습니다.

내일은 txt파일을 불러오고 답변을 저장하는 방법을 찾고 코드를 작성해서 비교까지 해볼아야겟습니다.


회고

전체적으로

오늘 학습은 시간을 버렸다고 생각합니다.

어떤 부분에서 에러가 나오는지 파악하지 모하고 에러코드로만 해결하려했던게 패착인것같습니다.

다른 학습과 강의는 물론 좋았고 알찻습니다.^^

Python 문제풀이를 하며

오늘은 지금까지 풀어본 문제들을 다시한번 풀어보는 시간을 같이 가졌습니다.

전에 이해하고 작성을 거리낌없이 했던 문제들도 헷갈려서 완성하지 못하는 문제들도 있었습니다.

다음에 조금 시간이 지난 뒤 한번더 이런 형태의 학습을 자주 진행해보아야할 것같습니다.

답이 외워지는 상황까지 반복할것입니다.

특강을 들으며 오늘의 LLM특강은 프롬프트 엔지니어링의 아주 자세하 설정까지 알아보는 시간이였습니다.

아직 3강이나 남았는데 또 어떤 내용이 나올지 궁금해집니다.

개인과제를 진행하며

오늘 개인과제의 진도를 쭉 빼고 싶었습니다.

완성이라는 단어를 사용할 정도로 진행하고싶었지만 어이없는 변수에러로 시작부분을 맴도는 느낌으로 시간이 끝나버렸습니다.

또한 모델에 프롬프트를 직접 입력하는 것이 아닌 텍스트 파일에 저장 해놓은 것을 불러오는 형태였다니 좌절감이 생기지만 확실하게 내가 해결해야하는게 무엇인지 분명해졌기 때문에 내일은 학습시간이 다 지나도 완성하지 못한다면 넘겨서 까지라도 완성을 해낼 것입니다.

목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제풀이
  3. LLM 특강
  4. 개인과제 수행
  5. 수준별 학습반
  6. 회고

학습 코드와 필기내용은 GITHUB링크를 이용해주세요


시작전 마음가짐

오늘의 학습은 개인과제에 집중을 할 것입니다.

 

최대한 개인과제에 필요하고 메모해 놓았던 부분들을 실행시키는 것이 목표입니다.

 

python문제와 수준별학습반의 prompt강의도 궁금하네요

 

학습을 시작하겟습니다.


Python 문제풀이

1. 등차수열의 특정 항 더하기

  • range함수로 등차수열을 정의 했는데 값이 true, false이면 정의가 안됨
  • 등차 수열을 계산하는 코드식 찾아보고 해결
# 첫 번째
def solution(a, d, included):
    answer = range(a, len(included), d)
    for i in rnage(len(included)):
        if included[i]:
            return sum(answer[i + 1])

# 두 번째
def solution(a, d, included):
    answer = 0
    for i in range(len(included)):
        if included[i]:  
            answer += a + i * d  
    return answer

2. 주사위 게임

  • random함수를 사용해서 풀어보려 했으나 random으로 출력한 값을 변수로 지정하는 방법을 찾지못함
  • 하나씩 정의해가면 해결
def solution(a, b, c):
    ran_1 = a + b + c
    rna_2 = a**2 + b**2 + c**2
    ran_3 = a**3 + b**3 + c**3

    if a == b == c:
        return ran_1 * rna_2 * ran_3
    if a == b or b == c or a == c:
        return ran_1 * rna_2
    else:
        return ran_1

3. 원소들의 곱과 합

  • 고민은 조금있었지만 완료
def solution(num_list):
    answer_1 = sum(num_list)**2

    answer_2 = 1
    for num in num_list:
        answer_2 *= num

    if answer_1 > answer_2:
        return 1
    else:
        return 0

LLM 특강 1강

1. LLM은 어떻게 딥러닝을 통해 구현될 수 있었을까?

  • DNN(딥러닝): 입력층 -((가중치)> 은닉층....->출력층
  • 언어 모델에는 RNN을 보통 사용한다.
  • 과정: 데이터가 커지면서 기울기 소실문제가 발생해 해결하기 위한 방법이 나옴
    • LSTM
    • GRU
    • 하지만 RNN의 구조적인 한계(장기 의존성, 기울기 소실 문제)로 완전히 극복하지 못함
    • 그래서 Attention 기법의 도입
  • Transformers: RNN을 빼버리고 Attention만을 사용한 모델을 만들었는데 성능이 더욱 뛰어났다.
    • 앞의 노드 점수를 계산할 필요가 없어짐
    • 모든 노드의 점수를 동시에 계산할 수 있게 됨(GPU)
    • 장기의존성, 기울기 소실문제 개선
  • 결론: Transformers를 이용해서 데이터 사용양을 늘리수있었고 그로인해 LLM을 만들 수 있게 되었다.

2. LLM은 어떤식으로 배우게 되나요?

  • 공식 문서를 보고 코드를 쓸 줄 알아야한다.

3. LLM활용의 기본적인 컨셉트

  • Text Completion(텍스트 완성)에 특히 강점을 가지고있음
    • 맥락(Context)를 읽고 다음에 올 단어를 예측하여 문장을 완성하는 것
    • Context로 줄 수 있는 토큰의 사이즈가 커지니 다양한 일들이 가능해짐 ex) Prompt
  • Prompt: 사용자 질문만이 아니라 Prompt에 설정 된 문맥까지 다 읽고 기능
    • user
    • System
    • Assistant
  • Token 단위로 prompt를 읽어 온다.

4. LLM 사용해보기


개인과제 (LLM)

수정 필요!

  1. 백업 스토어 설정에서 InMemoryDocstore를 사용해보기
  2. 리트리버 변환에서 다른 변환 방법 찾아보고 적용 및 비교해보기
  3. 답변 방식을 바꾸는 프롬프트 방법 찾아보기
  4. 대화형 Chat봇 코드와 비교해 보았을 때 오히려 가독성이 떨어지게 출력이 되어 프롬프트 수정이 필요해 보임
  5. 백터 스토어 생성에서 FAISS.from_documents 대신 FAISS.from_embeddings 사용해서 결과 비교해보기
  6. 랭스미스 API키 받아서 LLM평가해보기

수정 진행!

1. InMemoryDocstore를 사용해보기

# 벡터 스토어 생성
from langchain_community.vectorstores import FAISS
from langchain_community.docstore.in_memory import InMemoryDocstore

vector_dim = len(embeddings.embed_query("example text")) 
index = faiss.IndexFlatL2(vector_dim)

vector_store = FAISS(
    embedding_function=embeddings,
    index=index,
    docstore=InMemoryDocstore(),
    index_to_docstore_id={}
)

2. 파라미터 조정

retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 2})

model = ChatOpenAI(model = "gpt-4o-mini", temperature = 0.3, max_tokens = 1000, stream = True)

3. 프롬프트에 추가한 명령

  • system: 인공지능 모델 연구자이십니다. 이 문서에서는 발전, 과제 및 주요 기여를 포함하여 초대형 언어 모델의 최신 연구 동향을 설명합니다. 귀하의 임무는 문서를 분석하고 상세하고 통찰력 있는 답변을 제공하는 것입니다.
  • user: 본 문서에 언급된 주요 동향과 연구 결과를 중심으로 포괄적인 답변을 부탁드립니다.
contextual_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are an artificial intelligence model researcher. The document describes the latest research trends in super-large language models, including advancements, challenges, and key contributions. Your task is to analyze the document and provide a detailed and insightful response."),
    ("user", "Context: {context}\n\nQuestion: {question}\n\nAnswer: Please provide a comprehensive response, focusing on the key trends and research findings mentioned in the document.")
])

수준별 학습반

Prompt 점수 측정 방법

  • baseline prompt 작성
  • 다른 모델 prompt의 답변을 저장한다.
  • Rouge, G-Eval 사용하여 점수를 받고 프롬프트를 수정하며 점수를 높여간다.
  • 결론: 실습코드를 중간에 놓쳐서 완벽하게 따라해보지는 못했지만 어느정도 이해가 되는 수업이였습니다. 놓친 부분은 주말에 1~3강 복습을 해보고 개인과제에 적용을 하고 남은 기간동안 프롬프트 엔지니어링 과정을 문서화하는것을 복표로 해보아야겟습니다.

회고

전체적으로

 

오늘 학습은 꽤나 알찻다고 생각합니다.

 

오전 10시에 진행한 LLM특강 오후 7시에 진행한 API키 특강 오늘은 특강이 2개나 진행 되었고 수준별 학습반에서도 prompt engineering에 대한 강의가 있었습니다.

 

모든 정보를 이해했다고는 할 수 없지만 대부분은 이해가 가능했다고 말할 수 있습니다.

 

Python 문제풀이를 하며 

 

아직 기본기가 부족한 것 같습니다.

 

잠시 헷갈린거지만 바로 행동으로 옮겨지지 않은건데요 그것이 바로 기본인 리스트를 활용하는 방법과 연산기호를 사용해 결과를 가져오는 부분이였습니다.

 

지금까지 문제를 풀며 나온 작성법들과 혼동이 와서 그런 것 같습니다.

 

다음에는 이러한 기본적인 부분은 바로 사용방벙이 생각 날 만큼 학습을 진행야할듯합니다.

 

특강을 들으며 오늘은 2가지의 특강을 들었습니다.

 

오전의 LLM특강은 지금까지 궁금했던 LLM과 딥러닝의 연관성에 대한 내용이 나와서 흥미롭고 높은 이해도로 가져갈 수 있었습니다.

 

API특강은 우리가 친숙하게 사용했던 싸이트들의 API키를 발급 받고 사용방법 및 공식 API키 관련 문서읽는 방법에 대하여 알려주셨습니다.

 

각 싸이트마다 조금씩 다른 점이있지만 API키를 불러오는 방법의 진행방식이 매우 비슷하다 생각 들었습니다.

 

개인과제를 진행하며

 

개인과제 LLM에 대한 진도는 크게 나가지 않았지만 지금까지 진행하며 필요하다고 생각한 수정이 필요한 부분들이 필요한지 다음 단계에서 진행해야하는 것인지에 대해서 파악할 수 있었습니다.

 

또한 내가 만든 RAG체인을 활용한 대화형 LLM모델에 직접적으로 프롬프팅 엔지니어링을 하는 방법을 알게 되었습니다.

 

수준별 학습반 수업을 들으며

 

실습코드를 중간에 놓쳐서 완벽하게 따라해보지는 못했지만 어느정도 이해가 되는 수업이였습니다.

 

놓친 부분은 주말에 1~3강 복습을 해보고 개인과제에 적용을 하고 남은 기간동안 프롬프트 엔지니어링 과정을 문서화하는것을 복표로 해보아야겟습니다.

목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제풀이
  3. 개인과제 수행
  4. 수준별 학습반
  5. 회고

학습 코드와 필기내용은 GITHUB링크를 이용해주세요

 

mission/초거대 언어모델 연구 동향.ipynb at main · Onesword-Jang/mission

Contribute to Onesword-Jang/mission development by creating an account on GitHub.

github.com

 


시작전 마음가짐

오늘은 아직 잠이 덜 깬 상태로 시작하는 학습입니다.

 

점점 추워지면서 몸이 왜이리 피곤에 절여지는거 같은지..

 

일단 오늘의 학습은 어제와 비슷하지만 개인과제의 결과 출력을 조금 더 퀄리티 높게 나오게 만들어보고 다른 방법으로 개인과제를 다시 해보려고 합니다.

 

굉장히 바쁜 하루일것 같습니다.

 

그럼 학습을 시작하겟습니다.


Python 문제풀이

1. 조건 문자열

  • 처음 풀이가 1번 출력값이 틀림
  • f포맷팅을 이상하게 사용했나 싶어서 다르게 작성해보다가 안되서 GPT에게 물어보니 너무 긴 조건식을 보여주어서 가독성이 마음에 안들어 다른 방법을 찾아봄
  • eval함수: 문자열을 직접 조건식으로 평가하는 방법
  • eval함수를 사용해 완료
# 첫 시도
def solution(ineq, eq, n, m):
    answer = '(f"{n} {ineq}{eq} {m}")'
    if answer == True:
        return 1
    else:
        return 0

# eval함수 사용
def solution(ineq, eq, n, m):
    condition = f"{n} {ineq}{'=' if eq == '=' else ''} {m}"
    return 1 if eval(condition) else 0

2. flag에 따라 다른 값 반환하기

  • 정답이 맞는데 답이 답이 나오지 않음
  • flag == 'true'를 flag == True 로 바꾸니 맞음
# 나의 정답
def solution(a, b, flag):
    if flag == True:
        return eval(f'{a} + {b}')
    else:
        return eval(f'{a} - {b}')

# 간단한 정답
def solution(a, b, flag):
    return a + b if flag else a - b

# lambda 활용

solution = lambda a,b,f:a+b if f else a-b

3. 코드 처리하기

  • 문제 이해가 안감
  • 진짜 모르겟어서 GPT에게 답을 받음
  • 하지만 이해가 안감
  • 수업시간에 설명을 들어보아야할 듯
  • 준기님께서 설명을 해주셔서 이해 완료
def solution(code):
    mode = 0 
    ret = ""  

    for idx in range(len(code)):
        if code[idx] == "1":
            mode = 1 - mode
        else:
            if mode == 0 and idx % 2 == 0:
                ret += code[idx]
            elif mode == 1 and idx % 2 == 1:
                ret += code[idx]

    return ret if ret else "EMPTY"

def solution(code):
    mode = 0
    ret = ""
    for idx in range(len(code)):
        if code[idx] =! 1 and idx % 2 == 0:
            ret += code[idx]
            if code[idx] == 1:
                mode = 1
        else:
            if code[idx] =! 1 and idx % 2 == 1:
                ret += code[idx]
                if code[idx] == 1:
                    mode = 0

    return ret

개인과제 (LLM)

수정 사항

  1. 전체코드에 대한 이해도가 낮아 자세한 내용을 정리해보아야할듯
  2. 백업 스토어 설정에서 InMemoryDocstore를 사용해보기
  3. 리트리버 변환에서 다른 변환 방법 찾아보고 적용 및 비교해보기
  4. 답변 방식을 바꾸는 프롬프트 방법 찾아보기
  5. 대화형 Chat봇 코드와 비교해 보았을 때 오히려 가독성이 떨어지게 출력이 되어 프롬프트 수정이 필요해 보임

수정 현황

1. 전체코드 내용 정리

  • 전체 내용의 라이브러리, 패키지, 파라미터, 코드의 흐름에 대한 내용을 정리했습니다.

아직 다음 단계를 시도해보지 못했습니다.

공부하며 추가 수정이 필요한 부분

  • 백터 스토어 생성에서 FAISS.from_documents 대신 FAISS.from_embeddings 사용해서 결과 비교해보기
  • 랭스미스 API키 받아서 LLM평가해보기

수준별 학습반 (prompt engineering)

Prompt Development Cycle의 평가기준

1. 사람이 평가하는 방법

1) LMSys Chatbot Arena(https://chat.lmsys.org/)

  • 동일 질문에 대해 익명의 2개 모델의 답변 중 선택할 수 있는 싸이트
  • 승/패/무 투표 이후에 모델명 공개
  • 각 모델에 대한 랭킹 존재

2. LLM 모델이 평가하는 방법

1) Model Based Evaluation

  • GPT-4 같은 Strong LLM을 통해 평가하는 방법
  • Pairwise Comparison: 답변 2개 중 결정하게 만든다.
  • Single Answer Grading: 답변에 점수를 매긴다.
  • Reference-Guided Grading: 예시 답변을 주고 점수를 매긴다.

3. 코드로 평가하는 방법

  • 코드 로직을 통한 평가 방법 1) Accuracy, Precision, Recall 등 2) ROUGE: 요약 모델에 사용 3) BLUE: 기계 번역 자동 평가 방법 4) Exact Match, String Match

4. 결론

  • 사람이 직접 평가하는 것이 가장 좋다.
  • 모델이 평가하는 방법도 충분히 사용 가능하다
  • 정량적인 평가와 정성적인 평가 모두 하는게 가장 이상적인 케이스

Prompt engineering의 기법들

1. few shot

  • 참고 할 수 있는 정답 사례들을 Prompt에 추가하여 성능을 높이는 방법
  • 모델 사이즈가 어느정도 커야지 효과가 특출나다.
  • 사전 훈련 단계에서 언어 모델이 패턴을 인지하고 적응하는 능력이있다.
  • In-Context Learning이라고도 불림

2. Chain-of-Thought

  • Few Shot에 추가로 문제 해결 과정(Reasoning)도 같이 Prompt에 추가하는 방식
  • CoT 응용 케이스
    1. Self-Consistency: 여러 번의 다양한 CoT 과정을 거쳐 그 중 베스트를 선정
    2. Generated Knowledge: 질문을 통해 상식을 끄집어내어 더 정확하게 대답하는 방법
    3. Least-to-Most: 질문 A를 바로 물어보지 않고 질문 a, b로 쪼개서 물어보는 분할 정복 방법
    4. Prompt Chaining: Prompt A의 Output A를 Prompt B에 사용하는 방법
    5. ReAct: Reasoning 외에도 Action까지 추가하는 방법

회고

전체적으로

 

오늘은 집중이 잘 안되는 하루였습니다.

 

파이썬 문제도 어려워서 시간이 꽤 걸렸고 개인과제 목표도 전부 달성하지 못했습니다.

 

하지만 수준별 학습반 수업은 흥미롭고 많은 사람들의 질문에 많은 공부가 되었습니다.

 

내일을 개인과제의 목표를 모두 수행해보겟습니다.

 

Python 문제풀이를 하며

 

파이썬 문제를 풀 때 가장 중요시 생각하는게 나의 머리로만 풀자입니다.

 

오늘 문제들은 생각이 나지않아 GPT의 도움을 많이 받았습니다.

 

GPT의 도움을 받아도 코드를 그대로 따라 쓰는게 아닌 어떤 흐름인지 간단하게 파악하고 다시 혼자 코드를 작성하면서 학습 중입니다.

 

또한 GPT의 답변이 마음에 들지 않는다면 과감히 다른 방법으로 해결하려합니다.

 

문제 3번은 GPT의 설명을 보아도 이해가 가지않았는데 같은 팀원인 준기님의 설명으로 빠르게 이해를 할 수 있었습니다.

 

개인 과제를 진행하며

 

코드는 어제 다 짜놓은 상태지만 거의 따라치다 싶이하여서 코드들의 각 기능에 대해서 공부를 하였습니다.

 

공부를하며 느끼는 의문점들을 메모해 놓았고 그것을 해결하기 위한 방법들을 적용하는 것이 내일 목표입니다.

 

또한 LLM모델을 다른 방식으로 만들어보고 두가지 모델을 비교하는게 최종 목적입니다.

 

수준별 학습 수업을 들으며

 

오늘은 실습 보다 이론 위주의 수업이였습니다.

 

제공되는 강의 내용과 비슷하지만 한 가지의 주제(Prompt)를 깊게 이해하는데 도움이 되었으며 확실히 흥미를 가지고 수업에 임하니 이해가 잘되고 집중력이 높았습니다.

 

또한 간단한 실습을 진행하였는데 반복해서 치다보니 영타가 빨라지고 실습하는 코드를 완벽하진 않지만 외우게 되었습니다.

 

이렇게 천천히 다져가면 언젠간 단단한 지식이 되어 필요한 지식을 꺼내려할 때 무너지지 않을 것 같습니다.

 

감사합니다.

목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제풀이
  3. 개인과제 수행
  4. 수준별 학습반
  5. 회고

학습 코드와 필기내용은 GITHUB링크를 이용해주세요

 

 

TIL/LLM/prompt/01. Prompt Engineering 기초.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

mission/초거대 언어모델 연구 동향.ipynb at main · Onesword-Jang/mission

Contribute to Onesword-Jang/mission development by creating an account on GitHub.

github.com

 


시작전 마음가짐

오늘은 상쾌한 아침입니다.

 

개인과제 발제가 있어 약간 떨리지만 무조건 해내야하는 내 일이니 잘 해내 보겟습니다.

 

우선 발제를 듣고 Python 문제풀이 다음에 바로 개인과제를 진행해보려고 합니다.

 

이제 시작해보겟습니다.


Python 문제풀이

1. n의 배수

  • 처음 만났을 때 문제를 어떤 연산자를 사용해서 풀어야지라는 생각으로 천천히 생각해 보았습니다.
  • 분정도 생각하고 %(나머지) 연산자를 사용하면 쉽게 풀수있다는걸 생각해서 쉽게 풀었습니다.
  • 다른 사람 풀이에서 not함수를 사용하는 것을 보았는데 저는 생각지도 못한 것이라 살짝 정리하겟습니다
  • not함수는 논리 연산에서 사용되는 함수로, 주어진 값의 참(True) 또는 거짓(False) 여부를 반대로 변환해 줍니다. 그래서 나머지가 0이면 1을 1이면 0을 반환하게 만들어주었습니다.
# 나의 풀이
def solution(num, n):
    if num % n == 0:
        return 1
    else:
        return 0
# 좋은 다른 사람 풀이
def solution(num, n):
    return int(not(num % n))

2. 공배수

  • 이 문제에서 해결이 안된 문제가있습니다.
  • 조건식을 number % n == number % m으로 했을 때 문제가 틀렸다고 나옵니다.
  • 직접 코드를 쥬피터 노트북에서 실행시켜보았을 때 1과 0으로 출력이 잘 되었습니다.
    # 나의 풀이
    def solution(number, n, m):
      if 10 <= number <= 100 and 2 <= n <= 10 and 2 <= m <= 10:
          if number % n == 0 and number % m == 0:
              return 1
          else:
              return 0

3. 홀짝에 따라 다른 값 반환하기

  • 홀짝 구하기 성공
  • 처음엔 리스트 형태로 연산을 하려다 실패해 range함수 적용
  • 홀수 덧셈식 성공
  • 짝수 제곱 식 검색 후 성공
# 나의 풀이
def solution(n):
    if n % 2 == 0:
        return sum(i ** 2 for i in range(0, n + 1, 2))
    else:
        return sum(range(1, n + 1, 2))
# 좋은 다른 사람 풀이
def solution(n):
    if n%2:
        return sum(range(1,n+1,2))
    return sum([i*i for i in range(2,n+1,2)])

개인과제 수행

수정이 필요한 부분

  • 백업 스토어 설정에서 InMemoryDocstore를 사용해보기
  • 답변 방식을 바꾸는 프롬프트 방법 찾아보기
  • 리트리버 변환에서 다른 변환 방법 찾아보고 적용 및 비교해보기
  • 전체코드에 대한 이해도가 낮아 자세한 내용을 정리해보아야할듯
  • 대화형 Chat봇 코드와 비교해 보았을 때 오히려 가독성이 떨어지게 출력이 되어 프롬프트 수정이 필요해 보임

1. API키 등록

  • 완료

2. 모델 토드

ModuleNotFoundError: No module named 'langchain_openai'

  • !pip install langchain-openai
  • !pip install --upgrade langchain
  • !pip install -U langchain-openai
  • 각 단계를 진행하면서 코드를 실행시켰지만 아직 모듈에러

새로운 가상환경을 만들어서 해결.

3. 파일 로드

  • 완료

4. 청크나누기

CharacterTextSplitter & RecursiveCharacterTextSplitter

두 가지 청크 분할 방법의 다른점

1) 분할기준

  • CharacterTextSplitter: 구분자 기준 텍스트 나누고 cunk_size를 초과하지 않게 분할
  • RecursiveCharacterText: 구분자 기준 분할 후 cunk_size를 초과하는 덩어리는 재귀적으로 다시 분할해 크기가 적절하게 맞도록 한다

2) 텍스트 나누는 방식

  • CharacterTextSplitter: 구분자에서만 분할(텍스트가 크면 덩어리로 나누지 못할 수 있다)
  • RecursiveCharacterText: 텍스트를 재귀적으로 나누어서 큰 텍스트는 더 작은 덩어리로 자동으로 나누어 cunk_size에 맞게 한다.

3)결론: 큰 텍스트를 다루는지 안다루는지4)코드 파라미터 설명

  1. separator="\n\n", # 빈 줄을 구분자로 지정
  2. chunk_size=100, # 텍스트를 100자 이하로 나눈다
  3. chunk_overlap=10, # 중복 문자 수 지정
  4. length_function=len, # 각 텍스트 길이 계산
  5. is_separator_regex=False, # 구분자를 문자열 처리
  6. splits = text_splitter.split_documents(docs) # docs에 분할할 문서 리스트를 입력

5. 벡터 임베딩 생성

  • 다른 임베딩 모델들을 찾아 보았습니다.
  • KoBERT, KoELECTRA, KLUE 등 이있었지만
  • text-embedding-ada-002이 비용면에서 효율적이라 과제에 사용했습니다.

6. 백업 스토어 설정

  • LLM강의 교안의 InMemoryDocstore를 사용해 보려 했으나 어떻게 작동하는지 이해를 못해서 참고자료만을 사용해서 진행했습니다.

7. 리트리버 변환

  • 코드에 대한 이해도 부족
  • 다른 리트리버 변환 방법 찾아보고 적용해보기

8. 프롬프트 템플릿 정의

  • 코드에 대한 이해도 부족
  • if문을 추가해 작동을 멈추는 코드 추가

수준별 학습반

오늘은 프롬프트의 기초적인 강의를 들었습니다.

  • 구글 드라이브를 연결
  • API키 등록
  • ChatGPT 원리 및 간단한 사용
  • 프롬프트 수정으로 비교
  • 프롬프트 생성 Cycle

들에 대한 내용을 배웠습니다.

 

초반에는 지금까지 들었던 내용과 비슷해 쉽게 따라 갈 수 있었습니다.

 

이후에 배우게 된다는 프롬프트를 생성 수정의 반복 과정에서 성능 평가 및 여러가지 비교하는 강의가 될 것이라 생각해 기대가 됩니다.


회고

전체적으로

 

오늘은 개인과제를 진행하는데 시간을 많이 사용하였는데 만족스럽지 못한 결과인 것같아 조금 불만족입니다.

 

결과적으로는 개인과제의 필수 부분은 모두 작동하게 작성하여 어느 정도 만족입니다.

 

또한 이때까지 배웠던 내용들이 하나씩 맞춰지는 퍼즐처럼 각자 자리를 찾아가 하나의 그림이 찾아지고있는 느낌입니다.

 

Python 문제풀이를 하며

 

파이썬 문제는 내가 아는 내용이 나오면 항상 재미있고 다른 사람의 문제 풀이를 보고 놀라게 되는 과정의 연속입니다.

 

틀릴 때마다 왜 틀렸지 이 문제가 무엇을 찾고 어떤 방법으로 찾아야하지 생각하는 과정이 즐겁습니다.

 

개인과제를 진행하며

 

코드들이 참고 부분에 나와있어서 따라 적으며 작동하는지 오류가 나는지에 대한 학습을 진행한 것 같습니다.

 

각 코드들이 어떤 내용을 담고있는지 어떤 행동을 하는지 알아보고 더 나은 방법이있는지 공부해서 적용해보고싶습니다.

 

수준별 학습반을 진행하며

 

지금까지 배운 내용들에 더욱 자세한 내용들을 배우는 시간이였습니다.

 

뭔가 간접적으로 다가오던 용어들이 나에게 직접 다가와 나는 이런거였고 이렇게 사용하면 더 좋아라고 본인을 설명하는 느끼이였습니다.

 

내일까지 배우는 프롬프트 엔지니어링을 완벽하게 이해하고 싶습니다.

목차

오늘의 TIL 순서는

  1. 시작전 마음가짐
  2. Python 문제풀이
  3. 머신러닝 t-SEN 결과해석
  4. AI모델활용 복습
  5. 크롤링 특강
  6. 회고

입니다.

강의 필기와 코드는 GitHub 링크를 참고해주세요

 

TIL/ML/t-SNE.ipynb at main · Onesword-Jang/TIL

오늘 배운 것은?! Contribute to Onesword-Jang/TIL development by creating an account on GitHub.

github.com

 

 


시작전 마음가짐

오늘은 피로가 많이 축척된듯한 시작입니다. 눈이 크게 안떠지네요ㅎㅎ

 

내일 새로운 LLM&RAG 개긴과제가 있는 만큼 밀렸던 복습을 빠르게 진행할 예정입니다.

 

설정한 목표를 빠르게 달성하고 다른 복습까지 진행되었으면 합니다.

 

그리고 데이터 분석이 중요해 보이는데 관련된 자격증이나 학습자료를 찾아볼 생각입니다.

 

그럼 학습을 시작하겟습니다.


Python문제풀이

1. 문자열 곱하기

  • answer에 바로 'my_string*k'는 출력 값 오류 => ''(따옴표를 빼면 정상작동)
  • answer = print('my_string * k',end = "") 출력 값 오류
  • join함수를 사용해서 성공
def solution(my_string, k):
    answer = ''.join(my_string * k)
    return answer

2. 더 크게 합치기

  • 문자열로 바꾸고 진행 한 뒤 정수로 데이터 타입 바꾸기 까지 혼자 해냄
  • max함수가 생각나지 않아서 찾아보았음
def solution(a, b):
    if 1 <= a <= 10000 and 1 <= b <= 10000:
        ab = int(str(a) + str(b))
        ba = int(str(b) + str(a))
        answer = max(ab, ba)
        return answer
# f-스트링 사용
def solution(a, b):
    return int(max(f"{a}{b}", f"{b}{a}"))

3. 두 수의 연산값 비교하기

  • if, elif, else를 사용했는데 elif문 문법 틀림
  • 완료
def solution(a, b):
    ab = int(str(a) + str(b))
    ab2 = 2 * a * b
    if ab > ab2:
        return ab
    elif ab == ab2:
        return ab
    else:
        return ab2
# 짧게 구하는 식
# max함수는 수가 같을 때 항상 앞의 수를 가져온다.
def solution(a, b):
    return max(int(str(a) + str(b)), 2 * a * b)

머신러닝 t-SEN

이번엔 수학적 개념을 신경 쓰지 않고 오로지 t-SEN이 무엇을 선택하며 진행 되는지 그리고 이 분류방법으로 하는게 무엇인지에 대하여 알아보았습니다.

 

의외로 접근이 쉬웠지만 뭔가 알다가 마는 느낌이 없지않아 있었습니다.

목적

  • 복잡한 데이터의 시각화
  • 데이터의 군집 구조나 유사성을 시각적으로 파악

결과 해석

  • 숫자가 시각화에서 분리된 형태로 잘 모여 있다면, t-SNE가 숫자 간의 패턴 차이를 잘 포착했다는 것을 의미
  • 특정 숫자들끼리 서로 겹쳐 있다면, 해당 숫자 간의 특징이 비슷하여 모델이 쉽게 구분하지 못할 가능성이 있음을 의미

AI모델활용 복습

오늘은 5-2 ~5-5 강의까지 수강하였고 큰 트러블은 만나지 않았습니다.

 

복습을 통해 export를 터미널에 사용해서 API키를 사용하는 방법을 알게 되었습니다.

 

이미지와 음성 생성 Ai 코드를 작성해보았는데 일반적인 코드는 어느정도 어떤 기능이구나 하면서 이해가 갓는데 API키를 입력 시키거나 자신의 목소리 데이터는 어떻게 학습 시키는지 모르겟습니다.

 

다음에 기회가 생긴다면 직접 진행해보는 것이 가장 좋은 학습 방법이라 생각이 들었습니다.


크롤링 강의(동적 크롤링)

오늘 몸이 안좋아서 크롤링 강의는 영상이 올라오면 다시 각 잡고 공부해야겟다는 생각으로 가볍게 수강하였습니다.

 

코드를 수정하고 설명하는 부분은 따라가면서 실행은 시켜보지 않았습니다.

 

이 크롤링을 이용해서 많은 정보를 얻을 수 있을 뿐만 아니라 다양한 형태의 데이터를 가지고 올 수 있어 보여 굉장히 효율적이고 좋은 방법이라 생각이 들었습니다.

 

대학시절 상권분석을 해본적이있지만 단순히 포털 싸이트에서 파일을 다운받아 일일이 읽으며 분류했던 기억이있습니다.

 

파이썬과 크롤링을 합치니 포털싸이트의 정보보다 더욱 최신화된 정보와 원하는 정보만을 다룰 수 있어 왜 이렇게까지 인공지능 및 코딩에 열광하는지 조금이나마 알게 된것같습니다.


회고

오늘 오전 학습을 하던 중 아버지께서 응급실에 진료를 보러가신다고 하여 운전을 못하실 상황을 대비해 외출을 하였습니다.

 

굉장히 오랜만의 외출이기도 하고 오랜만에 운정을 한 탓에 몸이 긴장을 한 것인지 다녀 온 이후로 몸이 굉장한 피로감을 표출 하더군요.

 

다행히도 아버지는 몸에 이상이 없는 상태셨고 저는 어머니가 대신 보호자 역할로 오셔서 1시간만에 복귀하여 다시 학습을 진행했습니다.

 

Python문제풀이를 하며

 

파이썬 문제는 언제나 만나면 머리가 텅 비워지는 것같습니다.

 

하지만 천천히 생각하고 생각나는대로 써내려가다보면 어디가 틀린지 알게 되는데요 아직 문제를 푼다는것에 익숙치않아 그런듯합니다.

 

또한 수준별 학습 강의에서 혼동하기 쉬운 형태들과 현업에서 자주 쓰는 함수들을 알려주어 좋았습니다.

 

머신러닝 결과해석을 하며

 

이전의 머신러닝 결과를 분석하며 느낀 것인데 수학적 개념과 시각화된 자료들을 찾아보며 이해도는 높아졌지만 굉장한 시간이 걸렸다고 생각합니다.

 

그래서 오늘은 단순히 t-SEN의 목적과 과정 결과를 보는 방법 등을 위주로 학습하였고 이는 1시간이 조금 넘게 걸리며 짧은 시간만에 끝을 볼 수 있었습니다.

 

이해력을 높이는 것도 좋지만 저는 현재 커리큘럼을 따라가는 입장이니 빠르게 지나가야할건 분명히 해야할 것입니다.

 

AI모델활용 복습을 진행하며

 

음성 및 이미지를 사용하는 AI모델이 작동하는 것을 보는건 언제 봐도 신기하고 재미있습니다.

 

아직 실행을 시켜보지는 못했지만 진행해보면 많은 아이디어들이 떠올라 한동안 가지고 놀 수 있을 정도로 사용해보지 않을까 싶습니다.

 

크롤링 강의를 들으며

 

와 내가 대학 시절에 했던 분석은 거의 무의미한 행동이였구나라는 생각이 머리를 지배하는 강의였습니다. 그만큼 충격으로 다가왔죠

 

저는 지금 이 커리큘럼 과정을 밟으며 데이터를 분석하는 일에 관심이 많이 가고있습니다.

 

크롤링을 자세하게 배워보고 싶습니다.

+ Recent posts