JupyterLab의 이번 세션을 기대하시기 바랍니다 드디어 벡터를
직접 보게 되니까요
여러분은 5주 차 폴더에 있고 3일째에 있습니다 어느 때보다
저를 따라오게 될 거예요
이 예제에선 시각적으로 중요하고, 실제로 어떻게 진행되는지 감을 잡을 수 있기 때문에 중요하죠.
Get it.
이건 전날의 복사본에 더 추가된 거예요
자, 가져오기부터 시작해보죠 가져오기에 추가된 것은 우리가 다룰 특별한 기능들이고요
오늘요
OpenAI 엠디딩을 가져올 겁니다 랑랑 체인 OpenAI 패키지의 일부죠
랑 체인 크로마를 가져올 거예요
그리고 불러올 것이 몇 가지 있어요 재미있게 실제로 이 벡터들을
시각화할 수 있도록요 t-SNE라는 거죠 나중에 얘기할 거예요 그리고
플롯리에서는 멋진 다이어그램을 줄 거예요
불러오기를 해보죠
좋아요, 상수를 실행해보죠
환경 변수를 불러오는 거죠
이제 아주 익숙해지셨겠죠
로더를 이용해 지식 기반을 실을 거예요
텍스트 분할기를 이용해 덩어리를 만들 건데, 123개예요
4개의 폴더 각각에 구획이 있어요 계약, 제품, 직원, 회사
한 번 더 삽입과 자동 역행 LMS에 대해 상기시켜 드리고 싶네요 지금까지 코스
대부분에서 자동 역행 LMS에 대해 얘기했었죠
자동 인코딩 LMS를 처음으로 살펴보겠습니다 전체 입력을 가져다가 하나의 출력을
생성하기 위해 사용하죠 우리 경우엔 벡터죠
자동 인코딩 경보의 예가 버트죠
이걸 사용할 거예요
오픈아이 삽입구죠
실행해 보죠
네
크로마 데이터 저장소를 만들 거예요
여기 이 부분을 집어넣었어요 이미 있는 데이터베이스를 지우거나 비우기 위해서요
그렇지 않으면 코드를 실행할 때마다 벡터가 추가됩니다. 벡터 모음이 중복되어서
혼란스러워져요.
데이터베이스를 새로 고침하는 데 도움이 되죠
여러분이 이미 한 번 실행했다면∙∙∙ 저도 이미 한두 번 실행했다고 상상하실 수 있죠 그러니
이건 제게 유용해요
저희가 지울게요
벡터 db 음 이 폴더에 있어요 그냥 db 이름이죠 상수예요 DB 이름이
벡터 DB라고 표시해뒀어요
SQLite 기반의 뭐든 될 수 있어요
여길 보면 SQLite 관련 작업이 진행 중이죠
여러 개의 다른 파일들이 있는 거죠 여러분이 부여하고자 선택한 데이터베이스 이름
내에요
이 경우엔 벡터 db죠
이제 벡터 데이터베이스를 생성하고 벡터로 채울 차례군요
또 다른 그러디오 순간을 보여드리죠
여러분은 문서들을 벡터화하고 벡터 데이터베이스에 저장하는 프로세스가
꽤나 복잡할 거라고 생각하실 수도 있습니다 적어도 여러 개의
셀이 있을 거라고 말이죠
물론 한 셀에서 할 수도 있고 한 줄의 코드에서도 할 수 있어요
랭 체인이 접착 코드를 많이 발라서 가능했어요
수동으로 하는 건 그리 어렵지 않아요 반복하기 위해서요 이런 각각의
삽입을 각각의 덩크마다 벡터로 전환해 크로마에 저장하는 거죠 4,
5줄이면 될 거예요
이렇게 한 번에 하면 훨씬 간단해요
이것과 관련해 또 다른 장점은 다른 벡터 데이터 저장소를 시도하면
랭 체인에서 불러온 다른 벡터 저장소와 같은 겁니다 여러분도 시도해
보세요
이 라인을 실행해 볼게요 실행됐네요
벡터 스토어는 123개의 문서가 만들어졌죠
그 말을 들으니 안심이 되네요 덩어리 수가 123개였거든요
벡터 데이터 저장소에 같은 수의 문서가 있다는 건 좋은 일이죠
크롬을 생성하고 돌아온 벡터 스토어 객체를 발견할 수 있었습니다
덩크와 OpenAI 엠베딩을 전달했습니다 간단하게 데이터베이스의
이름을요
그게 우리가 제공한 3가지예요 완전히 말이 되죠
벡터 스토어를 생성하는데 필요한 건 그게 다죠
벡터 스토어는 get_Cetting.Count라고 호출할 수 있습니다 벡터 스토어 내 문서의 수를
얻기 위해서요
벡터들의 크기가 얼마나 되는지 알아봅시다. 이것으로 컬렉션으로부터 벡터를 얻을 수 있어요.
그래서 컬렉션은 이 밑줄 get을 호출하면 얻게 되는 거죠 벡터 스토어의
특성
그런 다음 .get을 호출하죠
한계를 넘을 수 있어요
우린 한 명만 원해요
벡터인 내장들을 불러오길 원하죠
그리고 그걸 살펴보고 얼마나 큰지 볼 거예요
1536차원이에요
1536개의 숫자가 이 덩어리를 이루죠
우리가 직접 보죠 그냥 프린트할 수 있게요
삽입 샘플을 인쇄해서 어떤지 보죠
놀랍네요
숫자가 많네요
당신과 나에겐 무의미해요
하지만 이 숫자들은 어떤 식으로든 그래요
이 숫자들은 어떤 식으로든 숫자와 관련된 덩어리의 의미를 반영해요
두고 봐야죠
잠시 후 덩어리랑 연결시켜 보죠
숫자가 엄청나요
1536개의 숫자로 1536차원 공간의 좌표를 해석할 수 있어요
그 좌표가 선택되면 비슷한 좌표를 가진 다른 벡터들이 벡터 공간에서
비슷한 의미를 갖는 거죠
그게 이 요리의 핵심이죠
잠시 시각화해 보죠
댓글을 없애면 좋을 것 같아요 Get it
좋은 방법이 될 거예요 무대 뒤에서 무슨 일이 일어나는지 제대로 조사할 수 있는
방법이죠
컬렉션겟티에 전화해 메타데이터와 문서 내장 정보를 요청할 수 있어요
일단 그렇게 하고 나면 벡터들을 put 할 수 있어요
박아둔 것들을 벡터들의 배열에 넣을 수 있습니다. doc 타입을 doc 타입이라는 것에
넣을 수 있어요.
이제 색을 좀 만들어 볼게요
Get it get get it 사전 작업이에요
한 가지 문제가 있습니다 인간은 결점이 있는데 모든 걸 3차원 이상으로
시각화하는 데 문제가 있다는 거죠
1536차원으로 시각화하는 건 정말 어려운 일이에요
다행히 다양한 기술을 활용할 수 있어요 하향 투사라는 걸 하는데 차원을
2차원으로만 축소하는 거죠 그렇게 하면 사물을 분리하는 데 가장 효과적인
방법으로 다차원적 표현에 충실할 수 있어요
그래서 모든 면에서 좀 더 멀리 떨어져 있는 걸 만들려 하면 2차원으로
투사했을 때도 여전히 꽤 멀리 떨어져 있을 거예요
그게 목적이죠
그에 대한 다양한 기술이 있지만 자세히 다루진 않겠습니다만 저희가 사용할
기술은 아주 일반적인 거죠
t-SNE라고 하는데 T 분산 가설 이웃 침투의 약자죠 구글에 검색하거나
설명을 듣고 싶을 때 챗GPT에 물어보면 나오는 거예요
통과할 때 몇 가지 차원을 원하죠?
천 가지에서 2차원으로 영사하는 거죠
이 무작위 상태는 무작위 씨앗을 설정하는 방식이에요 이걸 호출할 때마다 같은
결과가 나와서 이걸 재생산할 수 있죠 get it
그러면 감소된 벡터를 얻을 수 있습니다. t-SNE 객체에 대한 get transform 메서드를 호출하면요.
이제 멋진 라이브러리 플리틀리를 이용해서 멋진 분산 도표를 만들 거예요
이건 전부 일종의 코드예요 원하는 대로 복사, 붙여넣기, 재사용할 수
있죠
하지만 멋진 걸 했어요 마커에 다른 색을 입혔죠 다양한
문서 유형에 맞춰 설정한 색에 근거해서요 팝업 텍스트도 있어요
청크 자체에서 첫 100개의 글자가 조각으로 나오죠
여기서 보고 싶은 건 문서가 벡터 데이터베이스에서 어떻게 보이는지 보는 거예요
그런 다음 각각의 다른 벡터에 대해 어떤 종류의 문서인지에 따라 색을 입힐 거예요
텍스트 위로 마우스가 떠요
이 비트 조각이 나타내는 텍스트 조각을 읽을 수 있어요
잘 되는지 보죠
그럼 멋지겠네요
당연히 알죠
이미 해 봤어요
여기 있네요
네
이게 뭐죠?
다차원 벡터의 시각화를 보고 있는데 2D로 보여줍니다 엑스 축과 Y축의
특별한 의미가 없어요
여러 지점을 분산시킬 수 있는 최선의 방법이죠
몇 가지 알아두셔야 할 게 있어요
여기 보이는 녹색 점들은 직원들을 나타내요
빨간 점은 뭘 의미할까요?
여기서 직원이라는 건 직원 문서에서 텍스트를 잔뜩 뽑아낸다는 뜻이에요
빨간 건 계약서에서 나온 텍스트 덩어리예요
파란색은 제품 문서화 노란색은 어바웃 문서화예요
이 시점에서 아셔야 할 마법 같은 게 있어요 OpenAI가 비트를
삽입할 때 텍스트 덩어리를 벡터화할 때 문서 유형을 몰랐어요
메타데이터는 말 안 했어요
여름철 직원, 여름철 제품 여름철 계약에 대해 말하지 않았어요
텍스트 덩어리를 주고 벡터로 바꾸라고 했죠
그게 다였어요
그 덩어리들을 바탕으로 보면 이 덩어리들이 벡터 공간으로 분리되어
공간 내의 다른 영역을 차지하고 있어요
서로 어느 정도 비슷하거든요 내용이나 의미 면에서요
직원들은 모두 같은 영역에 있어요
계약서는 여기 있고 제품은 여기 있어요
일부 계약 정보가 제품과 같은 부근에 있는 걸 눈치채셨을
거예요
잠시 놀라실지도 모르겠네요
뭔가 잘못된 것처럼 보일 수도 있어요
이 덩어리들을 마우스로 가리키면 계약의 특정 텍스트 덩어리란 걸 알 수 있어요
클라이언트가 등록한 핵심 기능을 설명하는 거죠
텍스트를 입력하라고 하는 게 보이시죠
죄송합니다 잠시 마우스로 가리켜보면 텍스트라는 두 번째 줄이 있는데 벡터 공간에 있는
위치에 있는 덩어리를 추출한 것입니다. 하나의 인공지능으로 된 매칭을
볼 수 있는데요.
다른 걸 찾아보죠
인공지능 위험 평가 기능이죠
그게 그거죠
여기서 보이는 건 계약 안에 기능성 정보 같은 게 있어요
기능성 물질은 벡터 공간에 존재합니다 다른 제품과 비슷한 공간에 존재하죠
이해가 되셨으면 좋겠네요
다시 말씀드리지만 공간의 올바른 위치를 문서의 의미와 연결하는 건 거의 소름
끼칠 정도로 잘하죠
마지막으로 말씀드릴 요점은 너무 멀리 간 것일 수도 있지만 제가
보기엔 이런 상황 같아요
보시면 회사 관련 서류가 세 장 있어요
여기 이 세 개가 중앙에 있어요
여러 문서들 가운데에 있어요
그건 일부 정보를 포함하고 있기 때문이라고 봅니다
직원과 계약 제품과 관련된 정보요
모든 것과 관련된 중심 정보 같은 거죠
그래서 이 모든 게 어떤 식으로든 모든 정보의 한가운데에 있는 거죠 REST
그게 참 흥미로워요
내가 오버하는 걸 수도 있지만 그런 것 같아요
여러분이 할 수 있는 것 중 하나는 벡터 데이터베이스에 넣고 싶은 텍스트 덩어리를
실험해보는 거예요
돌아가서 다른 문서를 추가할 수 있다고 상상해 보세요 여기 로드한 문서에
말이죠
파일을 직접 지정하거나 텍스트를 추가하거나 기존
문서에 텍스트를 추가해서 벡터 공간으로 보내거나 둘 중 하나입니다.
그리고 이것을 통해 오픈AI가 다른 텍스트의 의미를 이해하고 비슷한
의미의 다른 것들에 가깝게 배치할 수 있다는 것을 알게 되었는데요.
그게 핵심이에요
이 2D 모형은 정말 멋졌어요
2D 표현보다 더 좋은 게 있을까요?
당연히 있죠
3D 표현이 있어요 그게 다음에 할 일이죠
3D로 해보죠 간단하거든요 2를 3으로 바꾸는 것만큼요
그럼 3D의 이 벡터를 시각화할 수 있어요
그렇게 간단하지 않았어요
여기에 3D도 넣어야 했어요. 다른 벡터들도 만져야 했죠. 하지만
꽤 비슷해요.
타이틀도 2D에서 3D로 바꿔야 했어요
어쨌든, 어떤지 보죠
여기 있네요
이게 벡터예요 2D에서 3D로 영사된 거죠
첫 번째로 눈치챌 수 있는 건 사실 아주 드문 경우라는 거예요
영화처럼 3D가 2D보다 나을 때도 있어요 비트 비트
비트가 좀 뒤죽박죽인 것 같네요
비트는 잘 안 보여요
노란색이 가운데 있는 것처럼 보이긴 해요
초록, 빨강, 파랑은 확실히 구분돼 있고요
하지만 예상하셨듯이 일부 요소가 합쳐졌어요
이 제품의 장점은 상호 작용적으로 놀 수 있다는 거예요
이렇게 돌릴 수 있어요
대단하지 않아요?
이걸 이용해서 어떻게 배치됐는지 더 잘 알 수 있어요 get get get get it
둘 사이에 차이가 있다는 걸 알 수 있죠
하지만 2D 묘사만큼 명확하진 않은 것 같아요
그래도 보기 좋아요
Get up 하면 포인트 뒤에 있는 의미가 보이시죠?
물론 아까처럼 노란색은 어바웃입니다 모든 것의 중간에 있는 것처럼
보이죠 아까 말씀드린 것과 일치합니다 여기 이 파란색은 좀 특이하죠
3D로 표현한 비트도 충분히 즐길 수 있어요 2D가 어떤 면에서는
더 명확하긴 하지만요
벡터 실험은 이걸로 끝났는데 중요한 게 있어요 이제 여러분에게 달렸다는 거죠 이
도표를 보고 텍스트의 다양한 덩어리를 검사하는 게 아니라 자신의 텍스트 덩어리를
추가하는 거예요
간단한 방법은 문서를 지식 저장소에 넣는 겁니다 지식 기반 디렉터리에 말이에요 Put
그렇게만 하면 바로 효과가 나타나죠
텍스트 로더 클래스도 활용할 수 있어요 문서를 그냥 드롭하는 대신 랑가인 코드를 이용해 청크를
추가하는 거죠
하지만 덩어리들을 넣고 나면 벡터 공간에서 어디에 도달하는지 보고 어떻게 작동하는지 감을 잡으세요 Get in get in
get
또는 전체 지식 기반 디렉터리를 대체할 수도 있습니다 다른 것으로 이름을
바꾸고 새 디렉터리를 생성해 아주 간단한 것으로 채우는 거죠 문서가 벡터 스페이스 내 다른 위치에
어떻게 놓이는지 실험할 수 있도록요 Get up Get up
아주 중요한 숙제예요 다음 단계에 대한 기반을 제공하거든요 실제로
Get을 하는 단계요
먼저 슬라이드로 돌아가죠