목차
오늘의 TIL 순서는
- 시작전 마음가짐
- Python 문제풀이
- 개인과제 수행
- 수준별 학습반
- 회고
학습 코드와 필기내용은 GITHUB링크를 이용해주세요
시작전 마음가짐
오늘은 상쾌한 아침입니다.
개인과제 발제가 있어 약간 떨리지만 무조건 해내야하는 내 일이니 잘 해내 보겟습니다.
우선 발제를 듣고 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)코드 파라미터 설명
- separator="\n\n", # 빈 줄을 구분자로 지정
- chunk_size=100, # 텍스트를 100자 이하로 나눈다
- chunk_overlap=10, # 중복 문자 수 지정
- length_function=len, # 각 텍스트 길이 계산
- is_separator_regex=False, # 구분자를 문자열 처리
- 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' 카테고리의 다른 글
내일배움캠프 36일차 TIL + Pytohn,특강(LLM, API), 개인과제(LLM), prompt engineering (3) | 2024.11.15 |
---|---|
내일배움캠프 35일차 TIL + Python, LLM 개인과제, prompt engineering (2) | 2024.11.14 |
내일배움캠프 33일차 TIL + Python, 머신러닝(t-SEN), AI모델활용, 크롤링 (4) | 2024.11.12 |
내일배움캠프 32일차 TIL + Python, LLM, 머신러닝(LDA), 크롤링 (2) | 2024.11.11 |
내일배움캠프 31일차 TIL + LLM & RAG, ML복습 (2) | 2024.11.08 |