RAG의 한계에서 출발RAG는 질문과 벡터가 "직접 비슷한" 문서만 찾는다. 그런데 실제 질문은 종종 여러 단계를 거쳐야 답이 나오는 경우가 있다.e.g) "해외배송 상품을 환불하면 위약금은 얼마인가?먼저 "해외배송 상품의 환불 정책이 무엇인지"를 찾고그다음 "그 환불 정책이 참조하는 위약금 산정 조항"을 찾아야 한다이 두 조각이 임베딩 공간에서 서로 가깝지 않을 수 있다. "위약금 산정 조항"이라는 텍스트는 "해외배송 환불 정책"이라는 텍스트와 단어도 다르고 문맥도 다를 수 있다. 벡터 검색만으로는 이런 "간접적으로 연결된" 정보를 놓치기 쉽다.GraphRAG는 문서 조각들 사이의 명시적인 관계(어떤 조항이 어떤 조항을 참조하는지, 어떤 정책이 어떤 정책을 인용하는지)를 그래프로 미리 저장해두고, 검색..
1.RAG?검색(Retrieval): 질문과 관련된 문서 조각을 데이터베이스에서 먼저 찾아온다증강(Augumented): 찾아온 문서 조각을 LLM 프롬프트에 근거로 추가(증강)한다생성(Generation): LLM이 그 근거를 바탕으로 답변을 생성한다문제 상황LLM은 학습 시점까지의 데이터만 알고 있다. 회사 내부 정책 문서, 최신 이용약관, 특정 서비스의 세부 매뉴얼처럼 모델이 애초에 본 적 없는 정보는 답변에 반영할 수 없다. 예를 들어 쇼핑몰 CS 챗봇이 "이번에 바뀐 해외배송 환불 규정"을 답변에 반영하려면, 그 규정 문서를 어떻게든 모델에게 전달해야 한다. 이걸 해결하는 가장 직관적인 방법은 "필요한 정보를 프롬프트에 직접 넣어주는 것"인데, 문서 전체를 매번 통째로 넣으면 비용이 크고 비효율..
1. 임베딩과의 관계 임베딩은 숫자로 끝나고, LLM은 다음 단어를 계속 만들어낸다. 임베딩은 "텍스트→벡터" 변환만 하고 끝남LLM은 같은 트랜스포머 계열 구조를 쓰지만 벡터에서 다시 텍스트를 생성한다.둘 다 "문맥을 이해한다"는 점은 같은데, 출력 형태가 다른 것. [ML] 벡터 임베딩(Vector Embedding) - 의미를 벡터로cf) TF-IDF [ML] TF-IDF(Term Frequency-Inverse Document Frequency)1. TF-IDF?정의단어의 빈도(TF)와 역문서빈도(IDF)를 곱해서, 문서 내 각 단어의 "중요도"를 가중치로 매기는 방법단순히 "몇 번 나왔는가"만 세는 빈blog.chaenii.me2. 트랜스포머트랜스포머의 핵심은 어텐션(attention) 메커니즘..
cf) TF-IDF [ML] TF-IDF(Term Frequency-Inverse Document Frequency)1. TF-IDF?정의단어의 빈도(TF)와 역문서빈도(IDF)를 곱해서, 문서 내 각 단어의 "중요도"를 가중치로 매기는 방법단순히 "몇 번 나왔는가"만 세는 빈도수 카운트(Bag of Words)의 한계를 보완쓰임문서 간blog.chaenii.meTF-IDF도 텍스트를 벡터로 바꾼다. 그런데 TF-IDF는 순수하게 "단어가 몇 번 등장했는가"라는 통계에 기반한다."강아지"와 "개"는 글자가 다르니 전혀 다른 차원으로 취급 → 의미가 같다는 것을 전혀 모른다.임베딩(embedding): 신경망이 대량의 텍스트를 학습 → "이 단어가 어떤 맥락에서 쓰이는가" 함께 학습"강아지"와 "개"는 비..
General - 일반적인 단축키 Window Mac 설명 Alt + #[0-9] ⌘0...⌘9 각 단축키에 해당하는 도구창 열기 Ctrl + S ⌘S 모두 저장 Ctrl + Alt + Y ⌘⌥Y IntelliJ가 파일 시스템에서 최신 변경 사항을 처리하도록 강제 일반적으로 변경 내용은 자동으로 처리되므로 작업은 아무 작업도 수행하지 않음 Ctrl + Shift + F12 ⌘⇧F12 편집기(Editor) 영역을 최대로 크기로 토글 Alt + Shift + I ⌥⇧I 현재 프로필 기준으로 현재 파일 검사 Ctrl + ` ⌃` 인텔리제이 테마 변경 Ctrl + Alt + S ⌘ , 설정창(Settings) 열기 Ctrl + Alt + Shift + S ⌘ ; 프로젝트 구조창(프로젝트 구조 확인 및 변경) 열..
1. 웹스크래핑(Web Scraping)이란? 우리는 웹 페이지에서 많은 정보를 얻는다. 이 정보들을 추출, 정리할 필요성을 느낄 때가 있는데, 이를 스크래핑이라고 한다. 즉, 웹 페이지의 정보를 가져오고(크롤링;Crawling), 데이터들을 추출(스크래핑;Scraping)해 DB에 저장하고 사용하는 것을 이야기한다. 2. Python으로 웹 크롤링하기 2-1. 준비하기 기본적으로 웹 크롤링은 HTML로 작성된 문서를 긁어서 가져오는 일이기 때문에, 파이썬에서 그 정보를 가져오도록 요청해야 한다. 따라서 Requests 라이브러리로 요청하고, BeautifulSoup 라이브러리로 필요한 정보만 추출할 것이다. requests 라이브러리 설치 나는 venv 가상환경을 사용하기 때문에 간단하게 VSCode ..
Node.js 삭제하기 제어판 > 프로그램 > 프로그램 제거 (또는 Win+R > appwiz.cpl) 설치된 Node.js 버전을 찾아 선택하고 제거 NVM 삭제하기 파일 탐색기에서 C:\Users\\AppData\Roaming\nvm 폴더를 찾아 삭제 Win+R > cmd > control sysdm.cpl,,3 입력 > 환경변수 > NVM_HOME 및 NVM_SYMLINK 변수를 삭제 관련 폴더 삭제하기 C:\Program Files\nodejs 폴더 삭제 C:\Users\\AppData\Roaming\npm 폴더 삭제 Win+R > regedit > HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 경로에서 nvm 관련 항목을 찾아 삭제
기본 개념Spring Web MVC 패턴Spring Web MVC는 Model-View-Controller(MVC) 패턴을 기반으로 한다.Model: 애플리케이션의 데이터와 비즈니스 로직 담당View: 사용자 인터페이스 담당. (JSP, Thymeleaf 등의 템플릿 엔진)Controller: 사용자 요청을 처리, 모델-뷰 연결 -> Dispatcher Servlet이 컨트롤러 호출Dispatcher Servlet이 때 Dispatcher Servlet은 Spring Web MVC 프레임워크의 핵심 구성 요소로서, 클라이언트의 모든 요청을 받아 적절한 컨트롤러(핸들러)를 찾아 전달하는 역할을 한다.이렇게 컨트롤러 구현을 단순화할 수 있으며, 비즈니스 로직에 집중하고 HTTP 요청 및 응답 처리 등에 대..
결제 api인 아임포트(iamport)가 포트원으로 이름을 바꿨다! 아무튼 나는 이걸 사용해서 결제를 구현했다.결제 기능을 구현하기 전에, 당연히 장바구니/주문 기능부터 구현해야 한다. 주문 -> 결제가 이루어지기까지 전체 과정을 먼저 설계했다. 엔티티 엔티티 설계 아래는 우리 프로젝트 전" data-og-host="chaeyami.tistory.com" data-og-source-url="https://chaeyami.tistory.com/252" data-og-url="https://chaeyami.tistory.com/252" data-og-image="https://blog.kakaocdn.net/dna/bIIzI7/hyVSZiOV2D/AAAAAAAAAAAAAAAAAAAAAPMLBXDIspLptGx8_i4LAiR58jZvTHVysYeOCrrVjk_r/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1785509999&allow_ip=&allow_referer=&signature=6M5X6%2BQ3sl87mwjgJO3Tfpz7S2E%3D
관리자 페이지에서 판매할 상품을 등록한다. 엔티티와 함께 등록 로직도 다 구현했으니 이제 사진을 업로드 해야 한다. 우선 구조를 생각해보자. 사진은 서버에 저장되어야 하며, 경로를 DB에 저장해야 한다. -> MultipartFile 사용 : Spring의 파일 업로드 인터페이스 한 상품 객체에 여러 사진 경로가 저장될 수 있어야 한다. -> 상품 엔티티에 사진 경로 리스트 필드 리스트 필드는 OneToMany로 구현해야 한다. -> 썸네일 엔티티가 별개로 필요하다. 정리하면 이미지 업로드는 사진을 저장할 엔티티(테이블)을 만든다. MultipartFile 인터페이스로 구현한다. 상품과 썸네일은 일대다 (1:N) 관계 엔티티 설정 ProductThumbnail 엔티티 생성 사진을 저장할 엔티티를 생성한다..