다음 대화에서 논의된 아이디어를 구현하기 위한 Dice.com 코드:
이는 https://github.com/DiceTechJobs/ConceptualSearch(슬라이드 및 비디오 링크 포함)에서 찾을 수 있는 '개념 검색'에 대한 나의 이전 작업을 확장합니다. 이 강연에서는 반전된 인덱스를 사용하여 규모에 맞게 벡터를 검색하는 다양한 접근 방식을 제시합니다. 이는 다음을 포함하여 대략적인 k-최근접 이웃 검색에 대한 접근 방식을 구현합니다.
역 인덱스 내에서 이러한 아이디어를 효율적으로 구현하고 쿼리할 수 있는 방법을 설명합니다.
업데이트: LucidWorks의 Trey Grainger 및 Erik Hatcher와 대화한 후 그들은 용어 가중치를 인덱스에 포함하고 특수 페이로드 인식 유사성 기능(필요하지 않음)을 사용하는 솔루션에 대해 페이로드 대신 용어 빈도를 사용할 것을 권장했습니다. 페이로드는 상당한 성능 저하를 초래합니다. 이에 대한 문제는 음수 가중치입니다. 음수 용어 빈도를 인코딩하는 것이 불가능하다고 가정하지만 양수 및 음수 가중치 토큰에 대해 서로 다른 토큰을 사용하고 쿼리 시간에 유사한 조정을 수행하여 해결할 수 있습니다(음수 부스트가 가능한 경우). 필요에 따라 Solr에 적용할 수 있습니다).
Lucene 문서: Lucene 구분 용어 빈도 필터
여기에 적용할 수 있는 Lucene 코어에 대한 최근 업데이트도 있으며, 이 글을 쓰는 시점에 곧 Elastic Search에 포함될 예정입니다: Block Max WAND. 이는 정확한 결과 수를 알 필요는 없지만 가능한 한 빨리 상위 N개 결과를 얻는 데 관심이 있는 대규모 부울 OR 쿼리의 속도를 크게 향상시킵니다. 여기서 논의하는 모든 접근 방식은 상대적으로 큰 OR 쿼리를 생성하므로 이는 매우 관련성이 높습니다. 또한 현재 최소 일치 일치 구현에는 유사한 최적화가 포함되어 있으므로 적절한 mm 설정을 사용하여 동일한 종류의 성능 향상을 이미 얻을 수 있다는 내용도 읽었습니다. 이는 제가 이미 코드에서 실험하고 있던 것입니다.
2018 활성화: '검색 벡터'
Haystack 2019: '벡터로 검색하기'
Simon Hughes (Dice.com 수석 데이터 과학자)