분류 전체보기 1288

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #6 임베딩을 위한 효과적 문장 분리 방법

임베딩을 위한 효과적 문장 분리 방법 조대협(http://bcho.tistory.com) 임베딩에서 알고리즘도 중요하지만 가장 중요한 것중 하나는 어떻게 문서를 파편으로 잘라낼것인가? (이를 영어로 Chunking이라고 한다.) 이다. 임베딩은 텍스트를 고정된 크기의 벡터로 변경하는 것이기 때문에, 긴 문단을 작은 벡터로 임베딩하게 되면 디테일한 의미를 잃어버릴 수 있고, 반대로 작은 문장으로 임베딩을 하면, 검색시 문장에 대한 정확도는 올라가겠지만, 문장이 짧아서 문장 자체가 가지고 있는 정보가 부족하게 된다. 그래서 적절한 Chunk 사이즈를 찾아내는 방법이 중요한데, 이를 Chunking strategy (문서 파편화 전략)이라고 한다. 이 글에서는 몇가지 대표적인 Chunking 방식과, 같이 활..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #5 ChatGPT에서 Pinecone 에 저장된 문서를 기반으로 답변하기

ChatGPT에서 Pinecone 에 저장된 문서를 기반으로 답변하기 조대협 (http://bcho.tistory.com) 지난 글에서 간단한 Pinecone의 사용방법에 대해서 알아보았다. 이번글에서는 텍스트를 임베딩하여 Pinecone에 저장하고, 이를 검색하는 방법에 대해서 소개한다. import pinecone import os import openai # Set your OpenAI API key openai.api_key = "{your API Key}" input_directory = "./golf_rule_paragraph" def extract_info_from_file(file_path): with open(file_path, 'r', encoding='utf-8') as file: #..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #4 텍스트 임베딩하기

OpenAI Embedding 모델을 이용하여 텍스트 임베딩 하기 조대협 (http://bcho.tistory.com) 앞의 글에서 Pinecone 데이터베이스를 이용하여 벡터 데이터를 어떻게 저장하는지 알아보았다. 그러면 텍스트나 이미지와 같은 데이터를 어떻게 벡터데이터로 변환하는 지를 알아보도록 하겠다. 이렇게 원본 데이터를 벡터로 변환하는 과정을 임베딩이라고 한다. 임베딩의 개념과 임베딩된 데이터에 대한 검색 방법은 https://bcho.tistory.com/1400 글을 참고하기 바란다. 데이터를 임베딩하는 방법은 간단하게 API를 사용하면 되는데, OpenAI의 경우 다양한 임베딩 API 를 제공한다. 1 세대 모델은 다음과 같다. 요즘은 “text-embedding-ada-002” 모델을 주..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #3 Pinecone 둘러보기

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #3 Pinecone 둘러보기 조대협 (http://bcho.tistory.com) Pinecone은 클라우드 매니지드 벡터 데이터 베이스로 구글,Azure,AWS 클라우드를 모두 지원한다. 여러가지 인스턴스 타입이 있으며, 최대 4천만 벡터까지 저장이 가능하다. 개발/테스트를 위한 프리티어가 있고 API키만 발급 받으면 손쉽게 사용할 수 있기 때문에, Langchain, ChatGPT와 함께 많이 사용되고 있다. 오늘은 Pinecone을 사용하는 방법에 대해서 알아보도록 한다. 먼저 pinecone.io 사이트에 접속해서 우측 상단의 Sign up 메뉴를 이용하여 회원 가입을 한후에, 사이트에 로그인한다. 로그인 후에 ..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #2 - 임베딩과 유사도 검색

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #2 - 임베딩과 유사도 검색 조대협 (http://bcho.tistory.com) 앞의 글에서 RAG가 어떻게 작동하는지에 대한 대략적인 개념에 대해서 살펴보았다. 이 글에서는 벡터데이터 베이스가 유사한 문서를 찾아내는 방법인 유사도 검색과, 텍스트등의 데이터를 이 벡터 공간으로 맵핑 시키는 임베딩의 개념에 대해서 알아보도록 한다. 임베딩의 개념 Pinecone 데이터베이스를 이해하기 위해서는 먼저 임베딩이라는 개념을 이해해야 한다. 텍스트를 그냥 데이터 베이스에 저장하는 것이 아니라, 벡터로 바꿔서 저장하는데, 단순하게 해시와 같은 방법으로 맵핑을 하는 것이 아니라 벡터 공간에 의미를 담은 상태로 변환하는 것을 임베딩..

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1 조대협 (http://bcho.tistory.com) RAG의 개념 Open AI의 ChatGPT나 Google의 PaLM 모델, 메타의 LLama 모델과 같은 LLM 모델은 학습 당시에 지식을 저장하여 뉴럴 네트워크 상에 그 지식을 담고 있다. 그래서 학습 당시까지의 지식을 기반으로한 질문에 대해서는 답변을할 수 있지만, 학습이 되지 않은 데이터나 또는 그 이후 나온 데이터에 대해서는 답변을 할 수 없는 제약을 가지고 있다. 또한 잘못된 정보를 학습하여, 잘못된 답을 내놓는 경우가 있을 수 있는데, 이를 Hallucination (환상)효과라고 한다. 이러한 두 문제를 해결하려면 최신의 데이터와 질문에 대한 답을 ..

VAE를 통해서 본 이미지 생성 모델의 원리

VAE를 통해서 본 이미지 생성 모델의 원리 조대협 (http://bcho.tistory.com) 요즘 Mid Journey 모델이나 DALLE-3 모델과 같은 이미지 생성 모델이 많이 소개되어, 어떤 원리로 이미지를 생성하는지 궁금하였다. GAN,Transformer등 여러가지 모델이 있지만 VAE (Variant Auto Encoder)모델을 이용하여 이미지를 변경하는 방법이 상대적으로 이해하기 쉬워서 VAE기반의 이미지 편집 원리를 정리하였다. 오토 인코더와 VAE에 대한 개념 설명 : (이 글을 읽기전에 AutoEncoder와 VAE에 대한 개념/원리는 아래 글을 참고하기를 권장한다.) 오토 인코더에 대한 개념 설명은 https://bcho.tistory.com/1197 오토 인코더 샘플 코드는 ..

생성형 AI ChatGPT/Bard LLM에서 프롬프팅을 이용한 공격/방어 방법

LLM 프롬프트 공격 방법 조대협(http://bcho.tistory.com) 일반적으로 LLM을 이용해서 애플리케이션을 개발할때 Lang Chain과 같은 프레임웍을 사용한 후에, 프롬프트 템플릿을 사용하여 제약이나 LLM의 역할등을 정의하고, 그 다음에 사용자에게 입력 받은 프롬프트를 삽입하여 전체 프롬프트를 만들어 낸다. 아래와 같은 구조가 되는데, {llm role}{llm mission} {context} {user prompt} {constraint} 예를 들면 다음과 같은 쇼핑몰 도움이 챗봇이라고 할때 다음과 같은 구조가 될 수 있다고 하자. {너는 쇼핑몰 상품 추천 쳇봇이다.} {너의 목표는 사용자의 입력을 받아서, 적절한 상품을 추천해주는 것이다.} : 여기서 LLM 모델은 쇼핑몰 쳇봇으..

주제와 관계 없는 질문을 막기 위한 DARE 프롬프팅 기법

주제와 관계 없는 질문을 막기 위한 DARE 프롬프팅 기법 조대협 (http://bcho.tistory.com) LLM모델을 기반으로 채팅 서비스등을 개발할때, 마주하는 문제중 하나가 사용자가 주제와 관련 없는 질문을 하는 경우 이를 어떻게 판별하고 필터링할 것인가이다. 예를 들어 LLM(ChatGPT등) API를 바로 연결해서 여행 사이트용 챗봇을 만들었다고 가정하자. 이때 사용자가 악의적으로 여행과 관련 없는 질문을 하더라도 LLM API로 전달된 질문은 답변이 되기 때문에 악용 될 수 있다. 예를 들어 아래 프롬프트는 챗봇에게 여행사이트 챗봇의 역할을 부여하고 컨택스트를 강제하여 주었지만 사용자가 미국 자동차 모델중 최고 모델을 질의하는 프롬프트인데, 여행 챗봇임에도 불구하고 이 질문에 대해서 답변..

LangChain에서 Vertex.AI LLM 사용하기

LangChain 에서 Vertex.AI LLM 사용하기 조대협 (http://bcho.tistory.com) 라이브러리 설치 !pip install 'google-cloud-aiplatform>=1.25.0' !pip install --user langchain 필요라이브러리로는 Google Cloud AI Platform SDK 1.25 버전 이상이 필요하며, Langchain 라이브러리를 같이 설치한다. 환경 설정 구글 클라우드에서 LLM API 를 호출하기 위해서는 API 인증 및 사용하는 프로젝트를 지정해야 한다. 여기서는 편의상 구글 클라우드 Vertex.ai workbench (매니지드 Jupyter 노트북)을 생성하면서 Service account를 먼저 생성해놓고, Vertex.AI를 호..