Revery 는 Monocle Search Index에서 작동하는 시맨틱 검색 엔진 입니다. Revery를 사용하면 수만 개의 메모, 북마크, 저널 항목, 트윗, 연락처 및 블로그 게시물을 모노클과 같은 동일한 데이터베이스를 검색 할 수 있지만 REAVERY의 초점은 동일한 단어를 공유하지 않더라도 주어진 웹 페이지 또는 쿼리와 유사한 결과를 찾는 키워드 기반 검색 에 중점을 두지 않습니다. 현재 페이지와 관련된 결과를 표현할 수있는 브라우저 확장으로 제공 될뿐만 아니라 Monocle의 검색 페이지와 유사한 표준 웹 앱을 제공합니다.

대부분의 부작용 프로젝트와 달리 데이터 규모와 Revery가 요구하는 계산 작업의 양으로 인해 백엔드가 작성됩니다. 웹 앱과 브라우저 확장자 인 두 클라이언트는 Torus와 함께 구축되었습니다.
매일 그것을 사용하기에 충분히 작동하지만 Revery는 완제품보다 개념 증명 프로토 타입에 가깝습니다. 나는 이와 같은 도구가 메모 및 북마크와 같은 개인 생산성 도구 위에 개인 용도로 구축 될 수 있고 웹을 탐색하고 그러한 도구로 글을 쓰는 느낌을 경험할 수 있음을 보여주고 싶었습니다.
Revery는 그 핵심에서 단일 API 일뿐입니다. API는 일부 텍스트를 취하고 내 개인 문서 모음과 메모를 통해 주어진 텍스트와 가장 관련이있는 가장 중요한 것들을 찾아냅니다. 이것을 흥미롭게 사용하기 위해 브라우저 확장 및보다 표준 웹 기반 검색 인터페이스의 두 가지 인터페이스로 마무리했습니다.
Revery Browser Extension 은이 저장소에서 ./extension 내부에 살고 있으며 정확히 한 가지를 수행합니다. 내가보고있는 모든 웹 페이지에서 Ctrl-Shift-L 을 쳤을 때, 페이지에서 본문의 본문을 긁어 내고, 어떤 부분을 강조한 경우, 내가 읽은 내용과 가장 관련이있는 문서를 찾기 위해 Revery API와 대화 할 것입니다.

키워드 기반 검색 알고리즘이있는 Monocle이 회상에 적합한 경우, 특정 주제에 대한 탐색 에 revery 확장 기능이 좋습니다. 예를 들어 자연어 처리에 대해 읽고 있다면, 몇 가지 키 스트로크를 쳤다. 내가 읽은 다른 기사 나 과거에 찍은 메모를 제시 할 수있다.
우리는 새로운 정보를 첨부 할 수있는 기존 참조 포인트를 찾을 수있을 때 새로운 아이디어를 가장 잘 배웁니다. Revery의 확장은 그 작업을 부분적으로 자동화하고 속도를 높입니다. 예를 들어, 한국의 독특한 문화 및 경제 위치에 대한 기사를 읽는 동안 Revery는 한국 대중 문화와 인구 감소에 대한 완전히 다른 저자와 출처의 몇 가지 관련 뉴스 레터와 기사를 제시하여 훨씬 더 광범위하고 잘 알고있는 맥락에서 읽고있는 내용을 구성하는 데 도움이되었습니다.
나에게 웹 검색 인터페이스는 확장자에 비해 약간 부차적입니다. 그것은 주로 Revery의 기본 기술의 시연으로 존재하며, 또한 확장을 사용할 수 없을 때 (모바일 브라우저에서와 같이) Revery를 사용할 수있는 방법으로도 존재합니다.

웹 인터페이스의 검색 표시 줄은 URL 또는 일부 주요 문구를 사용할 수 있습니다. URL (위의 스크린 샷에서와 같이)이 주어지면 Revery는 검색 인덱스에서 관련 문서를 찾기 위해 웹 페이지 자체를 다운로드하여 읽습니다. 핵심 문구가 주어지면 Revery는 비슷한 단어가 포함되어있는 문서를 제안하고 비슷한 주제에 대해 이야기하려고합니다.
이러한 종류의 검색 인터페이스 (확장과는 달리)는 새로운 것을 생각하는 데 유용합니다. 여기서 관련 단어 목록을 검색 창에 입력하고 즉시 Monocle 요구와 같은 키워드 기반 검색 엔진을 패션하지 않고도 관련된 아이디어 및 문서 목록을 즉시 얻을 수 있습니다.
위에서 언급했듯이 Revery의 핵심은 일부 문서를 취하고 내 검색 인덱스에서 대부분의 관련 문서 목록을 반환하는 단일 API 엔드 포인트입니다. Revery Special을 만드는 것은이 API가 단순히 일치하는 키워드를 스캔하는 것이 아니라 의미 검색을 수행한다는 것입니다. 이는 내용이 국소 적으로 관련이있는 한 상위 결과가 쿼리와 동일한 단어를 포함하지 않을 수 있음을 의미합니다.
이러한 종류의 시맨틱 검색은 인덱스 된 문서의 클러스터 문서 임베드 와 코사인 유사성을 사용하는 검색 알고리즘에 의해 활성화됩니다. 이 프로젝트를 시작할 때 나에게 한 것처럼 당신에게 많은 임의의 단어처럼 들리면 다음과 같이하겠습니다.
먼저, 우리는 단어 임베딩을 이해해야합니다. 단어 임베딩은 자연 언어 단어의 어휘를 우주의 일부 지점 (일반적으로 고차원 수학 공간)에 매핑하는 방법입니다. 예를 들어, 단어가 포함 된 단어의 "과학"이라는 단어는 "과학자"라는 단어에 매우 가깝고, "연구"에 합리적으로 가깝고 "서커스"와는 거리가 멀다. 우리가 단어 임베딩의 맥락에서 "거리"에 대해 이야기 할 때, 우리는 일반적으로 경험적 및 이론적 인 이유 모두에 대해 유클리드 거리가 아닌 코사인 유사성을 사용합니다.
단어 임베딩의 개념은 그다지 새롭지는 않지만, 동일한 데이터의 데이터에서 점점 더 정확하고 유용한 단어 임베딩을 생성하기위한 새로운 방법을 생성하는 능동적 인 연구가 여전히 있습니다. 내 개인 배치의 Revery는 Facebook의 FastText 도구, 특히 공통 크롤링 코퍼스에서 훈련 된 300 개의 차원을 가진 50,000 단어 데이터 세트로 생성 된 Creative Commons 라이센스 단어 임베딩 데이터 세트를 사용합니다.
단어 임베딩은 어떤 단어가 관련되어 있는지 추론 할 수 있지만, 리버리를 위해 단어 목록 인 문서 에 대해 동일한 종류의 추론을 그려야합니다. 고맙게도, 문서의 모든 단어에 대해 단순히 가중치 평균 단어 벡터를 복용하면 문서 전체를 나타내는 "문서 벡터"의 근사치를 얻을 수 있다고 제안하는 충분한 문헌이 있습니다. 단락 벡터 나 Bert와 같은 단어 순서를 취하는 모델과 같이 사용할 수있는 고급 방법이 있지만 Word 벡터 평균은 Revery의 사용 사례에 충분히 효과적이며 구현 및 테스트가 간단 하므로이 접근 방식을 사용하여 Revery가 고수합니다.
우리가 단어 임베딩을 사용하여 문서 벡터를 문서 벡터를 생성 할 수 있으면 나머지 알고리즘이 제자리에 들어갑니다. 스타트 업에서 Revery의 API 서버 인덱스를 인덱싱하고 내 데이터 세트에서 찾을 수있는 모든 문서 (쓰기시 약 25,000 명)에서 찾을 수있는 모든 문서에 대한 문서 벡터를 생성하고 모든 요청에 따라 Atgorithm은 요청 된 문서의 문서 벡터를 계산하고 쿼리 문서까지의 검색 거리에서 검색 지수를 정렬하여 일부 상단 N 결과를 반환합니다.
Revery 내 에서이 알고리즘의 모든 부분은 이동 중에 손으로 작성됩니다. 이것은 몇 가지 이유입니다.
리버리 클라이언트 (확장 및 웹 앱)는이 단일 API 엔드 포인트와 대화합니다. 고객 자체는 상당히 평범하기 때문에 여기서 어떻게 작동하는지 설명하지 않습니다.
여기서 Monocle과 공유 한 것과 동일한 면책 조항도 적용됩니다.
Revery는 Monocle의 인덱서가 생성 한 검색 지수에 따라 달라 지므로 REAVER는 최근에 실행하기 전에 Monocle의 검색 인덱스 사본을 가지고 있는지 확인합니다.
Revery에는 동일한 저장소에 두 개의 독립적 인 코드베이스가 있습니다. 첫 번째는 Chrome Extension이며, 이는 ./extension 폴더 내부에 전적으로 남아 있습니다. 설정 방법은 다음과 같습니다.
확장자는 Revery API와 대화하려면 API 인증 토큰이 필요합니다. 나는 보통 임의로 긴 임의의 문자열을 선택합니다. 그런 다음 컨텐츠와 함께 token.js 호출 된 ./extension 에 파일을 배치합니다.
const REVERY_TOKEN = '<some API key here>' ; chrome://extensions 로 이동하여 "포장되지 않은로드"를 클릭하여 ./extension 폴더를 "포장되지 않은 확장자"로로드하여 모든 탭에서 확장을 사용할 수있게합니다.
그것이 확장 설정을위한 것입니다. 다음으로 서버를 설정했습니다.
tokens.txt 에 프로젝트 폴더의 루트에 놓습니다. Revery 서버는이 파일의 공백 트리밍 내용을 가져 와서 API 키로 사용합니다.make 프로젝트 폴더에 revery 바이너리 실행 파일을 구축합니다.docs.json 문서 데이터 세트를 인덱서에서 ./corpus/docs.json 으로 복사하십시오.revery 실행 파일을 실행하면 모델 및 검색 색인을 올바르게 사전 프로세스하고 웹 애플리케이션 서버를 시작해야합니다. Revery는 매일 매일 사용하기에 충분히 유용하지만 일반적인 자연어 검색 공간에는 많은 적극적인 연구가 있으며 Revery 자체는 개선의 여지가 많습니다.
데이터 측면에서 :
코드 측면에서 :
이 공간에는 훌륭한 선행 기술도 많이 있습니다. 여기에 모두 나열 할 수는 없지만 Revery의 영감으로 눈에 띄는 몇 가지가 있습니다.