@@teddynote 아이고 아닙니다ㅎㅎ 영상 너무 잘 보고 있습니다! 아직은 이르겠지만, 저는 언젠가 많은 분들께서 ChatGPT 인터페이스를 떠나 개발, 커스터마이징 단계로 넘어갈것이라 반드시 생각합니다 :) (아니면 ChatGPT 인터페이스에 생기거나..!) 앞으로도 좋은 영상 많이 부탁드립니다!
아직은 개발자의 영역이라고 많이 생각하시는 것 같지만 조금씩조금씩 이쪽 지식에 대한 관심과 호기심(?) 을 가지시는 분들이 늘어나는 것 같습니다~^^ 앞으로 개발쪽도 관심있으신 분들이 많아져서 재미난 콘텐츠들이 많이 생겨났으면 좋겠네요~ 아직 해외 커뮤니티 대비 국내는 굉장히 작은 편이거든요 ㅠ 아무튼! 응원 감사합니다 앞으로 영상 보러 자주 놀러가겠습니다~감사합니다🙏
좋은 내용을 공유해 주셔서 정말 큰 도움이 되고 있습니다. 먼저 무한 감사를 드립니다. 질문이 있는데요 20:05 에서 설명하실때 VectorDB에 저장되는 문서 Embedding model = Query Embedding 과 동일한 모델이어야 한다. 고 하셔서 그렇게 이해 할때 Query Embedding은 llm model이 하게 될테니 예를 들어 open source model 인 aya:8b model을 llm으로 사용하고자 할때는 vectordb document embedding 도 aya:8b 로 맞추어서 embedding 을 해야 하는 것으로 이해하였습니다. 그렇게 하는게 논리적으로도 맞는것 같습니다. 그렇게 되면 사실 llm을 어떤것으로 사용할 것인지에 따라 embedding model이 동일한 것으로 fix 되어야 할것 같은데요 RAG 강의 들을 들어보면 query 에 사용할 llm model은 고정하고 embedding model만 이것 저것 바꾸는 경우들도 있는것 같더라구요 openai emedding list 도 text-embedding-3-small / text-embedding-3-large / text-embedding-ada-002 과 같이 llm model은 gpt-3.5 쓰더라도 embedding model은 여러개 중에 선택적으로 쓰는것 으로 보여서요 embedding model과 query할 llm model과 연관성이 어떻게 되는지 알려주실수 있으실까요?
네 모델은 크게 2가지 종류가 있습니다. 저희가 흔히 알고있는 GPT나 Claude, Llama 와 같은 모델과 임베딩 전용 모델입니다. 두개는 별개입니다. 모델은 GPT를 써도 되나 임베딩은 openai 사가 제공하는 임베딩 모델을 사용하지 않고 다른 모델을 사용하셔도 되고요. bge-m3 와 같은 로컬 모델을 사용하셔도 됩니다. LLM은 답변을 생성할 때 쓰이고요 임베딩 모델은 문서를 벡터화 하고+사용자의 질문을 임베딩 변환할 때 쓰입니다. 변환된 임베딩과 문서간의 유사도 계산을 위하여 사용합니다.
그럼 두 가지 추가 질문이 있는데요 1) RAG를 위해 관련 문서를 embedding -> vectorDB 저장 2) user query 를 embedding -> vectorDB에서 유사도가 높은 chunk를 획득 3) user query + 2)에서 찾은 높은 유사도의 문서 이 두가지가 llm 으로 입력 질문 1 : 'embedding model 이 동일해야 한다' 는 것은 1), 2) 의 embedding model 이 같아야 하며 llm과는 무관한 것으로 이해하면 될까요? 질문 2 : 3) 단계에서는 embedding이 관여하지 않고 plain text 로 llm으로 입력되어 처리후 답변되는 것으로 이해하면 될까요? (DB는 embedding값과 souce text를 모두 가지고 있음)
아이쿠... 후원 감사합니다😭 공유가 도움이 되셨다니 제가 더 감사합니다 :) context reorder 는 여유가 되신다면 꼭 시도해 보셨으면 좋겠습니다. (retrieval 하는 k 계수 설정이 어떻게 되었는지는 모르겠지만) 저의 경우는 chunk size를 작게 가져갈 때 k계수는 늘리고, 늘어난 k계수 만큼 retrieval 되는 문서 조각이 많아 지는데 이럴때 context reorder 를 적용해서 결과 받으면 좋은 결과로 이어진 경험이 있어 꼭 시도해 보는 편입니다. agent 사용하면 말씀하신 것처럼 원하는 방식으로 행하기 힘들다는 점에 100% 공감합니다. 그래서 정교한 처리를 할 때는 아직 agent 보다는 파이프라인 직접 짜는 것을 선호하는 편이구요.
끝으로, 지금의 방식과 / context reorder 적용한 방식과 결과를 일단 비교해 보시고, 가능성이 보이면 좀 더 튜닝해서 나중에 앙상블을 해서 최적의 결과가 나올때까지 한 번 더 튜닝해 보시는 것도 하나의 방법일 수 있습니다. 딱 떨어지는 정답이 없어 참 답답할 때도 있지만, 만약에 테스트 해보시고 좋은 결과로 이어졌다면 공유 한 번 해주십쇼~!!🙏🙏
퍄 늘 잘 보고있습니다. 리트리버랑 벡터스토어 관련 부분은 상당히 유익했습니다. 뭐가 더 좋고 나쁘고를 따지기 참 애매하더라구요,,, 개인프로젝트로 진행중이라 이것저것 엄청 손대볼려고 노력중인데 늘 상당히 도움이 많이됩니다! 요즘 랭그래프도 좋은 아키텍쳐들이 많이 나오고 있던데, 시간나시면 요부분도 개발후기 같은 것도 괜찮으시다면 한 번 공유해주시면 너무 좋을 것 같네요😊😊 늘 잘보고 있습니다! 감사합니다!
좋은 말씀 남겨 주셔서 감사합니다. LangGraph 출시 된지 얼마되지 않아서 저도 아직은 적용해 본적은 없지만 Cycle 이 매력적이라 앞으로 기회가 되면 적극 사용해 보려고 합니다. 좋은 인사이트가 있다면 꼭 영상으로 만들어서 공유 드리겠습니다! 늘 감사드립니다🙏🙏
완벽한 설명 감사드립니다! 추가로 궁금한 부분이 있습니다. 데이터(PDF)를 로드하여 벡터 DB로 저장할 때 활용한 임베딩 모델(ex. OpenAI Embedding)과 사용자 질의를 벡터로 변환할 때 활용하는 임베딩 모델은 동일하며, 이후 ChromaDB나 FAISS의 semantic serach를 통해 DB 내에서 유사한 벡터를 찾아내서 프롬프트에 넣어준다 라고 이해하면 될까요?
선생님 프로젝트중에 좋은 영상 잘보고 있습니다. 궁금한것이 하나 있어서요. 제가 술 추천 챗봇을 만들어보고 있는데요. 데이터를 엑셀로 저장했습니다. 술이름, 도수, 단맛, 신맛, 쓴맛 참이슬, 16.5, 2, 0, 4 이런식의 데이터 구조인데요. '단맛이 2이고 신맛은 0인 술을 찾아줘' 이 질문에 대한 답을 하지 못하는데 이는 어떤 loader를 사용해야 될지, 혹시 아이디어가 있으신가요? 단맛이 2인 술을 찾아줘 -> 참이슬 참이슬을 정보를 알려줘 -> 도수 16.5 단맛 2 신맛 0, 쓴맛 4 입니다. 는 대답이 잘되는데 두개이상의 데이터를 역으로 찾아내는 것은 성능이 떨어집니다.ㅠ
엑셀 형태의 데이터는 좀 가공을 해서 넣어 보시는 것이 아무래도 좋습니다. 정형데이터는 숫자로만 채워져있기 때문에요 llm 이 이해하기 쉬운 언어로 변환해 주시는 작업이 중요합니다. 행별로 변환해서 넣을 수도 있고요. 묶음으로 처리할 수도 있는데요. 지난 라이브때 AutoRAG 팀도 이에 대한 언급을 해주셨어요~ 한 번 영상 참고해 보시면 도움이 되실 것 같습니다^^
안녕하세요, 영상 잘보고 있습니다~ 관련 자료보고 랭체인 한국어 튜토리얼 보면서 따라 하고 있는데, UnstructuredPDFLoader을 사용시 partially initialized module 'charset_normalizer' has no attribute 'md__mypyc' (most likely due to a circular import)이러한 에러가 발생합니다. 혹시 실행하시다가 같은 에러가 발생하셨을까요? 발생했다면 어떻게 처리 하셨는지 궁금합니다~ (stackoverflow에 나온대로 처리 해봤지만 되지 않네요 ㅜㅜ)
@@jymoon-z1t 저는 pdfplumber 로 하고 있습니다 unstructered loader 도 객체에 대한 좌표를 제공하고 있어서 처리할 수 있습니다^^ 저는 특정 페이지까지는 아니고 문서별로 전처리 로직을 다르게 적용하여 좀 더 정보를 잘 가져오도록 처리하고 있습니다~
안녕하세요. 영상 너무 잘 봤습니다! 궁금한 게 있습니다. retriever에서 앙상블 모델을 사용하려고 하는데요, doc list를 직접 임베딩해 사용하는 방식으로 이해했는데 이미 db에 저장해둔 임베딩을 대상으로 bm25와 faiss를 융합한 검색은 어떻게 할 수 있나요? db에 임베딩 저장 -> 쿼리가 들어오면 BM25 + FAISS로 DB에서 문서 서치 하는 방법이 궁금합니다
DB에 BM25와 / dense embedding 한 도큐먼트를 저장합니다. faiss 와 같은 DB 는 아쉽게도 bm25(sparse retriever) 는 지원하지 않습니다. 별도의 DB 공간이 필요합니다. >> 각각의 검색기(retriever)를 초기화 하여 앙상블 하실 수 있습니다! (키워드 검색이 필요한 문서) -> sparse DB (유사 의미 검색이 필요한 문서) -> dense DB 이렇게 관리하는 것도 전략 중에 하나입니다~! 도움이 되셨으면 좋겠습니다! 감사합니다.
안녕하세요? 덕분에 많은 도움을 받았습니다. 그리고 한가지 궁금한 것이 있습니다. PDF LOADER를 통해 메타데이터를 잘 불러 왔습니다. 그런데 답변을 생성할 때는 어떠한 방법을 써도 메타데이터 정보를 넣을 수가 없습니다. 청크의 첫 번째 어절을 문서의 제목으로 반환하는 현상이 계속 나타나는데요, 어떻게 해결을 하면 좋을까요?
일단 로더로 불어온 메타정보를 문서를 임베딩하여 DB에 넣을 때 메타정보를 같이 저장해야 합니다. (처음에 별도 저장이 잘 안된다면 문서의 내용에 포함하는 방법으로 우선 적용 해보세요) 나중에 쿼리가 들어와 메타정보로 필터링 하기 위해서는 별도의 메터정보 필터링 처리가 필요합니다. 이는 여러 방식으로 구현할 수 있어요. 이 부분은 랭체인 영문 튜토리얼 페이지에 검색해 보시면 예제들이 나와있어서 한 번 찾아보시는 것을 추천 드립니다~!
00:00 인트로
01:03 RAG 프로세스
03:16 문서 전처리 단계
05:36 Document Loader
07:18 Document Loader 선택 시 고려사항
10:07 PDF Loader(1) fitz
11:27 PDF Loader(2) PyPDFLoader
11:58 PDF Loader(3) UnstructuredPDFLoader
13:16 PDF Loader(4) PDFPlumber ☆
14:11 Text Splitter (소제목 중요)
15:02 Text Splitter(1) CharacterTextSplitter
15:59 Text Splitter(2) RecursiveCharacterTextSplitter ☆
17:08 Text Splitter(3) TokenTextSplitter
18:05 Text Splitter(4) 오픈소스 토크나이저
18:48 Text Splitter(5) SemanticChunker ☆
19:35 Embedding
21:18 Embedding(1) OpenAIEmbedding ☆ (유료)
23:47 Embedding(2) CacheBackedEmbeddings ☆
25:30 Embedding(3) MTEB (허깅페이스)
26:50 Embedding 정리 오픈소스 vs OpenAI
27:48 VectorStore
28:58 Semantic Search
29:19 VectorStore(1) Faiss
29:51 전처리의 소중한 경험 공유 🎉
30:34 페이지 단위 분할
32:29 필요한 영역 Croping
33:05 문서의 다양한 형태 (열 분할)
34:45 표 추출
35:37 Chunk Overlap
36:22 이미지 추출 (fitz)
36:50 Retriever
37:01 Retriever(1) Multi-Query Retriever
38:18 Retriever(2) Ensemble Retriver ☆
39:33 Retriever(3) Long Context Reorder
40:50 Retriever(4) 그밖에...
41:11 Prompt Engineering
42:05 문서 요약 프롬프트
44:01 마무리
최고네요 감사합니다🙏🙏
정말 RAG 설명의 끝판왕입니다. 어렵고 힘들게 습득하신 경험과 지식을 공유해주셔서 감사드립니다. 복받으실겁니다^^
스타 꾹 누르고 다른 발표도 신청하겠습니다.
좋은 말씀 해주셔서 더 감사드립니다👍🙏🙏 앞으로도 더 많이 연구해서 질좋은 자료 만들겠습니다!!
함께 해주신 분들 너무 감사합니다. 이렇게 재미난 기능이 있는 줄 몰랐네요🎉 또 다뤘으면 하는 주제가 있다면 댓글 남겨 주세요~ 즐거운 밤 되세요🙏👍
기획잡니다. 덕분에 진짜 하나도모르는거 조금이나마 알게됩니다. 감사합니다.
아이쿠 슈퍼챗 😭 감사합니다. 앞으로도 좋은 콘텐츠 많이 만들겠습니다! 응원의 말씀 감사드려요🙏
자료보고 놀랬는데 설명도 너무 잘하시는 것 같아요. 목소리도 좋으십니다. 공유해주셔서 감사합니다!
극찬 너무 감사합니다!! 아직 부족한 점도 많고 갈길도 멀지만 하나씩 같이 배워나가 보시죠!!👍👍
기다리던 강의가 올라왔네요. 감사합니다.
👍👍 오래기다리셨습니다~!!
지금까지 봤던 RAG 관련 내용 중 최고에요!!! 감동적입니다
감사합니다! 더 열심히 하겠습니다!
노하우와 팁을 아낌없이 공유해 주셔서 감사합니다.
앞으로도 더 쥐어짜내 보겠습니다👍👍
정말 궁금한거 다 설명 진심감사해요
시청해 주셔서 감사합니다🙏🙏
감사합니다 너무너무 감사합니다 열심히 학습해보겠습니다!
너무너무너무 감사합니당🙏🙏
와 고민과 시행착오가 많이 녹아있는 강의라는 생각이 들었습니다. 리스펙입니다
좋은 말씀 남겨주셔서 정말 감사합니다🙏🙏
제가 본 RAG 영상 중에서 가장 깔끔하고 유익했던것 같습니다. 공유해주셔서 감사합니다!! :)
유명하신 분께서 댓글도 남겨주시고 좋은 말씀 감사합니다🙏 저도 알렉스님의 유익한 영상 시청하고 있습니다 좋은 영상과 팁 공유해 주셔서 감사합니다🫡
@@teddynote 아이고 아닙니다ㅎㅎ 영상 너무 잘 보고 있습니다! 아직은 이르겠지만, 저는 언젠가 많은 분들께서 ChatGPT 인터페이스를 떠나 개발, 커스터마이징 단계로 넘어갈것이라 반드시 생각합니다 :) (아니면 ChatGPT 인터페이스에 생기거나..!)
앞으로도 좋은 영상 많이 부탁드립니다!
아직은 개발자의 영역이라고 많이 생각하시는 것 같지만 조금씩조금씩 이쪽 지식에 대한 관심과 호기심(?) 을 가지시는 분들이 늘어나는 것 같습니다~^^ 앞으로 개발쪽도 관심있으신 분들이 많아져서 재미난 콘텐츠들이 많이 생겨났으면 좋겠네요~ 아직 해외 커뮤니티 대비 국내는 굉장히 작은 편이거든요 ㅠ 아무튼! 응원 감사합니다 앞으로 영상 보러 자주 놀러가겠습니다~감사합니다🙏
도움이 많이되네요 감사드립니다!!
도움이 되셨다니 다행입니다 감사합니다👍👍
감사합니다.
아이코오... 후원을 ㅠㅠ 감사합니다🙏🙏 맛있는거 사먹을께요~!
감사합니다. 👍👍👍👍👍
저도 감사드립니다🙏🙏🙏🙏🙏
정말 노우하우 공유 감사드립니다~^^
감사합니다 ~^^👍👍
좋은 내용 감사합니다!
감사합니다🙏🙏🙏
쵝오^^
감쏴합니다👍🙏
최고에요!
감사합니디🙏🙏
최고입니다!! 문과생인 저도 한번에 이해!! 귀한 경험 공유 감사합니다
감사합니다🙏
좋은 내용😊😊입니다❤
감사합니다😊
와 정말 감사합니다.
감사합니다!!
너무 감사합니다😀
감사합니다🙏
소중한 지식공유 감사합니다 많이 배웠습니다!
감사합니다🙏🙏
유익한 강의 정말 잘 들었습니다! 감사합니다.
감사합니다 다음에는 더 좋은 영상 만들겠습니다🤤
좋은 강의 잘 들었습니다. 감사합니다.
시청해 주셔서 감사합니다 😊😊
와 너무 감사합니다, 귀에 쏙쏙들어오네요
감사합니다👍
너무 재미있고, 유익했던 영상이었습니다. 감사합니다!
재미있게 봐주셔서 감사합니다!
감사합니다❤
감사합니다🙏🙏
도움 많이 받습니다!!
아이쿠 대표님 감사합니다🙏
감사합니다!!
감사합니다🤤🙏
설명을 잘해주셔서 이해하는데 많은 도움이 되었습니다. 감사합니다.
영상이 길었는데요 시청해 주셔서 감사해요! 앞으로도 도움이 되는 영상 만들 수 있도록 최선을 다하겠습니다 좋은 말씀 남겨주셔서 감사해요🙏🙏
너무 좋은 강의에요! 감사합니다!
감사합니다~🙌🙌
좋은영상 감사합니다
감사합니다^^
감사드립니다!
감사합니당🙏🙏
많은 도움이 되었습니다. 감사합니다.
감사합니다~^^
테디형 목소리 넘 좋아요
고정🙌🙌🙌
아.. 나도 얼른 훌륭해져서 테디노트님 같이 좋은 일 많이해야지ㅠ 정말 감사합니다. 근래에 들은 강의중 넘사 젤 귀한 강의입니다. 넘 감동이네요ㅠ 정말 필요했어요.
정말 과찬이십니다! 좋은 말씀 남겨주셔서 정말 힘이 많이 납니다. 앞으로도 도움이 되는 콘텐츠 많이 만들겠습니다. 감사합니다!!
좋은 내용을 공유해 주셔서 정말 큰 도움이 되고 있습니다. 먼저 무한 감사를 드립니다.
질문이 있는데요
20:05 에서 설명하실때 VectorDB에 저장되는 문서 Embedding model = Query Embedding 과 동일한 모델이어야 한다.
고 하셔서 그렇게 이해 할때 Query Embedding은 llm model이 하게 될테니
예를 들어 open source model 인 aya:8b model을 llm으로 사용하고자 할때는 vectordb document embedding 도 aya:8b 로 맞추어서 embedding 을 해야 하는 것으로 이해하였습니다.
그렇게 하는게 논리적으로도 맞는것 같습니다.
그렇게 되면 사실 llm을 어떤것으로 사용할 것인지에 따라 embedding model이 동일한 것으로 fix 되어야 할것 같은데요
RAG 강의 들을 들어보면 query 에 사용할 llm model은 고정하고 embedding model만 이것 저것 바꾸는 경우들도 있는것 같더라구요
openai emedding list 도 text-embedding-3-small / text-embedding-3-large / text-embedding-ada-002 과 같이 llm model은 gpt-3.5 쓰더라도 embedding model은 여러개 중에 선택적으로 쓰는것 으로 보여서요
embedding model과 query할 llm model과 연관성이 어떻게 되는지 알려주실수 있으실까요?
네 모델은 크게 2가지 종류가 있습니다.
저희가 흔히 알고있는 GPT나 Claude, Llama 와 같은 모델과 임베딩 전용 모델입니다. 두개는 별개입니다.
모델은 GPT를 써도 되나 임베딩은 openai 사가 제공하는 임베딩 모델을 사용하지 않고 다른 모델을 사용하셔도 되고요. bge-m3 와 같은 로컬 모델을 사용하셔도 됩니다.
LLM은 답변을 생성할 때 쓰이고요
임베딩 모델은 문서를 벡터화 하고+사용자의 질문을 임베딩 변환할 때 쓰입니다.
변환된 임베딩과 문서간의 유사도 계산을 위하여 사용합니다.
@@teddynote 그렇군요 많이 바쁘실텐데 답장 올려주셔서 진심으로 감사드립니다. bbbbb
그럼 두 가지 추가 질문이 있는데요
1) RAG를 위해 관련 문서를 embedding -> vectorDB 저장
2) user query 를 embedding -> vectorDB에서 유사도가 높은 chunk를 획득
3) user query + 2)에서 찾은 높은 유사도의 문서 이 두가지가 llm 으로 입력
질문 1 : 'embedding model 이 동일해야 한다' 는 것은 1), 2) 의 embedding model 이 같아야 하며 llm과는 무관한 것으로 이해하면 될까요?
질문 2 : 3) 단계에서는 embedding이 관여하지 않고 plain text 로 llm으로 입력되어 처리후 답변되는 것으로 이해하면 될까요? (DB는 embedding값과 souce text를 모두 가지고 있음)
@@원조할머니통닭 질문1) 네 맞습니다 모든 임베딩이 사용되는 곳에 동일한 모델을 사용합니다
질문2) 모델로 입력될 때 수치 변환은 여전히 필요하며(텍스트 입력x) 이때 임베딩 모델을 사용하는 것이 아닌 모델마다 가지고 있는 토크나이저를 통해 수치변환하여 입력 됩니다.
@@teddynote와~~~~이제 완전히 clear 해졌습니다. 짱짱!! 감사드립니다.
감사합니다
감사합니다🫡
귀.....귀.....귀하다...... 감사합니다.
감사합니다~^^
정말 감사합니다
감사합니다~!!
아직도 전통적 방식으로 일하는 장치산업(정유업)에는 너무나 혜안을 주는 강의라고 생각됩니다…!!!항상 감사합니다!
늘 응원해 주셔서 감사합니다 👍👍👍
최근 랭체인을 활용해서 어플리케이션 개발중인데 도움이 많이되었습니다. 노하우 공유까지 정말로 감사합니다! 혹시 context reorder의 체감성능은 어떠셨나요? 저는 에이전트를 활용하는 방식을 사용하고있는데, 기본 agent executor는 사실 컨텍스트 재정렬을 원하는 방식으로 행하기 힘들더라구요. 성능차이가 심하다면 executor를 커스텀하는것도 고려중입니다.
아이쿠... 후원 감사합니다😭
공유가 도움이 되셨다니 제가 더 감사합니다 :)
context reorder 는 여유가 되신다면 꼭 시도해 보셨으면 좋겠습니다. (retrieval 하는 k 계수 설정이 어떻게 되었는지는 모르겠지만) 저의 경우는 chunk size를 작게 가져갈 때 k계수는 늘리고, 늘어난 k계수 만큼 retrieval 되는 문서 조각이 많아 지는데 이럴때 context reorder 를 적용해서 결과 받으면 좋은 결과로 이어진 경험이 있어 꼭 시도해 보는 편입니다.
agent 사용하면 말씀하신 것처럼 원하는 방식으로 행하기 힘들다는 점에 100% 공감합니다.
그래서 정교한 처리를 할 때는 아직 agent 보다는 파이프라인 직접 짜는 것을 선호하는 편이구요.
데이터마다 사실 결과가 많이 다르고 프롬프트 엔지니어링에 따라 또 차이가 심하다보니 context reorder 때문에 좋아진 건지 프롬프트 엔지니어링 때문에 좋아진건지 정확하게 판가름하기 어려운 때도 있었습니다
끝으로, 지금의 방식과 / context reorder 적용한 방식과 결과를 일단 비교해 보시고, 가능성이 보이면 좀 더 튜닝해서 나중에 앙상블을 해서 최적의 결과가 나올때까지 한 번 더 튜닝해 보시는 것도 하나의 방법일 수 있습니다.
딱 떨어지는 정답이 없어 참 답답할 때도 있지만, 만약에 테스트 해보시고 좋은 결과로 이어졌다면 공유 한 번 해주십쇼~!!🙏🙏
와아 오늘 테디노트 님 영상을 알고리즘의 축복으로 처음 알게 되었습니다 ..!! 올해 제가 한 일 중에 가장 잘한 일이 테디노트님 영상 알게 된 일이 아닐까 싶어요 ㅎㅎ 감사합니다 ~~ 많이 배우고 갑니다 ~~~
이제야 오셨군요🙌 좋은 말씀 남겨주셔서 감사합니다~ 행복한 하루 되시고 궁금하신 점 댓글 남겨주세요 감사합니다👍
이런 자료 감사합니다...
감사합니다 😊
좋은 영상 감사합니다! IT 종사자지만 LLM에 대한 마음의 장벽이 있었는데, 테디 님 덕분에 점차 허물어져 가고 있습니다 ㅎㅎ 복 받으실 거예요 >.
좋은 말씀 남겨 주셔서 감사합니다👍👍
본인 경험을 이렇게까지 공유해주시다니!
👍👍 조금이나마 도움이 되었으면 합니다! 감사합니다^^
퍄 늘 잘 보고있습니다.
리트리버랑 벡터스토어 관련 부분은 상당히 유익했습니다. 뭐가 더 좋고 나쁘고를 따지기 참 애매하더라구요,,,
개인프로젝트로 진행중이라 이것저것 엄청 손대볼려고 노력중인데 늘 상당히 도움이 많이됩니다!
요즘 랭그래프도 좋은 아키텍쳐들이 많이 나오고 있던데, 시간나시면 요부분도 개발후기 같은 것도 괜찮으시다면 한 번 공유해주시면 너무 좋을 것 같네요😊😊
늘 잘보고 있습니다! 감사합니다!
좋은 말씀 남겨 주셔서 감사합니다. LangGraph 출시 된지 얼마되지 않아서 저도 아직은 적용해 본적은 없지만 Cycle 이 매력적이라 앞으로 기회가 되면 적극 사용해 보려고 합니다. 좋은 인사이트가 있다면 꼭 영상으로 만들어서 공유 드리겠습니다! 늘 감사드립니다🙏🙏
선생님 감사합니다! 한국 기업들도 적극적으로 인공지능을 사용하는 날이 오길..
점점점 더 많이 늘어날 것 같습니다!! 접근성이 더 좋아지는 것 같아요~!
완벽한 설명 감사드립니다! 추가로 궁금한 부분이 있습니다. 데이터(PDF)를 로드하여 벡터 DB로 저장할 때 활용한 임베딩 모델(ex. OpenAI Embedding)과 사용자 질의를 벡터로 변환할 때 활용하는 임베딩 모델은 동일하며, 이후 ChromaDB나 FAISS의 semantic serach를 통해 DB 내에서 유사한 벡터를 찾아내서 프롬프트에 넣어준다 라고 이해하면 될까요?
정확합니다. 유사도 검색 알고리즘은 다양한 알고리즘 사용 가능하구요. 커스텀한 알고리즘 사용도 가능해요!!
안녕하십니까 영상 잘봤습니다.
실제 규정이나 공지사항 pdf 안에는 테이블 형식으로 작성한 경우가 상당히 많은데 이 경우에는 어떤 Document Loader를 추천하시나요?
저는 pdfplumber 로 테이블을 가져와서 후처리 하는 방법을 선호합니다~ 한 번 시도해 보시는 것을 추천 드려요~
선생님 프로젝트중에 좋은 영상 잘보고 있습니다. 궁금한것이 하나 있어서요.
제가 술 추천 챗봇을 만들어보고 있는데요. 데이터를 엑셀로 저장했습니다.
술이름, 도수, 단맛, 신맛, 쓴맛
참이슬, 16.5, 2, 0, 4
이런식의 데이터 구조인데요. '단맛이 2이고 신맛은 0인 술을 찾아줘'
이 질문에 대한 답을 하지 못하는데 이는 어떤 loader를 사용해야 될지,
혹시 아이디어가 있으신가요?
단맛이 2인 술을 찾아줘 -> 참이슬
참이슬을 정보를 알려줘 -> 도수 16.5 단맛 2 신맛 0, 쓴맛 4 입니다.
는 대답이 잘되는데 두개이상의 데이터를 역으로 찾아내는 것은 성능이 떨어집니다.ㅠ
엑셀 형태의 데이터는 좀 가공을 해서 넣어 보시는 것이 아무래도 좋습니다.
정형데이터는 숫자로만 채워져있기 때문에요 llm 이 이해하기 쉬운 언어로 변환해 주시는 작업이 중요합니다.
행별로 변환해서 넣을 수도 있고요. 묶음으로 처리할 수도 있는데요.
지난 라이브때 AutoRAG 팀도 이에 대한 언급을 해주셨어요~ 한 번 영상 참고해 보시면 도움이 되실 것 같습니다^^
안녕하세요, 영상 잘보고 있습니다~ 관련 자료보고 랭체인 한국어 튜토리얼 보면서 따라 하고 있는데, UnstructuredPDFLoader을 사용시 partially initialized module 'charset_normalizer' has no attribute 'md__mypyc' (most likely due to a circular import)이러한 에러가 발생합니다. 혹시 실행하시다가 같은 에러가 발생하셨을까요? 발생했다면 어떻게 처리 하셨는지 궁금합니다~ (stackoverflow에 나온대로 처리 해봤지만 되지 않네요 ㅜㅜ)
처음에 에러 났다가 pip 설치하고 에러 해결 됐습니다~^^
명령어:
# # Install package
%pip install --upgrade --quiet "unstructured[all-docs]"
vector store 관련 상세한 내용도 만들어주실꺼죠?
미리 감사드립니다.^^
추가적으로 crop시 bbox를 통해 안에 있는 내용만 가져오려고 하는데 문서에 따라 bbox의 수치를 자동으로 가져오는 방법이 있을까요?
vectorstore 도 괜찮은 놈들 골라서 한 번 다뤄보겠습니다^^
bbox 자동으로 해주는 놈은 제가 아는 바로는 없지만 llamaparser 로 텍스트 인식해 오는 놈은 있고요. 저는 직접 구현해서 사용하고 있어요 객체 좌표들로 계산하고 있어요~
@@teddynote 객체좌표가 메타로 제공되는게 UnstructuredPDFLoader인거 같은데 해당 로더를 사용하시는지요? 문서의 특정페이지에서만 불필요한 내용을 제거해야할때는 유저의 컨트롤이 필요할것 같은데 혹시 이런경험을 없으셨을까요?🙏
@@jymoon-z1t 저는 pdfplumber 로 하고 있습니다 unstructered loader 도 객체에 대한 좌표를 제공하고 있어서 처리할 수 있습니다^^
저는 특정 페이지까지는 아니고 문서별로 전처리 로직을 다르게 적용하여 좀 더 정보를 잘 가져오도록 처리하고 있습니다~
@@teddynote 퀄리티 높은 영상과 답변 정말 감사드립니다. 멤버십 가입하고 갑니다. 정말 실제로 뵙게되면 밥이라도 사드리고 싶습니다.ㅎㅎ
@@jymoon-z1t 아이쿠 멤버십 가입도 감사드리고요. 오프라인 세미나 열게 되면 한 번 오프라인에서 뵙죠~^^
안녕하세요. 영상 너무 잘 봤습니다! 궁금한 게 있습니다. retriever에서 앙상블 모델을 사용하려고 하는데요, doc list를 직접 임베딩해 사용하는 방식으로 이해했는데 이미 db에 저장해둔 임베딩을 대상으로 bm25와 faiss를 융합한 검색은 어떻게 할 수 있나요? db에 임베딩 저장 -> 쿼리가 들어오면 BM25 + FAISS로 DB에서 문서 서치 하는 방법이 궁금합니다
DB에 BM25와 / dense embedding 한 도큐먼트를 저장합니다. faiss 와 같은 DB 는 아쉽게도 bm25(sparse retriever) 는 지원하지 않습니다. 별도의 DB 공간이 필요합니다.
>> 각각의 검색기(retriever)를 초기화 하여 앙상블 하실 수 있습니다!
(키워드 검색이 필요한 문서) -> sparse DB
(유사 의미 검색이 필요한 문서) -> dense DB
이렇게 관리하는 것도 전략 중에 하나입니다~! 도움이 되셨으면 좋겠습니다! 감사합니다.
정성스러운 노하우 공유 정말 감사드립니다 😊
귀한 영상 너무 감사드립니다. 혹시 로컬 서버용 embedding model 한글 잘 되는거 추천해주실만한 후보들이 있을까요?;; 생각보다 성능이 안나와서 막막한 중입니다 ㅠㅠ
bge-m3 잘쓰고 있습니다. 전달 드리는 링크에 벤치마크 있으니 참고해 보세요^^
github.com/Atipico1/Kor-IR
안녕하세요? 덕분에 많은 도움을 받았습니다. 그리고 한가지 궁금한 것이 있습니다. PDF LOADER를 통해 메타데이터를 잘 불러 왔습니다. 그런데 답변을 생성할 때는 어떠한 방법을 써도 메타데이터 정보를 넣을 수가 없습니다. 청크의 첫 번째 어절을 문서의 제목으로 반환하는 현상이 계속 나타나는데요, 어떻게 해결을 하면 좋을까요?
일단 로더로 불어온 메타정보를 문서를 임베딩하여 DB에 넣을 때 메타정보를 같이 저장해야 합니다. (처음에 별도 저장이 잘 안된다면 문서의 내용에 포함하는 방법으로 우선 적용 해보세요)
나중에 쿼리가 들어와 메타정보로 필터링 하기 위해서는 별도의 메터정보 필터링 처리가 필요합니다. 이는 여러 방식으로 구현할 수 있어요. 이 부분은 랭체인 영문 튜토리얼 페이지에 검색해 보시면 예제들이 나와있어서 한 번 찾아보시는 것을 추천 드립니다~!
멀티 쿼리 리트리버 사용하는데, 질문이 늘어남에 따라 context가 커지는데 무료 LLM 중 SLM은 한계가 있어보이는데, 어떤 의견이신가요?
무료 모델이 과거에는 한계가 있었습니다. 그런데, 최근 공개된 모델(llama3.1) 을 보면 context length 가 128K 입니다. 그래서 어느 정도 과거의 context length 가 짧았던 문제가 조금은 해소되고 있는 모습입니다~
자바스크립트 버젼도 있나요?!
네 있습니다~
임베딩이 끝난 문서들을 chromadb 에 저장하고 나서 다시 한번 추가된 문서를 임베딩해서 원래 chromadb에 추가로 저장을 하는 방법이 있나요?? 업데이트 되는 문서를 처음부터 다시 임베딩하고 저장하기에는 시간이 오래걸려서..
여기 참고하시면 됩니다!!
stackoverflow.com/questions/76650513/dynamically-add-more-embedding-of-new-document-in-chroma-db-langchain
감사합니다.
좋은 영상 감사합니다
감사합니다🙏