오늘의 이모저모
오늘은 매우 바쁜 하루였다.
사실 딥하게 공부하면 공부할 거리가 매우 넘쳐나기 때문에,
한번 딥하게 공부해보았다.
코드를 파보기전, 기본적으로 개념부터 한번 파 보았으며,
오늘의 특강을 통하여 좀더 뭔가 많이 해보고 싶은게 생겨서 좋다.
지금 아이디어를 txt파일로 저장을하며, 시간이 나거나 마음이 맞는 팀원을 찾아 한번 해보고 싶다.
현재 주말에 한번 같이 공부를 하는 팀과
평일에도 마음이 맞는 사람들과 같이 공부를 하는 모임을 한번 만들어 보고자 한다.
가능할가???
오늘의 목표
- 강의 5주차 까지 완강
- 강의 정리하기
- 복습하기
- 삼성증권 과제하기
- SQL 코드카타
- 알고리즘
- TIL
- 회고록
달성도
오늘의 달성도
- 강의 정리하기 (5주차 3/5 완료 )
- SQL 코드카타
- Python 알고리즘
사실 강의 수강과 정리를 최대한 오전에 끝내고,
오후에는 과제와 복습을 하려고 했지만
이모저모에서도 이야기를 했듯,
딥하게 파기 시작하니까 끝없이 나오더라....
SQL코드카타 문제풀고
Python 알고리즘은 난이도가 조금 있어서 시간이 많이 걸리더라.
오늘 공부 한 것
SQL
문제
Table: World
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| name | varchar |
| continent | varchar |
| area | int |
| population | int |
| gdp | bigint |
+-------------+---------+
name is the primary key (column with unique values) for this table.
Each row of this table gives information about the name of a country,
the continent to which it belongs, its area, the population, and its GDP value.
A country is big if:
it has an area of at least three million (i.e., 3000000 km2), or
it has a population of at least twenty-five million (i.e., 25000000).
Write a solution to find the name, population, and area of the big countries.
Return the result table in any order.
The result format is in the following example.
풀이
- area, population, gdp 필터
- big area 필터
코드
select name, population, area
from World
where area >= 3000000 or population >= 25000000
링크
LeetCode/0595-big-countries at main · K-MarkLee/LeetCode
LeetCode/0595-big-countries at main · K-MarkLee/LeetCode
Collection of LeetCode questions to ace the coding interview! - Created using [LeetHub](https://github.com/QasimWani/LeetHub) - K-MarkLee/LeetCode
github.com
Python
문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

Leo는 카펫을 사러 갔다가 위 그림과 같이 중앙에는 노란색으로 칠해져 있고
테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만,
전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때
카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
코드
우선 brown 과 yellow의 합을 total로 구한다.
이때 최소 값이 3인 w즉 높이를 total에 나눈다.
나머지가 0 인경우에, total에서 높이를 나눈 나머지를 넓이 즉 w로 설정한다.
이제는 테두리를 구할건데 이 아이디어는 gpt에게 받았다.
테두리는 높이에서 -2 > 위아래 한칸
너비에서 -2 > 옆으로 한칸
2를 곱하여 양쪽의 값을 생성한다. 이때 겹치는 4칸(모서리)을 -4처리한다.
즉 2 * (w + h) -4가 brown이 맞는 w와 h 를 찾으면 된다.
def solution(brown, yellow):
total = brown + yellow
for h in range(3,total -1):
if total % h == 0:
w = total // h
if 2 * (w + h) - 4 == brown:
return [w, h]
링크
Programmers/프로그래머스/2/42842. 카펫 at main · K-MarkLee/Programmers
Programmers/프로그래머스/2/42842. 카펫 at main · K-MarkLee/Programmers
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - K-MarkLee/Programmers
github.com
LLM 사용 전 중요한 기법
LLM을 사용하기 전에 알아야 할 중요한 개념들에 대해서 알아보자.
보안 문제
LLM을 사용할 때의 데이터 보안 문제가 생길 수 있다.
- 개인 정보 보호
- 학습 데이터 또는 대화를 통하여 민감한 개인 정보가 포함이 될 수 있다.
- 데이터 저장 및 전송
- LLM이 처리한 데이터가 어디에 저장되는지, 어디로 전송이 되는지를 알아야한다.
보안을 강화하는 방법
- 민감한 정보 필터링
- 입력된 데이터에서 민감한 정보를 자동으로 거르는 필터링 시스템을 구축 하는 방법.
- 암호화
- SSL/TLS 와같은 데이터 암호화 프로토콜을 이용한다.
- SSL/TLS을 HTTP와 결합한 HTTPS를 사용한다.
- 데이터 저장 최소화
- 학습데이터가 아닌 유저의 데이터의 최소화를 뜻한다.
- 데이터 보존 주기를 설정해 자동으로 삭제를 시키는등 유저의 정보를 지속적으로 정리해야한다.
- 접근의 통제
- LLM을 사용할 수 있는 사람의 권한을 제한하는것이 좋다.
- 모델의 민감한 데이터에 접근을 하는 인원을 제한한다.
API
서로 다른 소프르웨어 시스템 간에 데이타와 기능을 주고 받을 수 있도록 하는 인터페이스를 뜻한다.
API를 통하여 두 프로그램이 서로 전송및 받기를 가능케 한다.
이를 API_KEY를 이용하여 Access를 제한할 수 있다.
기본 개념
- 클라이언트 - 서버 모델
- 클라이언트 가 서버에 데이터를 요청하게 되면, 서버는 해당하는 데이터를 찾아서 클라이언트에게 전송한다.
- HTTP/HTTPS 프로토콜
- HTTP와 HTTPS 를 통해서 요청과 응답이 이뤄진다.
- 위의 보안에서의 내용처럼, HTTP의 암호화 버전이 HTTPS이다.
- RESTful API
- 가장 흔한 API 방식으로 URL(엔드포인트) 와 HTTP 메소드 (GET, POST, PUT, DELETE 등)을 이용한다.
장점
- 유연성
- 원할 때 마다 요청을 보내서 결과를 받을 수 있다.
- 실시간으로 다양한 어플리케이션에서 적용 할 수 있다.[
- 확장성
- 다양한 서비스와 플랫폼의 통합이 가능하다.
- 동시에 사용 가능한 확장성을 지니고 있다.
- 업데이트
- API 제공자가 모델의 업데이트를 진행하면, 최신 기능을 바로 사용 할 수 있다.
- 비용 효율성
- API의 호출에 따른 비용이 청구가 됨으로, 직접 서버를 유지할 필요가 없어 사용한 만큼만의 비용이 청구된다.
흐름
LLM + Vector DB + LangChain 구축의 흐름
- 입력 데이터 필터링
- 텍스트 데이터를 벡터로 임베딩
- 생성된 벡터를 Vector DB에 저장
- 질문이 입력되면 임베딩을 진행
- 질문 벡터와 DB에서 유사한 벡터를 찾음
- 유사한 데이터를 LLM으로 전송하여 답변을 생성
- 이 과정을 LangChain을 이용하여 API 형태로 제공
Vector DB 와 RAG의 개념
LLM의 Vector DB와 RAG의 개념에 대해서 알아보자.
Vertor DB
Vector DB는 벡터 형태로 저장된 데이터들이 모여있는 집합이다.
일반적인 데이터베이스는 어떠한 입력에 대해서 정확하게 일치하는 데이터를 검색하지만,
Vector DB는 임베딩을 통한 벡터화로 인하여 연관성을 가지고 있기 때문에,
유사한 벡터 간의 검색을 지원 할 수 있다.
Vector (벡터)
텍스트 또는 이미지와 같은 비정형 데이터(구조가 없는 데이터)를 인베딩을 통해 벡터화 하여서 저장한다.
이때의 벡터는 데이터의 의미나 특징을 포함하고 있기 때문에, 위에서 이야기한 유사한 벡터간의 검색이
가능하도록 한다.
Faiss
벡터 검색 엔진이다. (Vector DB안의 기능이 아닌 Faiss또한 이 검색 엔진을 지원하는 Vector DB이다.)
대규모의 벡터에 대한 검색을 효율적으로 서포트 한다.
유사도를 검색하는데 높은 성능을 발휘한다.
빠른 속도와 확장성이 필요한 어플리케이션에서 많이 사용된다.
RAG
RAG는 LLM에서의 검색을 하는 방법같은 것이다.
Retrieval 단계
검색의 단계이다.
사용자의 질문을 벡터화 하여 Vector DB에 유사한 데이터를 서치한다.
벡터간의 유사도를 계산하여 관련 데이터를 찾아낸다.
Generation 단계
생서의 단계이다.
Retrieval 단계에서 검색된 데이터를 LLM으로 전달한다.
LLM에서는 전달받은 데이터를 통하여 최신 정보를 포함한 정확하고 자연스러운 답변을 제공한다.
실습
from sentence_transformers import SentenceTransformer
import numpy as np
# Multilingual-E5-large-instruct 모델 로드
model = SentenceTransformer('intfloat/multilingual-e5-large')
# 문장 리스트
sentences = [
"참새는 짹짹하고 웁니다.",
"LangChain과 Faiss를 활용한 예시입니다.",
"자연어 처리를 위한 임베딩 모델 사용법을 배워봅시다.",
"유사한 문장을 검색하는 방법을 살펴보겠습니다.",
"강좌를 수강하시는 수강생 여러분 감사합니다!"
]
# 문장들을 임베딩으로 변환
embeddings = model.encode(sentences)
# 임베딩 벡터 출력
print(embeddings.shape) # (4, 1024) - 4개의 문장이 1024 차원의 벡터로 변환됨
print(embeddings[0]) # sentence의 첫번째 문장의 임베딩을 보여준다
사실 이렇게 실습 코드로 보게되면 매우 심플하다는 것을 알 수 있다.
model을 불러오고, 문장을 설정한다.
model의 임베일 기능을 실행하면 끝이다.
텍스트 처리 기법과 임베딩 기법
텍스트 처리의 핵심 기법들과 임베딩 활용에 대해서 알아보자
텍스트 처리
LLM을 효율적으로 사용하려면 텍스트 처리가 기본적으로 되어 있어야 한다.
모델이 자연어를 이해하고 분석 하기 쉽게 돕는 첫 단계이다.
토큰화
Tokenization 이라고 한다.
텍스트를 단어 및 서브워드 단위로 분리를 하는 작업을 뜻한다.
텍스트를 숫자로 변환을 하기전에 실행을 하는 단계이다.
- 단어 단위 토큰화
- 나는 오늘 운동을 했다.
- >> [나는, 오늘, 운동을, 했다]
- 서브워드 토큰화
- 운동을
- >> [운동, 을]
정규화
Normalization 이라고 한다.
텍스트를 표준화된 형식으로 변환하는 작업을 뜻한다.
텍스트의 대소문자 또는 특수문자등을 일관되게 변환시킨다.
- 소문자 변환
- OpenAI
- >> openai
- 불필요한 기호 제거
- 안녕하세요!
- >> 안녕하세요
불용어 제거
Stopword Removal 이라고 한다.
자주 등장하는 단어이지만 정보가 없는 단어들을 의미한다.
'그리고', '이', '는' 과 같은 단어들을 뜻한다.
이를 통해서 중요한 단어에만 집중을 할 수 있도록 돕는다.
- 나는 운동을 했다
- >> [운동, 했다]
형태소 분석
Morphological Analysis 라고 한다.
각각의 단어를 문법적으로 분리를 하는 작업을 뜻한다.
조사나 어미와 같은 부분을 정확하게 분리를 하는것이 유용하다.
- 운동을 했다
- [운동(Noun), 을(Postposition), 했다(Verb)]
어간 추출과 표제어 추출
Stemming and Lemmatization 이라고 한다.
텍스트에서 동사나 형용사의 변형을 기본적인 형태로 되돌리는 작업을 뜻한다.
단어를 일관되게 처리를 할 수 있게 도와준다.
표제어 추출에서 변경된 단어는 불용어 제거를 통해 제거된다.
- 어간 추출
- Working, Worked
- >> Work
- 표제어 추출
- am, is, are
- >> be
문장 분리 및 길이 조정
텍스트를 처리할때 데이터의 길이가 길거나 복잡할경우, 이를 적절하게 나누는 것을 의미한다.
긴 문장을 처리할때 생기는 메모리의 제한이나 성능 저하를 방지하기 위함이다.
임베딩
임베딩은 텍스트 데이터를 벡터로 변환하는 과정을 뜻한다.
어떠한 모델이던지 학습하는 데이터의 값은 숫자값일수 밖에 없다.
이에 임베딩은, 데이터를 일반적인 숫자로 변경하는것 이상으로 의미와 유사성을 포함시키면서
변환을 가하여, 추후 검색에서 유사성의 비교로 효율적으로 검색이 가능하게 한다.
Bag of Words
단어의 빈도를 파악하여 그에 따른 벡터화를 하는 가장 단순한 방법이다.
순서와 맥락은 고려대상이 아니라 한계가 분명하지만, 간단한 문서분류 또는 텍스트의 분석에는
유용하게 사용된다.
- "나는 고양이를 좋아해요"
- "고양이는 귀여워요"
- "나는 강아지를 좋아해요"
3개의 단어를 통하여 예시를 들어보면,
문장 | 나는 | 고양이를 | 좋아해요 | 고양이는 | 귀여워요 | 강아지를 |
문장 1 | 1 | 1 | 1 | 0 | 0 | 0 |
문장 2 | 0 | 0 | 0 | 1 | 1 | 0 |
문장 3 | 1 | 0 | 1 | 0 | 0 | 1 |
이런 식으로 나타낼 수 있다.
TF-IDF
TF는 단어의 빈도를 나타내고, IDF는 전체 문서의 단어 빈도 반비례값을 뜻한다.
즉 특정 단어가 문서내에서 반복을 한다면 중요한 단어로 인식을 하여 중요도를 높인다는 의미다.
이렇게 문서내 중요한 단어를 의미있게 강조 할 수 있다.
Word2Vec, GloVe
단어 간의 의미적 유사성을 반영하는 임베딩의 기법이다.
Word2Vec은 주위 단어를 기반으로 단어의 의미를 학습한다.
GloVe은 전체 문맥을 기반으로 단어간의 공통된 패턴 을 학습한다.
https://mark-theater.tistory.com/126
Deep-Learning 용어정리 (NLP)
자연어 처리NLP 모델에 대해서 알아보자NLPNLP모델 은 컴퓨터가 인간의 언어를 이해하고 처리 할 수 있도록 하는것이다.즉 언어의 이해, 해석 및 생성등을 포함하는 기술을 포함한다. 워드 임베
mark-theater.tistory.com
이전의 정리한 글을 보면 좀더 쉽게 이해가 간다.
Transformer 기반
BERT는 양방향으로 학습을 시켜 앞부분의 소외를 최적화 하여 임베딩을 생성한다.
GPT는 자동 완성 및 생성에 강점을 둔 임베딩을 생성한다.
https://mark-theater.tistory.com/126#BERT-1
Deep-Learning 용어정리 (NLP)
자연어 처리NLP 모델에 대해서 알아보자NLPNLP모델 은 컴퓨터가 인간의 언어를 이해하고 처리 할 수 있도록 하는것이다.즉 언어의 이해, 해석 및 생성등을 포함하는 기술을 포함한다. 워드 임베
mark-theater.tistory.com
이의 추가적인 내용도 포함이 되어 있다.
끝
링크
https://github.com/K-MarkLee?tab=repositories
K-MarkLee - Overview
K-MarkLee has 21 repositories available. Follow their code on GitHub.
github.com
끝
'TIL and WIL > TIL' 카테고리의 다른 글
2024년 11월 14일 TIL (0) | 2024.11.14 |
---|---|
2024년 11월 13일 TIL (4) | 2024.11.13 |
2024년 11월 11일 TIL (3) | 2024.11.12 |
2024년 11월 10일 TIL (2) | 2024.11.10 |
2024년 11월 09일 TIL (1) | 2024.11.09 |