우선적으로 실습에 앞서 해야할 일
- PDF 파일을 다운로드
- Langchain의 PyPDFLoader로 PDF 파일을 읽어서 페이지 별로 저장.
- 예를 들어 368페이지의 PDF 파일이라면 368개의 문서를 얻게 된다.
- 368개의 문서들은 길이가 제각각입니다. 특정 길이(여기서는 2000)로 제한하고 더 잘라준다.
- 총 378개의 문서가 나오게 됩니다. 378개의 문서를 전부 임베딩(Embedding)하여 벡터 데이터베이스에 적재한다.
- 벡터 데이터베이스는 Chroma 또는 Faiss를 사용함
- 질문을 입력하면 378개의 문서 중 가장 유사도가 높은 문서 4개를 출력
필요한 패키지 다운로드
- 랭체인, 벡터 데이터베이스, 임베딩 모델, PDF 파일을 읽는 도구
!pip install langchain langchain_openai chromadb transformers sentence-transformers pypdf langchain-community
|
랭체인을 이용한 PDF 로드 및 페이지 별 분할
import urllib.request
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.document_loaders import PyPDFLoader
from langchain.embeddings import HuggingFaceEmbeddings
|
실습에서는 경제 금융용어 700선 PDF를 다운로드 하여 사용하였습니다.
# !wget -O "2020_경제금융용어 700선_게시.pdf" "https://www.bok.or.kr/portal/cmmn/file/fileDown.do?menuNo=200765&atchFileId=KO_00000000000142606&fileSn=1"
urllib.request.urlretrieve("https://github.com/chatgpt-kr/openai-api-tutorial/raw/main/ch07/2020_%EA%B2%BD%EC%A0%9C%EA%B8%88%EC%9C%B5%EC%9A%A9%EC%96%B4%20700%EC%84%A0_%EA%B2%8C%EC%8B%9C.pdf", filename="2020_경제금융용어 700선_게시.pdf")
|
PDF 페이지 로드
- PDF를 Langchain의 PyPDFLoader로 로드하고 분할합니다. 해당 PDF는 참고로 366페이지입니다.
따라서 문서를 읽고 분할하면 총 366개의 문서가 나옵니다.
## pdf 파일로드 하고 쪼개기
loader = PyPDFLoader('/content/2020_경제금융용어 700선_게시.pdf')
pages = loader.load_and_split()
print(len(pages))
|
366
첫번째 문서를 출력해봅시다. 랭체인으로 로드한 데이터의 형식은 다음을 따릅니다.
Document(metadata={'source': 파일명, 'page': 페이지 번호}, page_content='내용')
pages[0]
|
Document(metadata={'producer': 'Smart PDF Imposition 1.0', 'creator': 'Smart PDF Imposition 1.0', 'creationdate': 'January 31, 2018 16:21', 'author': 'INSUNG DATA INC.', 'creationdate--text': 'January 31, 2018 16:21', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'total_pages': 371, 'page': 3, 'page_label': '4'}, page_content='iii\n찾아보기\n한국은행은 국민들이 경제 및 금융에 대한 이해도를 높이고 경제에 관한 합리적인 \n의사결정 능력을 키울 수 있도록 현장 경제교육, 온라인 경제교육, 경제교육 콘텐츠 \n개발 등 대국민 경제교육을 다양하게 수행해 오고 있습니다 . \n이의 일환으로 2018년 \n 경제금융용어 700선\n 을 발간하였는데 그간 동 책자에 대한 \n수요가 꾸준히 늘어남에 따라 이번에 추가로 발간하게 되었습니다 .\n지난번 내용과 같이 통화정책, 실물경제, 금융안정, 지급결제 등 한국은행 주요 \n업무를 이해하는데 필요한 전문 용어와 경제·금융 흐름을 이해하는데 도움이 되는 \n시사 경제금융 용어들을 수록하였습니다. 용어해설은 개념과 도입 배경, 의미, 적용 \n사례 등을 담아 쉽게 이해할 수 있도록 하였습니다. 또한 e-book으로도 제작하여 \n독자들의 편의성과 가독성을 높였습니다 . \n코로나 19로 이전에 경험하지 못한 경제위기를 겪으면서 경제·금융 현상에 대한 \n일반인들의 관심도가 이전에 비해 높아졌습니다. 아무쪼록 이 책자가 한국은행의 주요 \n정책과 국내외 경제를 이해하는 데 조금이나마 도움이 되기를 바라겠습니다. 끝으로 \n경제금융용어 700선\n 집필에 참여해주신 경제교육실 교수님들과 용어 집필에 좋은 \n의견을 주신 관련부서 여러분께 감사드립니다 .\n2020년 8월\n한국은행 경제교육실장 박 철 원\n머 리 말')
청킹(Chunking) : 문서 분할
366개의 문서는 길이가 제각각입니다. 길이 2000 기준으로 추가적으로 더 쪼개준다.
366개의 문서 중 어떤 문서가 길이가 2000이 넘는다면 이 문서는 두 개로 다시 잘라서 2000이 넘지 않도록 한다는 것이다.
추가적으로 문서들을 길이 별로 자르는 것은 Langchain 의 RecursiveCharacterTextSplitter를 통해서 가능하다.
이 과정에서 문서는 378개가 되어진다.
## chunk로 쪼개기
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=0)
splited_docs = text_splitter.split_documents(pages)
print(len(splited_docs))
|
378
이제 문서는 378개가 되었을 것이다.
print('378개의 문서 중 첫번째 문서:', splited_docs[0])
|
378개의 문서 중 첫번째 문서: page_content='iii 찾아보기 한국은행은 국민들이 경제 및 금융에 대한 이해도를 높이고 경제에 관한 합리적인 의사결정 능력을 키울 수 있도록 현장 경제교육, 온라인 경제교육, 경제교육 콘텐츠 개발 등 대국민 경제교육을 다양하게 수행해 오고 있습니다 . 이의 일환으로 2018년 경제금융용어 700선 을 발간하였는데 그간 동 책자에 대한 수요가 꾸준히 늘어남에 따라 이번에 추가로 발간하게 되었습니다 . 지난번 내용과 같이 통화정책, 실물경제, 금융안정, 지급결제 등 한국은행 주요 업무를 이해하는데 필요한 전문 용어와 경제·금융 흐름을 이해하는데 도움이 되는 시사 경제금융 용어들을 수록하였습니다. 용어해설은 개념과 도입 배경, 의미, 적용 사례 등을 담아 쉽게 이해할 수 있도록 하였습니다. 또한 e-book으로도 제작하여 독자들의 편의성과 가독성을 높였습니다 . 코로나 19로 이전에 경험하지 못한 경제위기를 겪으면서 경제·금융 현상에 대한 일반인들의 관심도가 이전에 비해 높아졌습니다. 아무쪼록 이 책자가 한국은행의 주요 정책과 국내외 경제를 이해하는 데 조금이나마 도움이 되기를 바라겠습니다. 끝으로 경제금융용어 700선 집필에 참여해주신 경제교육실 교수님들과 용어 집필에 좋은 의견을 주신 관련부서 여러분께 감사드립니다 . 2020년 8월 한국은행 경제교육실장 박 철 원 머 리 말' metadata={'producer': 'Smart PDF Imposition 1.0', 'creator': 'Smart PDF Imposition 1.0', 'creationdate': 'January 31, 2018 16:21', 'author': 'INSUNG DATA INC.', 'creationdate--text': 'January 31, 2018 16:21', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'total_pages': 371, 'page': 3, 'page_label': '4'}
실제로 길이를 재보면 2000이 넘지 않는 것을 확인할 수 있다.
print('첫번째 문서의 길이:', len(splited_docs[0].page_content))
|
첫번째 문서의 길이: 676
378개의 문서를 임베딩해야 한다.
한글이 가능한 공개되어져 있는 오픈소스를 임베딩으로 사용해보겠다.
임베딩 모델 위치: https://huggingface.co/BAAI/bge-m3
model_huggingface = HuggingFaceEmbeddings(model_name='BAAI/bge-m3')
|
크로마(Chroma)
아래는 Langchain 에서 Chroma를 이용해서 벡터 DB 사용 시에 가장 간단한 사용법이다.
# Chroma 를 통해 벡터 저장소 생성. OpenAIEmbeddings()를 사용하거나 HuggingFaceEmbeddings()를 사용하면 된다. chroma_db = Chroma.from_documents(splited_docs, HuggingFaceEmbeddings()) # 유사도 검색(쿼리) similar_docs = chroma_db.similarity_search("사용자의 질문") |
실제로 실행해보면 아래와 같다.
## Chroma 기반 pdf(docs 벡터화)
db = Chroma.from_documents(splited_docs, model_huggingface)
print('문서의 수:', db._collection.count())
|
문서의 수: 378
378개의 문서가 위에서 로드한 오픈 소스 임베딩을 바탕으로 임베딩되었다고 보면 된다.
임의로 '비트코인에 대해서 알려줘' 이라는 질문을 던지고 임베딩 벡터의 유사도 기준으로 상위 4개의 문서를 출력해보겠다.
## 질의하기
question = '비트코인에 대해서 알려줘'
docs = db.similarity_search(question, k=4)
|
상위 4개의 문서를 출력해보면 아래와 같다.
print('검색된 문서의 수:', len(docs))
|
검색된 문서의 수: 4
for doc in docs:
print(doc)
print('--' * 100)
|
page_content='139 ㅂ 비트코인 비트코인(bitcoin)은 가상통화(암호통화)이자 디지털 지급시스템이다. 비트코인 시스템 은 중앙 저장소 또는 단일 관리자가 없기 때문에 최초의 탈중앙화된 디지털통화라고 불린다. 이는 사토시 나카모토라는 사람(집단)에 의해 만들어져서 2009년 개방형 소프트웨어로 배포되었다. 이 시스템은 공유형(peer-to-peer)이며, 거래는 중개자 없이 블록체인 소프트 웨어를 이용하는 참여자(nodes) 사이에 직접 이뤄진다. 이런 거래들은 공유(P2P) 네트워크 상 참여자의 작업증명(proof-of-work)을 통해 검증되고 공개된 분산원장인 블록체인에 기록된다. 승인된 거래의 새 그룹인 한 블록은 대략 10분에 한 번씩 만들어져서 블록체인에 추가되고 신속하게 모든 참여자에게 보내어진다. 비트코인은 대규모 전기를 사용하는 컴퓨터 처리 능력(power)을 활용해서 이뤄지는 기록보관 서비스인 채굴(mining)에 대한 보상으로 발행되고 있으며 다른 통화・상품・용역 등과 교환되어가고 있다. 중앙은행이 발행한 법정화폐가 아닌 비트코인은 비트코인 플랫폼에서 거래되며 투자대상으로서도 관심을 받고 있다. 하지만 급등한 가격 및 심한 변동 폭으로 거품논란이 크다. 또한 익명성으 로 자금세탁 등 불법거래에 악용될 소지가 많아 중국 등 일부 국가에서 비트코인 등 가상통 화의 거래를 규제하고 있다. 일본의 경우 비트코인의 거래이익에 대해 세금을 부과한다. 비트코인은 추가되는 한 블록당 새로 12.5비트코인을 보상하는데(2016.7월 현재), 21만개 가 채굴될 때(대략 4년)마다 그 보상이 반으로 줄어든다. 비트코인의 총량은 21백만개이며 2140년경 모두 채굴될 것으로 전망된다. 비트코인은 그 시스템의 설계시 그 수량을 한정시 켜 놓았기 때문에 원칙적으로 인플레이션에 의해 가치가 떨어질 수 있는 화폐와 다른 속성을 지닌다. 한편 2017년 8월 1일 비트코인(classic bitcoin)에서 ‘비트코인캐시’(BCH)가, 10월 25일 ‘비트코인골드’(BTG)가 하드포크(hard-fork)되어 별도로 거래되고 있다. 연관검색어 : 가상통화, 작업증명, 블록체인 빅데이터 빅데이터(big data)란 복잡하고 다양한 대규모 데이터세트 자체는 물론 이 데이터세트 로부터 정보를 추출하고 결과를 분석하여 더 큰 가치를 창출하는 기술을 뜻한다. 수치 데이터 등 기존의 정형화된 정보뿐 아니라 텍스트 ・이미지・오디오・로그기록 등 여러 형태의 비정형 정보가 데이터로 활용된다. 최근 모바일기기와 SNS 이용 보편화, 사물인 빅데이터 ∙' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 155, 'page_label': '156', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='6 경제금융용어 700선 가상통화공개(ICO) 가상통화(ICO; Initial Coin Offering) 공개는 주로 혁신적인 신생기업(startup)이 암호 화화폐(cryptocurrency) 또는 디지털 토큰(digital token, 일종의 투자증명)을 이용하여 자금을 조달할 수 있는 크라우드펀딩(crowd funding)의 한 방식이다. 가상통화공개 (ICO)에서 새로 발행된 암호화화폐는 법화(legal tender) 또는 비트코인 등 기존의 가상 통화와 교환되어 투자자에게 팔린다. 이 용어는 거래소에 상장하려는 기업이 투자자에게 자기 주식을 처음 공개적으로 매도하는 기업공개(IPO; Initial Public Offering)에서 연유 되었다고 볼 수 있다. 기업공개(IPO)에 참여한 투자자는 해당 기업의 소유권과 관련하여 주식을 획득한다. 반면 가상통화공개(ICO)에 참여한 투자자는 해당 신생기업의 코인 (coins) 또는 토큰을 얻는데, 이는 해당 기업이 제안한 프로젝트가 나중에 성공했을 경우 평가될 수 있는 가치(value)로 볼 수 있다. ICO는 주로 블록체인플랫폼인 이더리움 (Etherium)에서 이뤄지고 있다. 우리나라의 경우 현재 금지하고 있으며 앞으로 ICO에 대한 논의를 거쳐 유사수신행위 또는 증권관련 법률로 규제할 것으로 보인다 . 연관검색어 : 가상통화, 블록체인, 비트코인, 빅데이터, 크라우드펀딩, 핀테크 간접금융/직접금융 경제에는 자금 잉여주체와 자금 부족주체가 존재하게 되는데 이들 사이에 은행이나 저축은행 신용협동기구 등 금융기관이 개입하여 자금을 중개하는 방식을 간접금융 (indirect financing)이라고 한다. 즉 금융기관이 일반 대중으로부터 예금을 받아 이를 자신의 명의로 기업 등 다른 경제주체에게 대출해 주는 방식이다. 한편 주식, 채권 발행의 경우와 같이 자금수요자가 금융기관을 통하지 않고 금융시장에서 직접 필요자금 을 조달하는 방식을 직접금융(direct financing)이라고 한다. 간접금융에서는 은행이 중추적인 기능을 하고, 직접금융에서는 주식과 채권이 거래되는 자본시장이 중요한 역할을 수행한다. 직접금융과 간접금융은 상호 경쟁적일 뿐만 아니라 보완적이기도 하므로 두 금융방식이 균형적으로 발전될 필요가 있다. 직접금융과 간접금융의 상대적 비중이 어느 정도이어야 이상적인지는 해당 국가의 경제발전단계나 경제구조에 따라 달라질 수밖에 없다. 예를 들면 중소기업의 비중이 높은 국가일수록 정보의 비대칭성 문제를 완화하기 위해 간접금융이 더 중요하고, 혁신산업에 의해 주도되는 경제일수록' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 22, 'page_label': '23', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='137 ㅂ 임시(ad-hoc) 메시지를 송부하고 분산된 네트워크를 활용한다. 이 네트워크에는 데이터 의 중앙 집중에 따른 컴퓨터 범죄자(cracker)가 악용할 수 있는 취약점이 거의 없다 . 블록체인은 보안방식으로서 공개키 암호방식(public-key cryptography)을 이용한다 . 이 공개키는 ‘긴 무작위 숫자 띠’로서 블록체인의 주소를 뜻한다. 이 탈중앙화 시스템에서 모든 참여자(node 또는 miner)는 각 블록체인의 사본을 가진다. 데이터 품질은 대량 데이터베이스의 복제와 컴퓨터처리에 의한 신뢰로 유지된다. 중앙에 집중된 ‘공식적인’ 사본은 없으며 어떤 사용자도 다른 사용자보다 더 신뢰받지 않는다. 즉 거래내용은 소프트웨어가 활용된 네트워크로 송부되고, 메시지는 차별 없이 전달되며, 채굴자는 거래를 검증해서 기존 블록에 추가한 후 다른 채굴자에게 완성 블록을 송부한다. 블록체 인은 변경사항을 연속적으로 등재하기 위해 작업증명(proof-of-work) ・지분증명 (proof-of-stake) 등 시간인증(time-stamping) 수단을 활용한다. 이처럼 블록체인 덕분에 탈중앙화가 이루어지지만, 블록체인을 통해 더 큰 데이터를 운용하려면 더 비싼 컴퓨터자 원이 필요하기 때문에, 역설적으로 탈중앙화된 블록체인은 대규모 설비를 갖춘 채굴자 (node)에게 더 큰 힘이 집중되는 중앙화 리스크를 수반한다 . 연관검색어 : 블록체인, 작업증명 비관측경제(NOE) 비관측경제(NOE; Non-observed Economy)란 합법적이건 불법적이건 모든 경제적 거래에서 발생한 소득을 포함해야 하는 국내총생산(GDP)의 추계시 이용되는 기초자료 와 행정자료가 지하경제나 불법생산 등을 반영하기가 어려워 누락된 경제활동을 의미한 다. 이러한 비관측경제는 일반적으로 문제영역(problem areas)에 속하는 활동 때문에 발생한다. 그 대표적인 경우가 흔히 지하경제(underground economy)나 은닉경제 (hidden economy)로 표현되는 경제활동이다. 이는 조세나 사회적 의무의 회피, 근로안 전이나 소비자보호 등 법적・행정적 규제에 따른 비용의 회피를 위하여 은밀하게 이루어 진다. 이러한 거래는 세무・통계당국에 축소 보고되기도 하고 현금거래로만 행해져 아예 누락되기도 한다. 또한 마약, 장물거래, 성매매 등과 같이 재화 및 서비스 등 생산물의 내용이 불법적인 경우에도 거래내역을 포착하기 힘들다. 불법생산(illegal production)은 판매나 소유자체가 법에 의해 금지되어 있으나 GDP를 계산할 때에는 포함해야 한다는 것이 국제적으로 합의된 원칙이다. 이밖에도 “통계적 지하(statistical underground)”라고 비관측경제(NOE) ∙' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 153, 'page_label': '154', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='136 경제금융용어 700선 간 대화의 깊이와 폭도 더욱 넓어지고 있다. 브릭스는 현재의 경제성장 속도와 앞으로의 발전 전망에 비추어 신흥 경제대국으로 발돋움할 가능성이 높은 나라들을 하나의 경제권으로 묶은 개념으로 볼 수 있는데, 실제로도 브릭스 국가들은 공통적으로 거대한 영토와 노동력, 풍부한 지하자원 등 경제대국으로 성장할 수 있는 잠재력을 갖춘 것으로 평가되고 있다. 블록체인 블록체인(block chain)은 ① 일정 시간 동안 발생한 모든 거래정보를 블록 (block) 단위로 기록하여 ② 모든 구성원들에게 전송하고 ③ 블록의 유효성이 확보될 경우 이 새 블록을 ④ 기존의 블록에 추가 연결(chain)하여 보관하는 방식의 알고리즘이다 . 각 블록은 이전 블록에 대한 연결자인 해시포인터(a hash pointer, 위변조 점검 수단 ), 시간표시 및 거래데이터를 포함한다. 블록체인은 효율적이고 검증 가능한 방식으로 거래를 기록할 수 있는 개방된 분산원장 즉, 데이터베이스 역할을 한다. 이는 참여자간 공유(peer to peer) 네트워크가 집단적으로 새 블록을 검증하기 위한 프로토콜에 따라 관리된다. 그래서 만약 누군가 거래기록을 조작하려면 참여자간 연결된 모든 블록을 새 블록 생성 이전에 조작해야한다. 즉 일정 시간 안에 수많은 블록을 모두 조작해야하는 데, 이는 사실상 불가능하므로 보안성이 높은 것이다. 이 블록체인 덕분에 새로운 단위가 치의 거래가 오직 한번만 이뤄짐으로써, 사기행위와 같은 이중 지급(double spending) 문제를 해결할 수 있게 되었다. 또한 블록체인에서는 ‘제3의 기관’이 필요 없는 탈중앙화 와 중개기관을 거치지 않는 탈중개화가 이뤄지기 때문에 거래비용이 획기적으로 낮아진 다. 그래서 블록체인은 비트코인 ・이더리움(Etherium) 등 가상통화 운용의 기반이 될 뿐만 아니라 스마트계약, 증권 발행 및 거래, 해외송금 및 자금이체, 무역금융, 부동산 등기, 고가품(예: 다이아몬드)의 정품 인증, 디지털 ID 관리, 전자투표, 개인건강기록 관리 등 여러 분야에서 무한한 혁신 잠재력을 지니고 있다 . 연관검색어 : 분산원장기술, 스마트계약, 비트코인, 금융의 탈집중화, 금융의 탈중개화 블록체인과 탈중앙화 블록체인은 공유 네트워크를 통해 데이터를 저장함으로써 데이터의 중앙 집중 보관에 따르는 리스크를 제거한다. 탈중앙화(decentralization)된 블록체인은 계획되지 않은' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 152, 'page_label': '153', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
벡터 데이터베이스 로컬에 파일로 저장
vectorize된 텍스트를 Chroma db 파일로 저장하기
db_toFiles = Chroma.from_documents(splited_docs, model_huggingface, persist_directory = './finance.db')
# db_toFiles.delete_collection()
print('문서의 수:', db_toFiles._collection.count())
|
문서의 수: 378
이 시점에 현재 경로에 finance.db라는 파일이 생기게 된다.
# 현재 경로에 있는 파일들 확인
%ls -al
|
total 5832 drwxr-xr-x 1 root root 4096 Mar 31 08:33 ./ drwxr-xr-x 1 root root 4096 Mar 31 08:26 ../ -rw-r--r-- 1 root root 5946083 Mar 31 08:29 '2020_경제금융용어 700선_게시.pdf' drwxr-xr-x 4 root root 4096 Mar 24 13:34 .config/ drwxr-xr-x 3 root root 4096 Mar 31 08:34 finance.db/ drwxr-xr-x 1 root root 4096 Mar 24 13:34 sample_data/ drwxr-xr-x 2 root root 4096 Mar 31 08:33 samsumg.db/ |
저장했던 db 파일을 읽어와서 동일한 실습을 진행하는 것도 가능하다.
db_fromfile = Chroma(persist_directory = './finance.db',embedding_function=model_huggingface)
print('문서의 수:', db_fromfile._collection.count())
## 질의하기
question = '비트코인에 대해서 알려줘'
docs = db_fromfile.similarity_search(question, k=4)
print('검색된 문서의 수:', len(docs))
|
문서의 수: 378
검색된 문서의 수: 4
<ipython-input-26-be28881282a2>:1: LangChainDeprecationWarning: The class `Chroma` was deprecated in LangChain 0.2.9 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-chroma package and should be used instead. To use it run `pip install -U :class:`~langchain-chroma` and import as `from :class:`~langchain_chroma import Chroma``.
db_fromfile = Chroma(persist_directory = './finance.db',embedding_function=model_huggingface)
유사도 점수를 함께 출력하거나 상위 문서의 개수 조절 또한 가능하다.
question = '비트코인에 대해서 알려줘'
# TOP 3개만 추출
docs3 = db_fromfile.similarity_search_with_relevance_scores(question, k=3)
|
for doc in docs3:
print(doc)
print('--' * 100)
|
(Document(metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 155, 'page_label': '156', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371}, page_content='139\nㅂ \n비트코인\n비트코인(bitcoin)은 가상통화(암호통화)이자 디지털 지급시스템이다. 비트코인 시스템\n은 중앙 저장소 또는 단일 관리자가 없기 때문에 최초의 탈중앙화된 디지털통화라고 불린다. \n이는 사토시 나카모토라는 사람(집단)에 의해 만들어져서 2009년 개방형 소프트웨어로 \n배포되었다. 이 시스템은 공유형(peer-to-peer)이며, 거래는 중개자 없이 블록체인 소프트\n웨어를 이용하는 참여자(nodes) 사이에 직접 이뤄진다. 이런 거래들은 공유(P2P) 네트워크\n상 참여자의 작업증명(proof-of-work)을 통해 검증되고 공개된 분산원장인 블록체인에 \n기록된다. 승인된 거래의 새 그룹인 한 블록은 대략 10분에 한 번씩 만들어져서 블록체인에 \n추가되고 신속하게 모든 참여자에게 보내어진다. 비트코인은 대규모 전기를 사용하는 \n컴퓨터 처리 능력(power)을 활용해서 이뤄지는 기록보관 서비스인 채굴(mining)에 대한 \n보상으로 발행되고 있으며 다른 통화・상품・용역 등과 교환되어가고 있다. 중앙은행이 \n발행한 법정화폐가 아닌 비트코인은 비트코인 플랫폼에서 거래되며 투자대상으로서도 \n관심을 받고 있다. 하지만 급등한 가격 및 심한 변동 폭으로 거품논란이 크다. 또한 익명성으\n로 자금세탁 등 불법거래에 악용될 소지가 많아 중국 등 일부 국가에서 비트코인 등 가상통\n화의 거래를 규제하고 있다. 일본의 경우 비트코인의 거래이익에 대해 세금을 부과한다. \n비트코인은 추가되는 한 블록당 새로 12.5비트코인을 보상하는데(2016.7월 현재), 21만개\n가 채굴될 때(대략 4년)마다 그 보상이 반으로 줄어든다. 비트코인의 총량은 21백만개이며 \n2140년경 모두 채굴될 것으로 전망된다. 비트코인은 그 시스템의 설계시 그 수량을 한정시\n켜 놓았기 때문에 원칙적으로 인플레이션에 의해 가치가 떨어질 수 있는 화폐와 다른 \n속성을 지닌다. 한편 2017년 8월 1일 비트코인(classic bitcoin)에서 ‘비트코인캐시’(BCH)가, \n10월 25일 ‘비트코인골드’(BTG)가 하드포크(hard-fork)되어 별도로 거래되고 있다.\n 연관검색어 : 가상통화, 작업증명, 블록체인\n빅데이터\n빅데이터(big data)란 복잡하고 다양한 대규모 데이터세트 자체는 물론 이 데이터세트\n로부터 정보를 추출하고 결과를 분석하여 더 큰 가치를 창출하는 기술을 뜻한다. 수치 \n데이터 등 기존의 정형화된 정보뿐 아니라 텍스트 ・이미지・오디오・로그기록 등 여러 \n형태의 비정형 정보가 데이터로 활용된다. 최근 모바일기기와 SNS 이용 보편화, 사물인\n빅데이터 ∙'), 0.6058886127909959) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (Document(metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 22, 'page_label': '23', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371}, page_content='6\n경제금융용어 700선\n가상통화공개(ICO) \n가상통화(ICO; Initial Coin Offering) 공개는 주로 혁신적인 신생기업(startup)이 암호\n화화폐(cryptocurrency) 또는 디지털 토큰(digital token, 일종의 투자증명)을 이용하여 \n자금을 조달할 수 있는 크라우드펀딩(crowd funding)의 한 방식이다. 가상통화공개\n(ICO)에서 새로 발행된 암호화화폐는 법화(legal tender) 또는 비트코인 등 기존의 가상\n통화와 교환되어 투자자에게 팔린다. 이 용어는 거래소에 상장하려는 기업이 투자자에게 \n자기 주식을 처음 공개적으로 매도하는 기업공개(IPO; Initial Public Offering)에서 연유\n되었다고 볼 수 있다. 기업공개(IPO)에 참여한 투자자는 해당 기업의 소유권과 관련하여 \n주식을 획득한다. 반면 가상통화공개(ICO)에 참여한 투자자는 해당 신생기업의 코인\n(coins) 또는 토큰을 얻는데, 이는 해당 기업이 제안한 프로젝트가 나중에 성공했을 \n경우 평가될 수 있는 가치(value)로 볼 수 있다. ICO는 주로 블록체인플랫폼인 이더리움\n(Etherium)에서 이뤄지고 있다. 우리나라의 경우 현재 금지하고 있으며 앞으로 ICO에 \n대한 논의를 거쳐 유사수신행위 또는 증권관련 법률로 규제할 것으로 보인다 .\n 연관검색어 : 가상통화, 블록체인, 비트코인, 빅데이터, 크라우드펀딩, 핀테크\n간접금융/직접금융\n경제에는 자금 잉여주체와 자금 부족주체가 존재하게 되는데 이들 사이에 은행이나 \n저축은행 신용협동기구 등 금융기관이 개입하여 자금을 중개하는 방식을 간접금융\n(indirect financing)이라고 한다. 즉 금융기관이 일반 대중으로부터 예금을 받아 이를 \n자신의 명의로 기업 등 다른 경제주체에게 대출해 주는 방식이다. 한편 주식, 채권 \n발행의 경우와 같이 자금수요자가 금융기관을 통하지 않고 금융시장에서 직접 필요자금\n을 조달하는 방식을 직접금융(direct financing)이라고 한다. 간접금융에서는 은행이 \n중추적인 기능을 하고, 직접금융에서는 주식과 채권이 거래되는 자본시장이 중요한 \n역할을 수행한다. 직접금융과 간접금융은 상호 경쟁적일 뿐만 아니라 보완적이기도 \n하므로 두 금융방식이 균형적으로 발전될 필요가 있다. 직접금융과 간접금융의 상대적 \n비중이 어느 정도이어야 이상적인지는 해당 국가의 경제발전단계나 경제구조에 따라 \n달라질 수밖에 없다. 예를 들면 중소기업의 비중이 높은 국가일수록 정보의 비대칭성 \n문제를 완화하기 위해 간접금융이 더 중요하고, 혁신산업에 의해 주도되는 경제일수록'), 0.4095822058593206) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (Document(metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 153, 'page_label': '154', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371}, page_content='137\nㅂ \n임시(ad-hoc) 메시지를 송부하고 분산된 네트워크를 활용한다. 이 네트워크에는 데이터\n의 중앙 집중에 따른 컴퓨터 범죄자(cracker)가 악용할 수 있는 취약점이 거의 없다 . \n블록체인은 보안방식으로서 공개키 암호방식(public-key cryptography)을 이용한다 . \n이 공개키는 ‘긴 무작위 숫자 띠’로서 블록체인의 주소를 뜻한다. 이 탈중앙화 시스템에서 \n모든 참여자(node 또는 miner)는 각 블록체인의 사본을 가진다. 데이터 품질은 대량 \n데이터베이스의 복제와 컴퓨터처리에 의한 신뢰로 유지된다. 중앙에 집중된 ‘공식적인’\n사본은 없으며 어떤 사용자도 다른 사용자보다 더 신뢰받지 않는다. 즉 거래내용은 \n소프트웨어가 활용된 네트워크로 송부되고, 메시지는 차별 없이 전달되며, 채굴자는 \n거래를 검증해서 기존 블록에 추가한 후 다른 채굴자에게 완성 블록을 송부한다. 블록체\n인은 변경사항을 연속적으로 등재하기 위해 작업증명(proof-of-work) ・지분증명\n(proof-of-stake) 등 시간인증(time-stamping) 수단을 활용한다. 이처럼 블록체인 덕분에 \n탈중앙화가 이루어지지만, 블록체인을 통해 더 큰 데이터를 운용하려면 더 비싼 컴퓨터자\n원이 필요하기 때문에, 역설적으로 탈중앙화된 블록체인은 대규모 설비를 갖춘 채굴자\n(node)에게 더 큰 힘이 집중되는 중앙화 리스크를 수반한다 .\n 연관검색어 : 블록체인, 작업증명\n비관측경제(NOE)\n비관측경제(NOE; Non-observed Economy)란 합법적이건 불법적이건 모든 경제적 \n거래에서 발생한 소득을 포함해야 하는 국내총생산(GDP)의 추계시 이용되는 기초자료\n와 행정자료가 지하경제나 불법생산 등을 반영하기가 어려워 누락된 경제활동을 의미한\n다. 이러한 비관측경제는 일반적으로 문제영역(problem areas)에 속하는 활동 때문에 \n발생한다. 그 대표적인 경우가 흔히 지하경제(underground economy)나 은닉경제\n(hidden economy)로 표현되는 경제활동이다. 이는 조세나 사회적 의무의 회피, 근로안\n전이나 소비자보호 등 법적・행정적 규제에 따른 비용의 회피를 위하여 은밀하게 이루어\n진다. 이러한 거래는 세무・통계당국에 축소 보고되기도 하고 현금거래로만 행해져 아예 \n누락되기도 한다. 또한 마약, 장물거래, 성매매 등과 같이 재화 및 서비스 등 생산물의 \n내용이 불법적인 경우에도 거래내역을 포착하기 힘들다. 불법생산(illegal production)은 \n판매나 소유자체가 법에 의해 금지되어 있으나 GDP를 계산할 때에는 포함해야 한다는 \n것이 국제적으로 합의된 원칙이다. 이밖에도 “통계적 지하(statistical underground)”라고 \n비관측경제(NOE) ∙'), 0.35527687663685237) --
위의 검색 결과의 맨 오른쪽을 보면 유사도 점수가 측정되어 출력되어진다.
주의사항
이 유사도 점수를 일종의 임계값으로 사용하는 분들도 있는데 사실 그다지 정확도가 보장되는 방법은 아니며
이 임베딩 모델은 실습하고 있는 도메인 데이터에 특화된 임베딩 모델이 아니기 때문이다.
임베딩 모델을 해당 도메인으로 파인 튜닝 했을 때 의미가 있다.
유사도가 가장 높은 문서와 유사도 점수를 출력해보겠다.
print(f"가장 유사한 문서 : {docs3[0][0].page_content}")
print('*'*20)
print(f"가장 유사한 문서의 문서의 유사도 : {docs3[0][1]}")
|
가장 유사한 문서 : 139 ㅂ 비트코인 비트코인(bitcoin)은 가상통화(암호통화)이자 디지털 지급시스템이다. 비트코인 시스템 은 중앙 저장소 또는 단일 관리자가 없기 때문에 최초의 탈중앙화된 디지털통화라고 불린다. 이는 사토시 나카모토라는 사람(집단)에 의해 만들어져서 2009년 개방형 소프트웨어로 배포되었다. 이 시스템은 공유형(peer-to-peer)이며, 거래는 중개자 없이 블록체인 소프트 웨어를 이용하는 참여자(nodes) 사이에 직접 이뤄진다. 이런 거래들은 공유(P2P) 네트워크 상 참여자의 작업증명(proof-of-work)을 통해 검증되고 공개된 분산원장인 블록체인에 기록된다. 승인된 거래의 새 그룹인 한 블록은 대략 10분에 한 번씩 만들어져서 블록체인에 추가되고 신속하게 모든 참여자에게 보내어진다. 비트코인은 대규모 전기를 사용하는 컴퓨터 처리 능력(power)을 활용해서 이뤄지는 기록보관 서비스인 채굴(mining)에 대한 보상으로 발행되고 있으며 다른 통화・상품・용역 등과 교환되어가고 있다. 중앙은행이 발행한 법정화폐가 아닌 비트코인은 비트코인 플랫폼에서 거래되며 투자대상으로서도 관심을 받고 있다. 하지만 급등한 가격 및 심한 변동 폭으로 거품논란이 크다. 또한 익명성으 로 자금세탁 등 불법거래에 악용될 소지가 많아 중국 등 일부 국가에서 비트코인 등 가상통 화의 거래를 규제하고 있다. 일본의 경우 비트코인의 거래이익에 대해 세금을 부과한다. 비트코인은 추가되는 한 블록당 새로 12.5비트코인을 보상하는데(2016.7월 현재), 21만개 가 채굴될 때(대략 4년)마다 그 보상이 반으로 줄어든다. 비트코인의 총량은 21백만개이며 2140년경 모두 채굴될 것으로 전망된다. 비트코인은 그 시스템의 설계시 그 수량을 한정시 켜 놓았기 때문에 원칙적으로 인플레이션에 의해 가치가 떨어질 수 있는 화폐와 다른 속성을 지닌다. 한편 2017년 8월 1일 비트코인(classic bitcoin)에서 ‘비트코인캐시’(BCH)가, 10월 25일 ‘비트코인골드’(BTG)가 하드포크(hard-fork)되어 별도로 거래되고 있다. 연관검색어 : 가상통화, 작업증명, 블록체인 빅데이터 빅데이터(big data)란 복잡하고 다양한 대규모 데이터세트 자체는 물론 이 데이터세트 로부터 정보를 추출하고 결과를 분석하여 더 큰 가치를 창출하는 기술을 뜻한다. 수치 데이터 등 기존의 정형화된 정보뿐 아니라 텍스트 ・이미지・오디오・로그기록 등 여러 형태의 비정형 정보가 데이터로 활용된다. 최근 모바일기기와 SNS 이용 보편화, 사물인 빅데이터 ∙ ******************** 가장 유사한 문서의 문서의 유사도 : 0.6058886127909959 |
GPT-4 호출하기
이제 발급받은 OpenAI key 값을 입력하여 GPT-4를 사용해 볼 것이다.
from langchain_openai import ChatOpenAI
from langchain import PromptTemplate
from langchain.chains import RetrievalQA
import os
|
os.environ['OPENAI_API_KEY'] = "여러분의 Key 값"
|
이제 GPT-4에 전달할 프롬프트를 작성한다.
# GPT-4에 전달할 프롬프트
template = """당신은 경제금융용어를 설명해주는 챗봇 '금융맨'입니다.
안상준 개발자가 만들었습니다. 주어진 검색 결과를 바탕으로 답변하세요.
검색 결과에 없는 내용이라면 답변할 수 없다고 하세요. 이모지를 사용하며 친근하게 답변하세요.
{context}
Question: {question}
Answer:
"""
prompt = PromptTemplate.from_template(template)
|
# GPT-4 선언. 단, API Key 값이 셋팅되어져 있어야 실행 가능합니다.
llm = ChatOpenAI(model_name="gpt-4o")
|
ChatOpenAI로부터 llm 객체를 선언하여 GPT-4 호출이 가능(아직은 위에 작성한 프롬프트가 적용되지는 않음)
result = llm.invoke('안녕 반가워 GPT-4야 나는 김지웅이라고해')
print(result.content)
|
안녕하세요, 지웅님! 만나서 반가워요. 저는 GPT-4입니다. 어떻게 도와드릴까요?
벡터 데이터베이스와 LLM의 연결
RetrievalQA.from_chain_type()
- llm: 앞서 선언한 llm 객체를 넣어줌
- retriever: 앞서 선언한 retriever 객체를 넣어줌
- chain_type_kwargs={"prompt": ?}: 앞서 선언한 프롬프트 템플릿을 넣어줌
# 벡터 데이터베이스를 LLM과 연결하기 위해서 retriever 객체로 선언
retriever = db.as_retriever(search_kwargs={"k": 3})
|
qa_chain = RetrievalQA.from_chain_type(
llm=llm, # LLM 연결
retriever=retriever, # 리트리버(벡터 데이터베이스) 연결
chain_type_kwargs={"prompt": prompt}, # 프롬프트 템플릿 연결
return_source_documents=True # 실제 검색된 문서도 확인하려면 True
)
|
input_text = "비트 코인에 대해서 알려줘"
chatbot_response = qa_chain.invoke(input_text)
|
print('내가 넣었던 질문:', chatbot_response['query'])
|
내가 넣었던 질문: 비트 코인에 대해서 알려줘
print('검색 결과를 바탕으로 GPT-4가 작성한 답변:', chatbot_response['result'])
|
검색 결과를 바탕으로 GPT-4가 작성한 답변: 안녕하세요! 😊 비트코인은 가상통화(암호통화)로, 중앙 저장소나 단일 관리자가 없는 탈중앙화된 디지털 통화입니다. 2009년 사토시 나카모토에 의해 만들어졌으며, 블록체인 기술을 이용해 거래가 중개자 없이 참여자들 사이에 직접 이뤄지는 시스템이에요. 비트코인 거래는 참여자의 작업증명을 통해 검증되고, 블록체인이라는 공개된 분산원장에 기록된답니다. 비트코인은 채굴(mining)이라는 과정을 통해 발행되며, 채굴자들은 대규모 전기를 사용하는 컴퓨터 처리 능력을 활용해 채굴 작업을 수행합니다. 비트코인은 중앙은행이 발행한 법정화폐와는 달리, 거래 및 투자 대상으로 많이 사용되고 있으며, 가격 변동성이 크고 익명성 때문에 몇몇 국가에서는 규제를 받기도 합니다. 총 발행량은 2,100만 개로 제한되어 있어 인플레이션에 강한 특성을 가지고 있습니다. 😄 블록체인과 비트코인의 작동 방식이 궁금하다면 더 많은 정보를 제공해드릴 수 있습니다!
print('챗봇이 참고한 실제 검색 결과에 해당하는 유사도 상위 3개 문서:')
for doc in chatbot_response['source_documents']:
print(doc)
print('--' * 100)
|
챗봇이 참고한 실제 검색 결과에 해당하는 유사도 상위 3개 문서: page_content='139 ㅂ 비트코인 비트코인(bitcoin)은 가상통화(암호통화)이자 디지털 지급시스템이다. 비트코인 시스템 은 중앙 저장소 또는 단일 관리자가 없기 때문에 최초의 탈중앙화된 디지털통화라고 불린다. 이는 사토시 나카모토라는 사람(집단)에 의해 만들어져서 2009년 개방형 소프트웨어로 배포되었다. 이 시스템은 공유형(peer-to-peer)이며, 거래는 중개자 없이 블록체인 소프트 웨어를 이용하는 참여자(nodes) 사이에 직접 이뤄진다. 이런 거래들은 공유(P2P) 네트워크 상 참여자의 작업증명(proof-of-work)을 통해 검증되고 공개된 분산원장인 블록체인에 기록된다. 승인된 거래의 새 그룹인 한 블록은 대략 10분에 한 번씩 만들어져서 블록체인에 추가되고 신속하게 모든 참여자에게 보내어진다. 비트코인은 대규모 전기를 사용하는 컴퓨터 처리 능력(power)을 활용해서 이뤄지는 기록보관 서비스인 채굴(mining)에 대한 보상으로 발행되고 있으며 다른 통화・상품・용역 등과 교환되어가고 있다. 중앙은행이 발행한 법정화폐가 아닌 비트코인은 비트코인 플랫폼에서 거래되며 투자대상으로서도 관심을 받고 있다. 하지만 급등한 가격 및 심한 변동 폭으로 거품논란이 크다. 또한 익명성으 로 자금세탁 등 불법거래에 악용될 소지가 많아 중국 등 일부 국가에서 비트코인 등 가상통 화의 거래를 규제하고 있다. 일본의 경우 비트코인의 거래이익에 대해 세금을 부과한다. 비트코인은 추가되는 한 블록당 새로 12.5비트코인을 보상하는데(2016.7월 현재), 21만개 가 채굴될 때(대략 4년)마다 그 보상이 반으로 줄어든다. 비트코인의 총량은 21백만개이며 2140년경 모두 채굴될 것으로 전망된다. 비트코인은 그 시스템의 설계시 그 수량을 한정시 켜 놓았기 때문에 원칙적으로 인플레이션에 의해 가치가 떨어질 수 있는 화폐와 다른 속성을 지닌다. 한편 2017년 8월 1일 비트코인(classic bitcoin)에서 ‘비트코인캐시’(BCH)가, 10월 25일 ‘비트코인골드’(BTG)가 하드포크(hard-fork)되어 별도로 거래되고 있다. 연관검색어 : 가상통화, 작업증명, 블록체인 빅데이터 빅데이터(big data)란 복잡하고 다양한 대규모 데이터세트 자체는 물론 이 데이터세트 로부터 정보를 추출하고 결과를 분석하여 더 큰 가치를 창출하는 기술을 뜻한다. 수치 데이터 등 기존의 정형화된 정보뿐 아니라 텍스트 ・이미지・오디오・로그기록 등 여러 형태의 비정형 정보가 데이터로 활용된다. 최근 모바일기기와 SNS 이용 보편화, 사물인 빅데이터 ∙' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 155, 'page_label': '156', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='6 경제금융용어 700선 가상통화공개(ICO) 가상통화(ICO; Initial Coin Offering) 공개는 주로 혁신적인 신생기업(startup)이 암호 화화폐(cryptocurrency) 또는 디지털 토큰(digital token, 일종의 투자증명)을 이용하여 자금을 조달할 수 있는 크라우드펀딩(crowd funding)의 한 방식이다. 가상통화공개 (ICO)에서 새로 발행된 암호화화폐는 법화(legal tender) 또는 비트코인 등 기존의 가상 통화와 교환되어 투자자에게 팔린다. 이 용어는 거래소에 상장하려는 기업이 투자자에게 자기 주식을 처음 공개적으로 매도하는 기업공개(IPO; Initial Public Offering)에서 연유 되었다고 볼 수 있다. 기업공개(IPO)에 참여한 투자자는 해당 기업의 소유권과 관련하여 주식을 획득한다. 반면 가상통화공개(ICO)에 참여한 투자자는 해당 신생기업의 코인 (coins) 또는 토큰을 얻는데, 이는 해당 기업이 제안한 프로젝트가 나중에 성공했을 경우 평가될 수 있는 가치(value)로 볼 수 있다. ICO는 주로 블록체인플랫폼인 이더리움 (Etherium)에서 이뤄지고 있다. 우리나라의 경우 현재 금지하고 있으며 앞으로 ICO에 대한 논의를 거쳐 유사수신행위 또는 증권관련 법률로 규제할 것으로 보인다 . 연관검색어 : 가상통화, 블록체인, 비트코인, 빅데이터, 크라우드펀딩, 핀테크 간접금융/직접금융 경제에는 자금 잉여주체와 자금 부족주체가 존재하게 되는데 이들 사이에 은행이나 저축은행 신용협동기구 등 금융기관이 개입하여 자금을 중개하는 방식을 간접금융 (indirect financing)이라고 한다. 즉 금융기관이 일반 대중으로부터 예금을 받아 이를 자신의 명의로 기업 등 다른 경제주체에게 대출해 주는 방식이다. 한편 주식, 채권 발행의 경우와 같이 자금수요자가 금융기관을 통하지 않고 금융시장에서 직접 필요자금 을 조달하는 방식을 직접금융(direct financing)이라고 한다. 간접금융에서는 은행이 중추적인 기능을 하고, 직접금융에서는 주식과 채권이 거래되는 자본시장이 중요한 역할을 수행한다. 직접금융과 간접금융은 상호 경쟁적일 뿐만 아니라 보완적이기도 하므로 두 금융방식이 균형적으로 발전될 필요가 있다. 직접금융과 간접금융의 상대적 비중이 어느 정도이어야 이상적인지는 해당 국가의 경제발전단계나 경제구조에 따라 달라질 수밖에 없다. 예를 들면 중소기업의 비중이 높은 국가일수록 정보의 비대칭성 문제를 완화하기 위해 간접금융이 더 중요하고, 혁신산업에 의해 주도되는 경제일수록' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 22, 'page_label': '23', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='136 경제금융용어 700선 간 대화의 깊이와 폭도 더욱 넓어지고 있다. 브릭스는 현재의 경제성장 속도와 앞으로의 발전 전망에 비추어 신흥 경제대국으로 발돋움할 가능성이 높은 나라들을 하나의 경제권으로 묶은 개념으로 볼 수 있는데, 실제로도 브릭스 국가들은 공통적으로 거대한 영토와 노동력, 풍부한 지하자원 등 경제대국으로 성장할 수 있는 잠재력을 갖춘 것으로 평가되고 있다. 블록체인 블록체인(block chain)은 ① 일정 시간 동안 발생한 모든 거래정보를 블록 (block) 단위로 기록하여 ② 모든 구성원들에게 전송하고 ③ 블록의 유효성이 확보될 경우 이 새 블록을 ④ 기존의 블록에 추가 연결(chain)하여 보관하는 방식의 알고리즘이다 . 각 블록은 이전 블록에 대한 연결자인 해시포인터(a hash pointer, 위변조 점검 수단 ), 시간표시 및 거래데이터를 포함한다. 블록체인은 효율적이고 검증 가능한 방식으로 거래를 기록할 수 있는 개방된 분산원장 즉, 데이터베이스 역할을 한다. 이는 참여자간 공유(peer to peer) 네트워크가 집단적으로 새 블록을 검증하기 위한 프로토콜에 따라 관리된다. 그래서 만약 누군가 거래기록을 조작하려면 참여자간 연결된 모든 블록을 새 블록 생성 이전에 조작해야한다. 즉 일정 시간 안에 수많은 블록을 모두 조작해야하는 데, 이는 사실상 불가능하므로 보안성이 높은 것이다. 이 블록체인 덕분에 새로운 단위가 치의 거래가 오직 한번만 이뤄짐으로써, 사기행위와 같은 이중 지급(double spending) 문제를 해결할 수 있게 되었다. 또한 블록체인에서는 ‘제3의 기관’이 필요 없는 탈중앙화 와 중개기관을 거치지 않는 탈중개화가 이뤄지기 때문에 거래비용이 획기적으로 낮아진 다. 그래서 블록체인은 비트코인 ・이더리움(Etherium) 등 가상통화 운용의 기반이 될 뿐만 아니라 스마트계약, 증권 발행 및 거래, 해외송금 및 자금이체, 무역금융, 부동산 등기, 고가품(예: 다이아몬드)의 정품 인증, 디지털 ID 관리, 전자투표, 개인건강기록 관리 등 여러 분야에서 무한한 혁신 잠재력을 지니고 있다 . 연관검색어 : 분산원장기술, 스마트계약, 비트코인, 금융의 탈집중화, 금융의 탈중개화 블록체인과 탈중앙화 블록체인은 공유 네트워크를 통해 데이터를 저장함으로써 데이터의 중앙 집중 보관에 따르는 리스크를 제거한다. 탈중앙화(decentralization)된 블록체인은 계획되지 않은' metadata={'author': 'INSUNG DATA INC.', 'creationdate': 'January 31, 2018 16:21', 'creationdate--text': 'January 31, 2018 16:21', 'creator': 'Smart PDF Imposition 1.0', 'moddate': 'January 31, 2018 16:21', 'moddate--text': 'January 31, 2018 16:21', 'page': 152, 'page_label': '153', 'producer': 'Smart PDF Imposition 1.0', 'source': '/content/2020_경제금융용어 700선_게시.pdf', 'subject': 'CoreImposition PDF 1.0 Output', 'title': '°æÁ¦±ÝÀ¶¿ë¾î 700¼±-ÃÖÁ¾.PDF', 'total_pages': 371} |
성능 향상을 위한 고민 포인트
이 실습 이후에 앞으로 공부하는 방향에 있어서의 키워드 정리
Q. PDF를 페이지 별로 로드하고 또 그 페이지들을 적당한 길이로 자르면 각각의 문서들은 내용이 앞이나 뒤에 문맥이 없이 중간에 끊길텐데 이대로 검색 문서에 적재되어도 괜찮을까요?
A) 당연히 성능에 영향을 줍니다. Chunking에 대한 고민을 많이 해야 하고 이를 위한 다양한 검색 알고리즘과 청킹 알고리즘들이 존재하여 이에 대해서 공부하고 적용해야 합니다.
아래 질문과 연계된 질문이기도 하므로 아래 질문과 맞추어서 보충 답변을 해보겠습니다.
Q. 사용자의 질문에 대한 답이 검색된 문서에 없을 경우에는 어떻게 해야할까요?
A) RAG에서는 기본적으로 검색된 문서에 대한 답이 없을 때에 대한 시나리오를 따로 준비해야 합니다. 여기서는 검색 결과가 없다라고 단순하게 답변하도록 유도하였습니다.
실제로 질문이 갖고 있는 문서로 답변할 수 없는 경우인지 원래 검색이 되어야 하는데 검색 성능이 안 좋아서 검색이 안 된 건지를 알아야 합니다. 만약 후자의 경우라면 검색 성능을 높이기 위해서 다음과 같은 고민들을 해야 합니다.
- 문서 Chunking을 잘못해서 임베딩 성능이 좋지 않지는 않은가?
- semantic chunking, 합성 데이터 방식(요약 등), 앤트로픽의 Contextual Retrieval을 고민해볼까?
- 임베딩 모델의 성능이 좋지 않아서 파인 튜닝을 해볼까?
- reranking이라고 하는 2단계 검색 과정을 넣어서 검색 성능을 높여야 할까?
- BM25와 같은 전통적인 키워드 기반의 검색 알고리즘을 혼합해볼까?
- HyDE와 같은 검색 성능을 높이는 방법을 적용해볼까?
Q. PDF 파일에 이미지나 테이블이 있었을텐데 이런 건 제대로 검색이 되고 또 답변할 수 있을까요?
A) 멀티모달 RAG의 영역입니다. VLM과 같은 멀티모달 LLM, 멀티모달 임베딩, 또는 OCR이 가능한 패키지인 unstructured.io 등을 사용하여 다양한 방법으로 이를 처리할 수 있습니다. 수업에서는 다루지만 아쉽지만 세미나에서는 시간의 한계로 인해서 다루지 않습니다.
Q. 멀티턴, 멀티쿼리 등과 같은 복잡한 쿼리에 대해서도 대응 가능할까?
A) 멀티턴은 현 구조에서도 조금의 수정을 통해 가능하지만, 멀티 쿼리(A and B)는 현 구조에서는 어렵습니다. 이 경우 에이전트 RAG를 수행하거나 앞단에 별도의 모듈을 두어서 처리해야 합니다.
이제 벡터 DB 문제
크로마 문서 추가
for key in db_fromfile._collection.get():
print(key)
|
ids
embeddings
metadatas
documents
uris
data
included
# id를 출력하되 상위 5개만 출력
db_fromfile._collection.get()['ids'][:5]
|
['019594e8-4a34-4511-82c4-88b71511d22f',
'02068323-8636-4804-acde-02bfeba1ba45',
'032bf01b-2a30-4293-881b-c0d84bfec56a',
'05db6098-0451-4b68-b658-364eb51df566',
'09186c52-f28a-4970-af08-c99fcda3c42f']
print('현재 문서 수 :', len(db_fromfile._collection.get()['ids']))
|
현재 문서 수 : 69
# 신규 문서 추가 하기
text1 = '''삼성전자가 미국 반도체업체 엔비디아에 고대역폭 메모리(HBM)를 납품하기 위한 테스트를 아직 통과하지 못했다고 로이터통신이 3명의 익명 소식통을 인용해 24일 보도했다.'''
text2 = '''엔비디아발 훈풍으로 전 세계 반도체가 들썩이는 가운데 국내 증시에서는 SK하이닉스 (198,600원 ▼1,400 -0.70%)의 활약이 돋보인다. 엔비디아에 대한 투자자들의 기대치가 높아지고 있어 SK하이닉스 역시 상승세를 이어갈 것이란 전망이 쏟아진다. 다만 SK하이닉스 주가에 상승동력으로 작용했던 엔비디아 실적 재료가 소진된 점은 차익실현 매물이 출현할 가능성을 높인다.'''
|
from langchain.docstore.document import Document
new_doc = Document(
page_content=text2,
metadata={
"source": "wareconn.com",
"page": 1
}
)
|
new_docs = [new_doc]
id = db_fromfile.add_documents(
new_docs,
ids=["7"]
)
|
id
|
['7']
print('현재 문서 수 :', len(db_fromfile._collection.get()['ids']))
|
현재 문서 수 : 70
크로마 문서 삭제
# delete the last document
print("count before", db_fromfile._collection.count())
db_fromfile._collection.delete(ids=['25dd1dba-78fa-4b4d-99ee-2aa05baaa069'])
print("count after", db_fromfile._collection.count())
|
WARNING:chromadb.segment.impl.vector.local_persistent_hnsw:Delete of nonexisting embedding ID: 25dd1dba-78fa-4b4d-99ee-2aa05baaa069
WARNING:chromadb.segment.impl.metadata.sqlite:Delete of nonexisting embedding ID: 25dd1dba-78fa-4b4d-99ee-2aa05baaa069
count before 70
count after 70
파이스(Faiss)
!pip install faiss-cpu
|
from langchain.vectorstores import FAISS
|
아래는 Langchain에서 FAISS를 이용하여 벡터 DB 사용 시 가장 간단한 사용법이다.
# FAISS 를 통해 벡터 저장소 생성. OpenAIEmbeddings()를 사용하거나 HuggingFaceEmbeddings()를 사용하면 된다. faiss_db = FAISS.from_documents(splited_docs, OpenAIEmbeddings()) # 유사도 검색(쿼리) similar_docs = faiss_db.similarity_search("사용자의 질문") |
faiss_db = FAISS.from_documents(splited_docs, model_huggingface)
question = '삼성전자의 주요 사업영역은?'
docs = faiss_db.similarity_search(question)
|
len(docs)
|
4
for doc in docs:
print(doc)
print('--' * 100)
|
page_content='11 Ⅱ 기업 상세 분석 1 사업분야 (내용) Q1삼성전자의 대표적 사업분야에 대해 설명할 수 있습니까 ? A 삼성전자는 크게 CE(Consumer Electronics) 사업부문 , IM(Information technology & Mobile communica- tion) 사업부문 , DS(Device Solutions) 사업부문 등 3개 사업부문으로 나누어 독립 경영을 합니다 . ⑴ Consumer Electronics (CE) 부문 ① 영상디스플레이 : 진화하는 스마트 TV, 초대형 프리미엄 TV 전략으로 8년 연속 세계 1위에 도전 ② 생활가전 : 새로운 기술과 가치 창출로 생활과 문화를 바꾸는 혁신을 준비 ③ 의료기기 : 정확하고 빠른 진단을 도와주는 새롭고 혁신적인 의료기기를 개발 ⑵ Information technology & Mobile communication (IM) 부문' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 9} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='2 01삼성전자 기업분석 (Samsung Electronics Co., Ltd) Ⅰ 기업 일반 1 기업개요 1) 기업소개 본사주소 경기도 수원시 영통구 삼성로 129(매탄동 416) 사업분야 삼성그룹의 대표 기업으로 휴대폰 , 정보통신기기 , 반도체 , TV 등을 생산 판매하는 제조업체 홈페이지 www.samsung.com/sec 구분 전기전자 대기업 설립일 1961년 07월 01일 대표이사 권오현 총자산 1) 244조 매출액 2) 200조 임직원수 95,374명 ∙1975년 1월 주식시장 상장 ∙1984년 2월 삼성전자공업주식회사 ->삼성전자주식회사로 사명 변경 ∙CE(Consumer Electronics), IM(Information technology & Mobile co mmunications), DS(Device Solutions) 3개의 부문으로 나누어 독립 경영 . 부문 제품 CE TV, 모니터 , 냉장고 , 세탁기 , 에어컨 , 프린터 , 의료기기 등' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 0} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='108) 조직도 9) 직무소개 ∙E직군 (연구개발직 ) : 기초연구와 응용연구 , 이러한 연구성과를 기초로 제품화까지 진행하는 개발업무 수행 ∙S직군 (소프트웨어직 ) : 컴퓨터 프로그래밍을 통해 사용자가 쉽고 편하게 제품을 활용할 수 있도록 도와주는 창의적인 업무를 수행 ∙M직군 (영업마케팅직 ) : 새로운 상품을 기획 , 개발하여 매출 신장과 수익률 제고에 기여하고 시장의 접점에서 고객만족과 판매를 촉진시켜 수익창출의 직접적인 역할수행 ∙G직군 (경영지원직 ) : CEO 나 사업부장을 도와 전체 사업이 원활히 진행될 수 있도록 지원과 컨트롤을 담당 ∙D직군 (디자인직 ) : 사용자가 만지고 볼 수 있는 삼성전자 제품의 모든 요소들을 보다 심미적으로 아름답 고 편리하게 구상하는 역할 ∙F직군 (설비엔지니어직 ) : 첨단 설비 관리 및 개선 활동과 Facility 활동을 통해 생산성 향상을 극대화시키 는 업무' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 8} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='17❙요약 손익계산서 ❙ (단위: 10억원) 구분 2012년 결산 2013년 결산 2014년 결산 2015년 결산 매출액 141,206 158,372 137,826 135,205 매출원가 99,432 110,732 99,189 99,659 매출총이익 41,774 47,641 38,637 35,546 판매비와관리비 23,264 25,834 24,712 22,147 영업이익 18,510 21,807 13,925 13,398 금융비용 3,206 3,847 3,734 4,714 당기순이익 17,399 17,930 14,592 12,238 2015년말 기준 삼성전자의 매출액은 135조에 달하며 , 13조원의 영업이익 , 12조원의 당기순이익을 올리고 있다.' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 15} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
You can also save and load a FAISS index. This is useful so you don't have to recreate it everytime you use it..
# 파일 저장
faiss_db.save_local('faiss_index')
## 파일 불러오기
new_db_faiss = FAISS.load_local('faiss_index', model_huggingface, allow_dangerous_deserialization=True)
question = '삼성전자의 주요 사업영역은?'
docs = new_db_faiss.similarity_search(question)
|
for doc in docs:
print(doc)
print('--' * 100)
|
A 삼성전자는 크게 CE(Consumer Electronics) 사업부문 , IM(Information technology & Mobile communica- tion) 사업부문 , DS(Device Solutions) 사업부문 등 3개 사업부문으로 나누어 독립 경영을 합니다 . ⑴ Consumer Electronics (CE) 부문 ① 영상디스플레이 : 진화하는 스마트 TV, 초대형 프리미엄 TV 전략으로 8년 연속 세계 1위에 도전 ② 생활가전 : 새로운 기술과 가치 창출로 생활과 문화를 바꾸는 혁신을 준비 ③ 의료기기 : 정확하고 빠른 진단을 도와주는 새롭고 혁신적인 의료기기를 개발 ⑵ Information technology & Mobile communication (IM) 부문' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 9} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='2 01삼성전자 기업분석 (Samsung Electronics Co., Ltd) Ⅰ 기업 일반 1 기업개요 1) 기업소개 본사주소 경기도 수원시 영통구 삼성로 129(매탄동 416) 사업분야 삼성그룹의 대표 기업으로 휴대폰 , 정보통신기기 , 반도체 , TV 등을 생산 판매하는 제조업체 홈페이지 www.samsung.com/sec 구분 전기전자 대기업 설립일 1961년 07월 01일 대표이사 권오현 총자산 1) 244조 매출액 2) 200조 임직원수 95,374명 ∙1975년 1월 주식시장 상장 ∙1984년 2월 삼성전자공업주식회사 ->삼성전자주식회사로 사명 변경 ∙CE(Consumer Electronics), IM(Information technology & Mobile co mmunications), DS(Device Solutions) 3개의 부문으로 나누어 독립 경영 . 부문 제품 CE TV, 모니터 , 냉장고 , 세탁기 , 에어컨 , 프린터 , 의료기기 등' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 0} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='108) 조직도 9) 직무소개 ∙E직군 (연구개발직 ) : 기초연구와 응용연구 , 이러한 연구성과를 기초로 제품화까지 진행하는 개발업무 수행 ∙S직군 (소프트웨어직 ) : 컴퓨터 프로그래밍을 통해 사용자가 쉽고 편하게 제품을 활용할 수 있도록 도와주는 창의적인 업무를 수행 ∙M직군 (영업마케팅직 ) : 새로운 상품을 기획 , 개발하여 매출 신장과 수익률 제고에 기여하고 시장의 접점에서 고객만족과 판매를 촉진시켜 수익창출의 직접적인 역할수행 ∙G직군 (경영지원직 ) : CEO 나 사업부장을 도와 전체 사업이 원활히 진행될 수 있도록 지원과 컨트롤을 담당 ∙D직군 (디자인직 ) : 사용자가 만지고 볼 수 있는 삼성전자 제품의 모든 요소들을 보다 심미적으로 아름답 고 편리하게 구상하는 역할 ∙F직군 (설비엔지니어직 ) : 첨단 설비 관리 및 개선 활동과 Facility 활동을 통해 생산성 향상을 극대화시키 는 업무' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 8} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- page_content='17❙요약 손익계산서 ❙ (단위: 10억원) 구분 2012년 결산 2013년 결산 2014년 결산 2015년 결산 매출액 141,206 158,372 137,826 135,205 매출원가 99,432 110,732 99,189 99,659 매출총이익 41,774 47,641 38,637 35,546 판매비와관리비 23,264 25,834 24,712 22,147 영업이익 18,510 21,807 13,925 13,398 금융비용 3,206 3,847 3,734 4,714 당기순이익 17,399 17,930 14,592 12,238 2015년말 기준 삼성전자의 매출액은 135조에 달하며 , 13조원의 영업이익 , 12조원의 당기순이익을 올리고 있다.' metadata={'source': 'https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf', 'page': 15} -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
print('저장된 문서 개수:', faiss_db.index.ntotal)
|
저장된 문서 개수: 69
# 저장된 문서들 출력
faiss_db.docstore._dict
|
너무 길어서 생략
파이스 문서 삭제
# 기존 문서 삭제하기. 삭제 시에는 id값으로 한다.
print("count before:", faiss_db.index.ntotal)
faiss_db.delete(['8fd615aa-caa3-4f15-9a95-8f810ef14593'])
print("count after:", faiss_db.index.ntotal)
|
count before: 69
count after: 68
파이스 문서 추가
# 신규 문서 추가 하기
text1 = '''삼성전자가 미국 반도체업체 엔비디아에 고대역폭 메모리(HBM)를 납품하기 위한 테스트를 아직 통과하지 못했다고 로이터통신이 3명의 익명 소식통을 인용해 24일 보도했다.'''
text2 = '''엔비디아발 훈풍으로 전 세계 반도체가 들썩이는 가운데 국내 증시에서는 SK하이닉스 (198,600원 ▼1,400 -0.70%)의 활약이 돋보인다. 엔비디아에 대한 투자자들의 기대치가 높아지고 있어 SK하이닉스 역시 상승세를 이어갈 것이란 전망이 쏟아진다. 다만 SK하이닉스 주가에 상승동력으로 작용했던 엔비디아 실적 재료가 소진된 점은 차익실현 매물이 출현할 가능성을 높인다.'''
|
new_db = FAISS.from_texts([text1, text2], model_huggingface)
|
print('신규 DB 샘플 개수:', new_db.index.ntotal)
|
신규 DB 샘플 개수: 2
# 저장된 문서들 출력
new_db.docstore._dict
|
{'9d1e5796-aa5d-40e6-b594-364d21486068': Document(page_content='삼성전자가 미국 반도체업체 엔비디아에 고대역폭 메모리(HBM)를 납품하기 위한 테스트를 아직 통과하지 못했다고 로이터통신이 3명의 익명 소식통을 인용해 24일 보도했다.'),
'769049d6-93b3-44c7-b637-7e3b683fda25': Document(page_content='엔비디아발 훈풍으로 전 세계 반도체가 들썩이는 가운데 국내 증시에서는 SK하이닉스 (198,600원 ▼1,400 -0.70%)의 활약이 돋보인다. 엔비디아에 대한 투자자들의 기대치가 높아지고 있어 SK하이닉스 역시 상승세를 이어갈 것이란 전망이 쏟아진다. 다만 SK하이닉스 주가에 상승동력으로 작용했던 엔비디아 실적 재료가 소진된 점은 차익실현 매물이 출현할 가능성을 높인다.')}
faiss_db.merge_from(new_db)
|
print("count after merge:", faiss_db.index.ntotal)
|
count after merge: 70
'AI' 카테고리의 다른 글
RAG 실습 이후 + LLM 추천 (0) | 2025.04.04 |
---|---|
RAG 서울 청년 정책 챗봇 실습 (0) | 2025.04.03 |
랭체인을 이용한 RAG (0) | 2025.04.01 |
Deep Learning GPU and CPU (0) | 2025.03.28 |
Deep Learning 텐서(Tensor) (0) | 2025.03.28 |