전체 글 41

[LLM] LangChain이란?

LLM에 대해 공부하다 보면 LangChain이라는 단어를 자주 접하게 된다. LangChain이 과연 무엇일까? 이번 포스팅에서 한 번 다뤄보려고 한다.     0. LLM우선 LLM은 Large Language Model의 약자로, 대규모 언어 모델이라는 뜻이다. 널리 사용되는 OpenAI의 GPT(ChatGPT), Meta의 LLaMA, Google의 Gemini 등이 있다. 텍스트로 지시를 하면 해당하는 내용을 텍스트로 생성하여 반환한다.  이렇게 적절한 결과를 반환하기 위해서 모델은 상당한 양의 데이터를 보유해야 한다. 이것이 모델에 "대규모(Large)"라는 단어가 붙는 이유이다.     1. LangChain?LLM에 대한 내용은 이쯤에서 넘어가고, 그렇다면 LangChain은 도대체 뭘까?..

스터디/ML, DL 2025.01.27

[NetworkX] 그래프 저장하고 불러오기

참고 : NetworkX : GML 파이썬 파일을 실행할 때마다 그래프를 그리지 않아도 되는 경우들이 있다.이런 경우, 그래프를 한 번 그려 저장하고 저장된 그래프를 불러오는 것이 효율적이다. 이번 포스트에서는 그린 그래프를 저장하고 다른 파일에서 불러오는 방법을 다뤄보자. 그래프는 json, gml 등 여러 포맷으로 저장할 수 있지만 나는 단순히 그래프를 파이썬 파일에 다시 불러올 용도로 저장하는 것이기 때문에 GML 포맷으로 저장했다.   먼저 그래프를 그려준다.# graph.pyimport networkx as nxdef drawGraph(data): # 그래프 그리는 부분 생략...G = nx.Graph()drawGraph()  하위에 다음과 같은 코드를 작성한 후 파일을 실행해 그래프를 저장한다..

스터디/Python 2022.07.07

데이터 수집 (웹 크롤링) (3) - 경기 세부 데이터

크롤링을 진행하는 방법은 크롤링(1) 포스트와 크롤링(2) 포스트에서 자세히 다루었다. 크롤링(2) 포스트의 마지막에서 얘기했듯이 이번 포스트에서는 두 번째 크롤링에서 수집한 데이터를 이용해서 세 번째 크롤링을 수행하려고 한다. (1) 수집할 태그 찾기 이번에는 아래의 웹 페이지에서 데이터를 모을 예정이다. url을 보면 "https://m.sports.naver.com/game/20211016018F2/record" 의 형태로, 공통부분 뒤의 '경기날짜(20211016)+018(리그 고유번호이다. 18번째 리그라는 뜻)+F(여자부)+경기번호' 가 경기마다 바뀌는 내용이다. 바로 이것 때문에 이전 포스트에서 데이터를 수집할 때 가공된 새 날짜와 경기 번호 데이터를 저장한 것이다. 한 경기에서의 세부 기록..

데이터 수집 (웹 크롤링) (2) - 경기 데이터

예측 모델을 만들어보려고 하는데 기존에 모았던 데이터로는 모델을 만들기에 적합하지 않다고 판단했다. 그래서 경기 관련 데이터를 추가로 수집했는데 이번 포스트에서는 그 내용을 담아보려고 한다. 자세한 크롤링 방법은 이전 포스트를 참고하면 된다. (1) 수집할 데이터 담은 태그 찾기 저번과 같은 방식으로 크롤링을 할 것이기 때문에 먼저 url과 태그를 살펴보도록 하겠다. 크롤링을 수행할 페이지는 다음과 같다. KOVO 공식 홈페이지의 경기 결과 페이지이다. 페이지를 살펴보면 경기 날짜, 경기 번호(순번), 경기를 치른 두 팀, 경기 결과, 경기가 진행된 라운드(정규리그는 총 6라운드로 구성된다.)의 데이터를 볼 수 있다. url은 "https://www.kovo.co.kr/game/v-league/(생략)s..

[다람쥐 창고] 기능 세부 설명

저번 포스트에 작성했다시피 취미 물품 공유 서비스를 구현하기 위해서는 다양한 기능이 필요하다. 이번 포스트에서는 기획 단계에서 간단하게 얘기했던 서비스의 실제 이용 과정을 담아보았다. 먼저, 앱에 접속하면 스플래시 화면을 거쳐 회원가입/로그인 화면을 띄운다. 회원이 아니라면 회원가입을 하고 회원이라면 로그인을 한 후 본격적으로 서비스를 시작할 수 있다. 가장 처음 보이는 화면은 메인페이지로 최신 업데이트 물품과 추천 물품, 추천 카테고리를 볼 수 있다. 메인페이지에서는 사진을 위주로 보여주고 더보기 버튼을 눌러 해당 물품들을 목록으로 볼 수 있다. 또한 검색을 하거나 지도 창을 열어 주변 물품을 볼 수 있으며 글쓰기 창, 채팅 목록, 마이페이지, 더보기 창으로 이동할 수 있다. 글쓰기 창에서는 카메라나 ..

[다람쥐 창고] 프로젝트 기획

졸업 프로젝트로 진행했던 다람쥐 창고 프로젝트에 관한 내용을 기록으로 남겨두려고 한다. 어떤 의도로 기획하게 되었는지, 어떤 단계로 프로젝트가 진행되었는지가 주 내용이 될 것 같다. (1) 기획 의도 프로젝트 주제를 두고 아이디어 회의를 하다가 P2P 공유 서비스를 기획해보자는 의견이 나왔고 이를 발전시켜서 취미 물품을 지역 기반으로 공유하는 플랫폼을 고안하게 되었다. 여러 취미 활동들 중에 별다른 도구가 필요하지 않은 경우도 있지만 대부분의 경우에는 취미를 위한 도구들이 필요하다. 하지만 어떤 취미를 시작하기 위해 모든 도구를 갖추고 시작하기란 쉽지 않기 때문에 이를 지역 주민들끼리 공유하도록 하는 것이다. 프로젝트 이름은 집 한켠에 잠들어있는 취미 물품을 다람쥐가 겨울을 위해 저장해뒀다가 잊어버린 식..

[ML] 로지스틱 회귀

로지스틱 회귀는 이름은 회귀이지만 분류 모델이다. 선형 회귀와 마찬가지로 선형 방정식을 학습한다. z = a*x1 + b*x2 + c*x3 + d*x4 + e*x5 + f 와 같은 형태이다. 이 때 방정식의 a,b,c,d,e는 가중치 혹은 계수이고 x1~5는 특성이다. 다중 회귀와 비슷한 형태이다. z의 값은 어떤 값이든 가능하지만 확률로 나타내기 위해서는 0~1 사이 값이 되어야 한다. z의 값을 0~1 사이의 값으로 변환하기 위해서는 변환 함수가 필요하다. 일반적으로는 시그모이드 함수를 많이 쓴다. 아주 큰 음수일 때 0이 되고 아주 큰 양수일 때 1이 되도록 한다. 아래 그림처럼 S형 곡선의 형태를 띄게 된다. 함수 식은 자연 상수 e의 -z제곱에 +1을 한 다음 역수를 취한다. 로지스틱 회귀로 이..

스터디/ML, DL 2022.03.19

데이터 분석 프레임워크 - AARRR (해적지표)

AARRR 기법은 그로스 해킹(Growth Hacking) 의 분석 기법이다. 그로스 해킹은 기업의 성장을 최우선으로 하며, 사용자의 데이터를 분석해 서비스를 개선하는 데에 활용하기 때문에 이런 이름이 붙게 되었다. 다섯 단어의 앞 글자를 땄으며 각각 Acquisition(획득), Activation(활동), Retention(재방문), Referral(공유), Revenue(수익) 이다. 사용자가 서비스를 활용하면서 수집되는 여러 데이터 중 위 다섯가지의 지표를 핵심으로 서비스의 성장에 활용한다. 다섯 개의 지표를 순차적으로 분석하는 것이 아니라 함께 분석해야 한다. (1) Acquisition 획득 단계에서는 소비자가 서비스를 어떻게 알게 되었는지, 어떤 경로로 유입되었는지 등을 분석한다. DAU, ..

[ML] 회귀 알고리즘 : 선형 회귀 (2) - 다중 회귀

선형 회귀는 하나의 특성을 이용한 회귀 방법이다. 하지만 일반적으로 특성은 여러 개이다. 이럴 때 사용할 수 있는 방법이 바로 다중 회귀이다. 특성이 하나인 선형 회귀에서는 모델이 직선을 학습하지만 2개의 특성을 가진다면 모델은 평면을 학습한다. 방정식을 보면 쉽게 와닿는데 '타겟 = a*특성1 + b*특성2 + 절편' 의 평면 방정식을 가지기 때문이다. 이처럼 특성이 많을 때 고차원을 표현할 수 있는 선형 회귀는 복잡한 모델을 학습시킬 수 있다. 특성들이 여러 개 존재할 때 특성 그대로를 사용해도 좋지만 특성끼리 곱하는 등 새로운 특성을 만들 수도 있다. 사이킷런에서는 기존 특성으로부터 새로운 특성을 만드는 쉬운 도구를 제공한다. 사이킷런의 특성을 만들고 전처리하는 다양한 클래스를 변환기라고 하고 이는..

스터디/ML, DL 2022.03.14

데이터 전처리 - 결측값 처리

지난 포스트에서는 크롤링으로 수집한 데이터를 통해 선수의 공격과 수비 지표로 쓸 수 있는 공격 성공률, 리시브 효율, 세트당 서브/세트/블로킹/디그 수 등을 구했다. 하지만 공격 지표 중에는 공격 성공률 뿐 아니라 공격이 얼만큼의 효과를 냈는지 보는 '공격 효율' 또한 중요하다. 공격 효율은 (공격 성공-공격 범실)/공격 시도 로 구한다. 그러나 크롤링 당시 전체 범실 개수만 저장하고 공격에서의 범실은 저장하지 않아서 추가로 공격 범실 데이터가 필요했다. ( 데이터 새로 얻는 과정은 생략 ) 새롭게 얻은 데이터이다. 이제 기존에 작성했던 코드 중 공격 효율(at_rate)을 계산하는 부분을 추가한다. 공격 성공률, 공격 효율, 리시브 효율은 모두 백분율이므로 이전에 전처리 할 때 놓쳤던 백분율 변환 부분..