면접이 아주 처참하게 망했다.따라서 이 글은 면접에서 나왔던 질문들에 대한 셀프 피드백 되시겠다. 질문이 굉장히 많았고, 긴장해서 머리가 하얗게 되서 제대로 답변 못한 문제가 많다.내 입장에서도 정말 제대로 된 문제들이라고 생각해서 제대로 적어놓기로 했다.내가 면접 본 곳이 어딘지는 밝히지 않으니 보안 문제는 되지 않으리라 믿는다. Q. Okt, Kiwi, kkma 토크나이저의 작동 차이점은?그 중에서도 Okt가 가지는 특징은 무엇인가?A. Okt는 한국어 텍스트를 분리하고 품사 태깅을 수행한다.트위터와 같은 짧은 텍스트에서 잘 작동하도록 설계되었다.자주 사용되는 단어(명사, 형용사, 동사)를 잘 인식하지만 복잡한 문장 구조에서는 부정확할 수 있다. Kiwi 토크나이저는 사용자 정의 규칙을 추가할 수 있..
Events, Workflows, Jobs, Action, Runners의 개념이 존재. Github Actions은 어떤 이벤트가 발생했을 때 자동으로 수행하게 만들어준다.Eventson : pushmain 브랜치로 push하거나 이런 방식 WorkflowWork flow는 어떤 행동을 할지 결정한다.안에 어떤 다수의 Job을 넣을 수 있고, 이 Job은 Step을 가진다.Job : run unit tests Job 안에는 step이 있는데, npm test 같은 명령어나,action 등의 (다양한 명령어)를 사용할 수 있다. 사용하려면프로젝트 경로 안에 .github/workflows/workflow.yml 이런 식으로 만든다.yml 이름은 딴 것이어도 가능name : learning-github-a..
요즘은 완전히 GPU 전성시대이다. 돈이 있다고 해도 GPU를 살 수 있으려면 기간조차도 매우 많이 드는 게 현실이다.간단한 모델을 돌려보려고 해도, 클라우드 컴퓨팅은 세팅도 번거로울 뿐더러, 초심자가 접근하기에는 힘들다.코랩은 또 무료 버전은 시간제한이 있다. 한마디로 GPU 값은 매우 비싸다.그런데 여기, 미쳤다고 무려 16GB의 GPU를 일주일에 30시간이나 빌려주는 곳이 있다.그것도 공짜로. 그곳은 바로 데이터 사이언스인들의 성지. Kaggle이다. https://www.kaggle.com/ 필자는 이 kaggle에서 정말 다양하고 다양한 실험을 해왔다.파이썬 새로 깔아보기, 해당 도커 버전 바꿔보기, 오픈소스 버그 수정 등등.. 거의 살을 발라내고 사골까지 우려먹었다고 해도 과언이 아니다. 그..
https://www.arxiv.org/abs/2407.16833 RAG vs LC의 결과를 보여주는 논문이다. LC는 확실히 성능면에서는 뛰어나지만, Token 값이 비싸고, RAG는 LC에 비해 한참 성능이 떨어진다. 그래서 해당 논문은 둘을 합친 Self-Route라는 기법을 제시했다. 개념은 간단하다. RAG가 retriever를 통해 unaswerable이라는 결론을 내놓으면, LC로 가고, 아니면 그냥 End로 끝낸다.이걸 어떻게 구현하냐면, LangGraph로 구현하면 가능하다. 코드를 보기에 앞서서 그래프로 간략하게 구현해보면 다음과 같다.요지는 retriever를 다르게 쓰는 것이다. llm_answer로 바로 줄 수도 있지만, 그렇게 되면 Unanswerable이 지속적으로 나올 수 있..
지난 시간엔 LagnChain의 LangGraph를 만들어보았다. 이번에는 LangChain에서 Agent를 만들어보자. 예제 코드는 여기에서 볼 수 있다.Agent는 간단하다. 지난 시간에 배운 LangGraph에서 분기 노드를 자동으로 결정해주는 녀석이라고 보면 된다. Tool이라고 하는 각각의 함수들이 존재하고, 해당 Tool을 사용하면서 사용자의 답을 해결할 때까지 지속적으로 돌아간다.Web상의 정보도 찾을 수 있고, PDF에서의 정보도 찾을 수 있다. 다만 이 Tool을 질문 Query에 따라 자동으로 Agent가 결정하는 형식이다. Tools 정의하기from langchain_community.document_loaders import WebBaseLoaderfrom langchain_comm..
지난 포스팅에서 배웠던 LangGraph를 활용하여 기본적인 워크플로우를 제작한다. 이론은 간단하기에, 재정정보 AI 검색 알고리즘 경진대회에서 썼던 코드를 리팩토링하여 사용하였다. 자세한 코드는 이곳에서 볼 수 있다. DB 만들기일단 예제와 다르게 retriever와 DB가 들어 있는 FAISS를 만든다.왜냐하면 LangGraph의 시작은 결국 Retriever 부터 시작하기 때문에 그렇다. 그렇기에 DB는 일단 만들어져 있어야 한다. 대략적으로 요약하자면, pdf를 가져와서 청킹하고 임베딩 한다고 생각하면 된다.def process_pdfs_from_dataframe(df, base_directory): """딕셔너리에 pdf명을 키로해서 DB, retriever 저장""" pdf_data..