유피터랩에 잘 오셨습니다 긴 사슬 세계에서의 첫 실험에 잘 오셨어요
다시 한번 말하지만 저처럼 주피터 노트들을 훑어보는 게 중요해요
이상적으로는 제가 여러분과 얘기하는 동시에 주피터 랩을 띄워
5주 차로 바꾸고 오늘과 오늘, 그리고 오늘 2주 차로 해서 저처럼 이걸 하나씩 할 수 있어요
그게 불가능하다면 그 직후에 최대한 빨리 이걸 시도해 보세요
직접 경험해보는 게 아주 중요합니다 특히 텍스트 덩크나
벡터 같은 개념에 대해 얘기할 때요
제 말의 유효성을 검사하고 실험해보고 직접 보시는 게 아주 중요합니다
코드를 시험해보고 다양한 걸 프린트하세요 막후에서 작동하는 방식에 아주
익숙해지기 위해서요
5주 차 폴더에 들어온 게 2일째예요 지금 보시는 건 전날의
비트 복사본이지만 앞으로 더 나올 거예요
수입품도 있는데 새로운 것도 있네요
랭 체인에서 코드를 불러오는 건 처음이죠 문서 로더라는 걸 불러오겠습니다
파일을 불러오는 걸 도와주는 유틸리티 클래스죠
디렉토리 로더라는 게 있는데 전체 폴더에 로드하는 거죠 개별 텍스트 파일을
로드하는 텍스트 로더요
문자 텍스트 분할기라는 것도 불러오고 있어요
문서를 받아들여서 글자 덩어리로 나누는 거죠
수입 검사 결과나 보죠
제가 몇 가지 상수를 설정했는데 오늘은 사용하지 않겠지만 다음에 쓸 거예요
Get it, get it, get it, it! 자, 그럼 본론으로 들어가죠
지난번에 했던 유치한 거 기억나요? 문서를 읽어 사전에 넣는 거요 Put
열쇠는 문서의 이름이었어요
그 서류의 내용이 가치 있는 거죠
이번에는 좀 더 현명한 비트를 만들 거예요
랑 체인을 쓰면 도움이 돼요
먼저, 지식 기반의 다양한 폴더들의 리스트를 get으로 하고요.
이 폴더들은 회사 계약직 직원들과 제품들이라는 걸 기억하실 거예요
그래서 그걸 폴더에 넣었어요 Put
이제 각각의 폴더에 대해 먼저 문서 유형을 갖게 됩니다 회사 계약 직원 또는 제품이요
그런 다음 이 디렉터리를 로드합니다 디렉터리 로더를 사용해서요 그에 대한 핸들, 디렉터리
경로를 넘기는 곳이죠
텍스트 로더 로더 클래스라는 것도 제출합니다 각각의 파일을 가져오는
데 사용하라고 말해주죠 텍스트 파일이니까요 그렇게 간단해요
그런 다음 loader.load를 호출합니다 그럼 모든 문서를 갖고 오죠
각각의 문서를 반복하는 거죠
각 문서의 메타데이터를 설정할 수 있는지 묻죠
doc 타입이라는 것을 추가하고 Doctype로 설정해야 합니다 회사 계약이든 직원이나
제품이든 간에요
그런 다음 문서라는 목록에 추가하세요
이해하셨길 바라요
실행해 보겠습니다. 그 결과로 이제 문서의 31개 객체가 생겼습니다.
그중 하나가 어떻게 생겼는지 보여드릴게요.
여기 있네요
지식 기반 디렉터리에 있어요
메타데이터에는 소스라는 게 있어서 위치를 알려줘요
그리고 이건 우리가 제품에 추가한 Doctype이에요
그러니까 제품이죠
Ermmd라고 하는데 파일의 전체 콘텐츠죠
제품에 관해 생각해 보면 렐름이라는 게 있어요 md요
그걸 더블 클릭하면 아마도 로드된 것과 같은 것이겠죠
첫 번째 문서도 볼 수 있어요
제품에도 적용되죠
마크의 침착함이죠
왜 그런 건지 아시겠죠?
무작위로 24번을 뽑죠
24번째 서류는 맥신 톰프슨의 직원 인사 기록이에요
맥신도 있네요
문서 같은 직원이고 내용물도 있어요
복잡할 게 없죠
문서를 넣고 문서 유형을 줬는데 그중 31명이 서류에 앉아 있어요
다음으로 할 일은 텍스트 분할기입니다 문서를 가져다가 각
문서를 문자 덩어리로 나누죠
이걸 할 때 랑 체인에 두 가지를 지정하세요
하나는 덩어리 크기입니다 한 덩어리당 대략 몇 글자를 넣어야 하는가 하는 거죠
대강이요 랑 체인에 재량권을 줄 거니까요 합리적인
경계를 분할하도록 해야죠 빈 공간과 빈 줄 같은 거요 문서의 다른
부분 사이의 구역도요
단어나 단어 중간에 컷하는 게 아니에요
말이 안 되죠
그러면 잠재적으로 달 착륙선에 제공할 접촉이 좋지 않을 수 있죠
덩어리 중첩은 캐릭터들이 서로 완전히 분리되지 않게 하는
거예요
어느 정도 겹치게 하고 싶어요
두 덩크 사이에 공통으로 있는 문서의 내용이 있어요
다시 말하지만, 쿼리를 입력하면 그 쿼리와 관련된 많은 부분을 뽑아낼 가능성이
더 크죠.
어떤 연관성이나 비판적인 단어 때문에 위험을 감수하고 싶진 않아요
한 덩어리에만 포함돼요 우리가 포함하지 않는 다른 덩어리는 그것과 아주 가깝죠
그것도 중요해요
청크가 겹치면 잠재적으로 같은 키워드를 포함하는 여러 개의
청크가 생기죠
이게 텍스트 분할기예요
분할 문서라고 하고 문서를 제출하죠
이걸 실행하면 실행될 거예요
그리고 그 물질이 만든 덩어리 하나가 1088이라는 걸 경고해줘요 우리가 요구한 것보다
더 크죠
경계를 존중하는 방법을 영리하게 쓰려고 노력했기 때문이죠
그래서 이렇게 하기로 결정했어요
덩어리가 몇 개인지 보면 123개가 나왔어요 31개의 문서에서 덩어리가 123개
나왔죠
이제 할 수 있는 건 덩어리를 고르는 거예요 5번 덩어리를 골라요 그 덩어리를
보죠
청크 자체에 메타데이터가 있어요 문서 메타데이터처럼요
어디서 왔는지 알아요
우리가 설정한 문서 타입이 있어요
위로요
이 덩어리가 그 제품에서 분리된 거예요
마컴에 관한 제품 요약본이에요
새 섹션에서 시작해서 그 섹션의 끝에서 끝나는 걸 보실 수 있어요
그래서 경계를 존중하는 데 신중해졌죠
대략 천 개의 글자가 들어있죠
바로 전 덩어리랑 겹치는 부분이 있을 거예요
그러기로 했는지 보죠
이 경우엔 앞에 있던 게 아주 작아요
어쨌든, 여러분이 찾아보실 수 있어요 가능한
옵션들을요 청크 사이에 겹치는 거요
그래서 빨리 이 덩어리를 실험해 보고 싶어요
두 덩크에 같은 정보가 들어 있는 예시를 Get get 해 보세요
이제 이 청크를 통해 Doctype 메타데이터를 검사해 올바른 문서 형식이
다 있다고 자신을 설득할 거예요
그럼 모든 덩어리에 뭐가 있는지 보죠
doc 타입의 직원, 계약서 회사, 제품은 네 가지죠
좋은 거죠, 우리가 읽은 4개의 디렉터리와 정확히 일치하니까요
다 괜찮은 것 같네요
그럼 이제 제가 한번 살펴볼게요 이 덩어리들을 하나씩 살펴보면
어떨까요?
랭커스터라는 단어가 들어간 덩어리는요?
랭커스터요
아시는지 모르겠지만 그건 가상의 이름이에요 가상의 회사의 가상의 CEO죠
성이 랭커스터군요
어떤 덩어리에서 그녀의 성이 나오는지 보죠
자, 시작하죠
보험 서류에 이름이 있어요 물론 그 회사의 창립자니까요
인사 기록에도 랭커스터가 있는데 우리 인사 기록 맨 아래예요
성까지 언급된 인사부 기록도 있고요
아마 아시겠지만 지난번에 했던 싸구려 명품 버전에서는 랭커스터라는
단어만 보이는 게 큰 문제였어요
최악의 랭커스터에 비치지 않는 CEO에 관한 정보가 있다면 지난 버전의
장난감에 그게 빠져 있을 거예요
보다시피 에이버리의 이름을 검색하면 정보가 훨씬 많이 나와요 get
it's name으로만 언급돼 있거든요
그래서... 네
또한 CEO라고 적힌 부분도 많이 발견할 수 있을
겁니다 랭커스터라는 단어만 본다면 그 부분을 놓치게 될 수도
있죠
문서를 통해 텍스트 기반의 검색을 하는 게 좋은 방법이 아니라는 느낌을 줍니다 우리가
찾아야 할 컨텍스트의 중요한 부분을 놓칠 수도 있고요
벡터 검색에서 찾는 건 좀 더 영리하게 텍스트뿐
아니라 의미에 숨은 단어도 찾는 거죠
그게 바로 래그의 아이디어예요
이 시점에선 여러분이 문서 읽기에 능숙하길 바랍니다 텍스트 로더와 디렉터리 로더를
이용해 덩어리로 나누죠
이 운동을 하면 다른 덩어리들을 가지고 놀면서 합리적인 부분에서 분리되었고
겹치는 부분도 있다고 스스로 확신하게 되죠
그런 다음 벡터화하고 벡터 데이터베이스에 넣을 준비가 되죠 Let's go