llm모델과 vectordb를 생성하는 retrevial모델이 다른경우, 어떻게 작동하는지 궁금합니다.
안녕하세요, 수업을 잘 듣고 사용하고 있는 기업 연구원입니다.
llm모델과 retrevial모델이 다른 경우 벡터값이 다를텐데, 어떻게 작동하는지 모르겠어서 질문드립니다.
자세한 내용은 아래와 같습니다.
Retrevial모델로는 mpnet을 사용합니다.
model_name = "sentence-transformers/all-mpnet-base-v2"
model_kwargs = {"device": "cuda:0"}
embeddings = HuggingFaceEmbeddings(model_name=model_name,
model_kwargs=model_kwargs
)이러한 임베딩 모델을 선언한 뒤에, chroma로 vectordb를 만들었다고 가정하고,
llm틀은 llama2를 사용하여 쿼리 파이프라인을 만들었습니다.
retriever = vectordb.as_retriever()
query_pipeline = transformers.pipeline(
"text-generation",
model=model, # 모델id: 'meta-llama/Llama-2-7b-chat-hf'로 함 (생략됨)
tokenizer=tokenizer,
torch_dtype=torch.float16,
device_map= device,
)
llm = HuggingFacePipeline(pipeline=query_pipeline)
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
verbose=True
)이런식으로 해서 사용을 해도 사용이 잘 되는 것을 확인했습니다만 이해가 안됩니다.
제가 '쿼리'를 보내면, llama2 모델이 벡터화를 할 것이고,
벡터db에서 찾을때는 "sentence-transformers/all-mpnet-base-v2"이 모델로 벡터화 된 데이터를 찾을 것인데 이 두 벡터 값이 다를 것 같은데 왜 작동이 되는 건가요?
제 생각으로는 두개의 다른 모델이라면 같은 문장이어도 다른 벡터값을 가질텐데, 어떻게 이게 두개의 언어모델이 다른데 작동하는건지 궁금합니다.
답변 기다리겠습니다. 감사합니다:) 좋은 교육 받을 수 있어서 기쁩니다.
답변 1
1
안녕하세요~. 반갑습니다.
먼저 교육이 도움이 되셨다니 기쁘네요^^.
RetrievalQA 클래스를 사용하시게 되면 다음의 과정을 거쳐서 최종 답변을 만들어내게됩니다.
Retriever를 통해서 VectorDB에서 가장 유사한 Context 문장을 찾음
1에서 찾은 Context 문장을 포함한 Prompt를 구성해서 LLM에게 전달할 최종 Prompt 완성
최종 완성된 Prompt를 이용해서 LLM이 해당 Prompt에 대한 답변 생성
말씀해주신 상황은 위 과정에서 1번 과정에서 sentence-transformers/all-mpnet-base-v2 모델이 query에 기반해서 가장 유사한 context 문장을 찾고, 해당 context 문장을 토대로 최종 prompt 를 구성한뒤 해당 prompt에 기반해서 3번 과정에서 llama2이 답변을 해주게됩니다.
따라서 1번과 3번 과정은 독립적으로 이루어지기 때문에 2개의 다른 모델을 사용해도 문제가 없습니다.
정확히 system prompt로 아래와 같은 문장을 사용하고 (1번과정에서 {context} 부분에 replace 될 문장을 찾는 것입니다.)
system_template = """Use the following pieces of context to answer the user's question.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
----------------
{context}"""human prompt로 아래와 같은 문장이 사용됩니다.
"{question}"
LangChain GitHub에서 아래 코드 부분들을 참조하세요.
좋은 하루되세요.
감사합니다.
혹시 로컬llm을 활용해서 RAG를 구현하는 예제도 한번 올려주시면 안될까요?
0
965
2
검증 방법 질문입니다.
0
151
2
with_structured_output 함수
0
796
1
Quickstart 오류 - Query Analysis Quickstart 기초 예제 실습
0
257
2
docStore
0
137
0
langchain.schema가 무슨 역할을 하는지요?
0
492
2
라마 3(Llama 3)로 AI 텍스트 번역하기 실행 오류.
0
979
2
SQL 에이전트 제작 예제 프로그램과 관련하여 질문 드립니다.
0
207
2
하이퍼클로바 X 랭체인
0
391
2
ConversationSummaryBufferMemory의 max_token_limit
0
320
2
SelfQueryRetriever 사용시
0
311
2
!pip install langchain_community 문장이 필요할 것같아요(강의 2,4)
0
1262
2
memory+ Retriever +llm 질문있습니다.
0
228
1
self query retriever 한글
0
453
2
selfqueryRetriever에서 contain,like 필터링 오류문제
1
336
2
상품추천GPT에서 데이터를 바꿔 사용하는데 오류나는 이슈
1
254
2
Rag 사용시 전혀 관계없는 데이터를 가져오는 이슈
0
1293
2
bert vs gpt 의 혼란스러운 점
0
566
2
chromadb 용량
0
556
2
RAG에서 Generator으로 어떤 데이터가 들어가는지 볼 수 있는 방법이 있나요?
0
407
1
RAG 실습 강의에서 template 문구 관련해 질문이 있습니다.
0
445
2
RAG의 데이터 소스로 RDB 사용 시 어떤 로더를 사용해야 하나요?
0
2326
2
db.delete_collection() db가 정의되어 있지 않아 문의드립니다.
0
178
1
GPT api 토큰 제한
0
1739
1





