찾는 법: 낱말이 아니라 뜻으로
검색 0건은 「없다」가 아니다
조직 위키와 AI 기억의 넷째 갈래입니다. 분명히 있는 것을 AI가 「없다」고 보고했던 자리와, 위키 전체를 그래프로 보며 빈틈을 찾은 기록을 모았습니다.
요지
사람은 뜻으로 기억하고 AI는 낱말로 검색하기 때문에, 둘이 어긋나면 AI는 쉽게 「없다」고 말합니다. 검색은 무엇이 「있다」는 것만 증명하고, 「없다」는 끝까지 읽은 뒤에만 말할 수 있습니다. 찾는 대상이 돌아가는 프로그램이라면 이름 문자열보다 실제로 돌고 있는 실체부터 봅니다. 검색 결과 0건이 측정의 고장일 수 있다는 일반 원칙은 측정의 함정의 3절에 있고, 이 글은 기억과 기록을 찾는 자리에서 그것이 어떻게 나타났는지 적습니다.
1. 사람의 기억은 뜻으로 저장된다
「‘의도’를 주제로 위키에 올린 유명한 논문 요약이 있다」는 말을 듣고, AI가 로컬 위키와 라이브 위키와 저장소 이력을 「의도」라는 낱말로 검색했습니다. 0건이 나오자 「없다」고 보고했고, 그 뒤로 다른 논문을 다섯 번 짚었다가 모두 빗나갔습니다. 찾던 것은 어텐션을 다룬 가장 유명한 논문의 요약 노드였고, 그 본문에는 「의도」라는 낱말이 한 번도 나오지 않았습니다. 그날 대화의 주제가 의도였기 때문에 사람의 기억 속에서 「주목」이 「의도」로 물들어 있었던 것입니다.
그 일의 기록에 따라 정한 순서는 이렇습니다.
- 첫 검색이 0건이면 검색 범위를 넓히기 전에 낱말부터 바꿉니다. 유의어, 영어 표현, 가까운 개념으로 다시 찾습니다.
- 「유명한 무엇」이라는 말을 들으면 그 분야에서 가장 유명한 후보 한두세 개부터 맞춰 보는 편이 검색보다 빠릅니다.
- 세 번 빗나가면 네 번째 추측을 하지 않고, 후보 목록을 보여 드리며 짚어 달라고 합니다.
- 사람이 쓴 낱말이 그날 대화의 낱말과 같으면 기억이 물들었을 수 있다고 의심합니다.
2. AI가 제목을 붙인 문서는 본문으로 찾는다
예전에 AI 채팅 서비스와 나눈 대화를 「역사로 남기자고 저장해 둔 것」을 찾아 달라는 요청이 있었습니다. AI는 파일 이름에 「역사」「기록」「아카이브」가 들어간 문서를 로컬과 클라우드 드라이브에서 찾았고, 모두 0건이 나오자 「없다」고 보고했습니다. 실제로는 드라이브에 그런 문서가 103건 있었습니다.
채팅 서비스에서 대화를 문서로 저장하면 제목을 AI가 내용에 맞춰 붙입니다. 사람은 「역사로 남긴 것」으로 기억하지만 파일 이름은 대화 내용을 요약한 문장이라, 사람이 떠올린 검색어가 제목에 한 글자도 없습니다.
- 파일 이름이 아니라 본문 전체를 검색합니다. 검색어는 일반적인 낱말보다 그 사람만 쓰는 고유한 말, 예를 들어 그 사람이 쓰는 호칭이나 상대방 이름이 결정적입니다.
- 기간으로 자르지 말고 문서 종류로 훑습니다. 사진과 첨부 파일이 수천 건이면 기간 검색은 쪽수 한도에 걸려 아무 말 없이 잘립니다.
- 저장본은 한 폴더에 모여 있지 않습니다. 폴더 하나를 보고 「이게 전부」라고 하지 않고, 찾은 문서들의 상위 폴더를 거꾸로 짚어 흩어진 자리를 모읍니다.
- 같은 날 같은 제목으로 여러 번 저장된 문서가 있어서, 한꺼번에 내려받으면 서로 덮어씁니다. 우리 경우엔 103건이 97건이 됐으니, 저장 시각을 이름에 붙여 모두 살립니다.
3. 검색은 「있다」만 증명한다
한 분야의 앱을 만든 사람이 쓴 글 58편을 모아 두고, 기록에 「전문 수집 완료」라고 적은 일이 있었습니다. 그 뒤 세션들에서 AI는 열 편만 끝까지 읽고 나머지는 핵심어 검색만 하고서, 어떤 개념의 정의가 그 글들에 「없다」고 선언했습니다. 「다 읽었느냐」는 질문을 받고 나머지를 전부 읽자, 그 위에 세웠던 결론 세 개가 뒤집혔습니다. 글쓴이는 AI가 검색한 낱말로 쓰지 않았고, 같은 내용을 다른 표현으로 적어 두었습니다.
검색으로는 「있다」만 증명되고, 「없다」는 읽은 뒤에만 선언할 수 있습니다.
- 「없다」고 쓰기 전에 대상을 전부 읽습니다. 152킬로바이트를 다 읽는 비용은 한 번 들지만, 틀린 선언 위에 세운 작업은 전부 다시 해야 합니다.
- 기록에는 「수집 완료」와 「다 읽음」을 다른 말로 적습니다. 같은 말로 적으면 다음 세션의 AI가 읽은 줄 알고 넘어갑니다. 이 일의 뿌리가 그 한 낱말이었습니다.
교재에서 구조를 가져올 때도 같습니다. 「실패」라는 낱말로 검색해 실패를 다룬 절이 있는 교재로 열두 권을 골랐는데, 확인해 보니 그중 적어도 두 권에는 실패 절이 없었습니다. 한 권은 넷째 장이 「주제」였고 다른 한 권은 「원칙」이었으며, 검색은 본문에 지나가듯 나온 말을 잡은 것이었습니다. 핵심어 검색은 후보를 고르는 데까지만 쓰고, 무엇을 가져올지와 그 경계는 장과 항목 번호의 구조를 읽어서 정합니다.
4. 자산은 문자열이 아니라 실체부터 찾는다
「거래명세서 사진을 대화방에 올리면 회계 프로그램에 자동으로 입력되는 봇이 있다, 이미 검증까지 끝난 것이다」라는 말을 듣고, AI가 회계 프로그램 이름으로 저장소를 검색했습니다. 빈 폴더 하나와 「미구현」이라 적힌 목록만 나왔고, AI는 그런 자산이 없다고 두 번 보고했습니다. 봇 목록을 찾아보라는 말을 듣고서야 갖고 있던 봇 열쇠로 봇 이름을 조회했는데, 한 번에 「거래명세서 봇」이라는 이름이 나왔습니다. 코드는 매장의 다른 컴퓨터에 통째로 있었습니다.
우리 기록에 따르면 문자열 검색은 이런 경우를 못 잡습니다. 파일이 다른 기계에 있을 때, 엑셀 양식을 만드는 코드라서 제품 이름이 코드에 나오지 않을 때, 그리고 엉뚱한 낱말이 비슷하게 걸려 오탐만 쏟아질 때입니다.
- 실체를 먼저 조회하는데, 봇이면 봇 정보 조회, 서비스면 돌고 있는 서비스 목록, 도메인이면 네임서버와 응답 헤더를 봅니다.
- 그 실체를 쓰는 코드를 거꾸로 짚습니다. 열쇠의 변수 이름으로 검색하면 나옵니다.
- 어디까지 봤는지를 먼저 말해서 「이 기계에서만 봤다」를 밝히고, 안 본 곳은 안 봤다고 합니다.
- 그래도 없으면 그때 다른 기계와 백업까지 넓혀 찾습니다.
「내 저장소에 없다」를 「존재하지 않는다」로 옮기지 않습니다. 회계 프로그램은 매장과 사무실 컴퓨터에서 도니, 그 도구가 매장 컴퓨터에 있는 편이 오히려 자연스러웠습니다.
5. 위키를 지식 그래프로 보면 빈틈이 보인다
작업 기록에 따르면 위키 노드 86편을 오픈소스 위키 그래프 도구로 지식 그래프로 바꿔 본 적이 있습니다. 개념 390개와 연결 724개가 나왔고, 글로 읽을 때는 안 보이던 세 가지가 저절로 드러났습니다.
- 위키의 척추, 곧 여러 주제 무리를 잇는 다리 노드가 무엇인지 보였습니다.
- 같은 개념이 다른 이름으로 잡힌 표기 불일치가 28건 나왔고, 그것이 위키를 정리할 목록이 됐습니다.
- 어디에도 거의 이어지지 않은 고립 개념이 161개 나왔고, 그것이 앞으로 쓸 글감 목록이 됐습니다.
그래프의 맥락을 AI 프롬프트 앞에 붙여 주면 위키에 없는 연결을 AI가 지어내기 어려워집니다. 그 그래프 도구는 설치할 때 AI 지시문 파일 끝에 안내 문장을 스스로 덧붙이는 옵션이 있으니, 지시문을 계층으로 관리하는 조직이라면 설치 전에 알고 들어갑니다.
대량 문서를 벡터 데이터베이스에 조각으로 넣어 둔 경우에는 조각째 그래프로 넣지 않습니다. 우리 경우엔 조각 3,125개를 원본 문서 257개로 다시 이어 붙여 넣었는데, 처리 단위가 그만큼 줄었고 문서 단위로 읽으니 개념 추출도 나아졌습니다. 한국어 개념의 노드 이름은 라벨을 그대로 쓰는 일정한 한글 이름으로 정해, 같은 개념이 여러 문서에 걸쳐 나와도 한 노드로 합쳐지게 합니다. 그렇게 하자 개념 1,264개가 797개로 합쳐졌습니다.
그래프 전용 데이터베이스를 상시로 들이는 일은 계기가 생길 때 하자는 것이 시험해 본 뒤의 판단입니다. 맛보기 시험은 가볍게 해 볼 만하지만, 이미 추론 기능이 있는 지식 저장소가 돌고 있고, 느리다는 실측이 없고, 서버 메모리가 빠듯하면 미룹니다. 대신 어떤 일이 생기면 다시 볼지를 미리 적어 둡니다. 여러 그래프를 한 화면에서 넘나들 실제 수요, 실측된 느림, AI가 그래프를 실시간으로 묻는 기능, 서버 증설 같은 것입니다.
도구 메모
- 검색 0건이면: 유의어와 영어로 낱말을 바꿔 다시 찾고, 그래도 없으면 후보 목록을 만들어 사람에게 짚어 달라고 한다
- 저장된 대화 찾기: 드라이브의 본문 전체 검색을 쓰고, 정렬 조건과 함께 쓰면 거부되는 서비스가 있으니 정렬은 뺀다
- 자산 찾기: 봇이면 봇 정보 조회, 서비스면 서비스 목록, 도메인이면 네임서버 조회부터 한다
- 위키 그래프: 노드 이름은 일정한 한글 이름으로, 조각 문서는 원본 단위로 다시 이어 붙여 넣는다