AIxiv 칼럼은 본 사이트에 학술적, 기술적 내용을 게재하는 칼럼입니다. 지난 몇 년 동안 이 사이트의 AIxiv 칼럼에는 전 세계 주요 대학 및 기업의 최고 연구실을 대상으로 한 2,000개 이상의 보고서가 접수되어 학술 교류 및 보급을 효과적으로 촉진하고 있습니다. 공유하고 싶은 훌륭한 작품이 있다면 자유롭게 기여하거나 보고를 위해 연락주시기 바랍니다. 제출 이메일: liyazhou@jiqizhixin.com, zhaoyunfeng@jiqizhixin.com
이 기사의 저자는 OpenSearch 중국 R&D 팀의 기계 학습 리더이자 기계 학습 엔지니어인 Geng Zhichao와 Guan Cong 박사입니다. OpenSearch는 Amazon Cloud Technology에서 시작된 순수 오픈 소스 검색 및 실시간 분석 엔진 프로젝트입니다. 현재 이 소프트웨어는 5억 건이 넘는 다운로드를 기록하고 있으며, 커뮤니티에는 전 세계적으로 70개 이상의 기업 파트너가 있습니다.
대형 모델이 폭발적으로 증가한 이후 의미 검색은 점차 대중적인 기술이 되었습니다. 특히 RAG(검색 증강 생성) 애플리케이션에서는 검색 결과의 관련성이 AI 생성의 최종 효과를 직접적으로 결정합니다. 현재 시중에 나와 있는 대부분의 의미 검색 구현 솔루션은 언어 모델을 사용하여 텍스트 문자열을 고차원 벡터로 인코딩하고 근사 k-이웃 검색(k-NN)을 사용합니다. 많은 사람들이 VectorDB 및 언어 모델 배포(GPU 필요)의 높은 비용으로 인해 단념합니다. 최근 Amazon OpenSearch는 Amazon Shanghai Artificial Intelligence Research Institute와 함께 OpenSearch NeuralSearch 플러그인에서 Neural Sparse function을 출시했습니다. 이 기능은 현재 의미 검색에서 직면하고 있는 다음 세 가지 문제를 해결합니다.
- 다른 쿼리에 대한 상관 성능의 안정성: 제로샷 의미 검색을 위해서는 의미 코딩 모델이 서로 다른 배경을 가진 데이터 세트에 대해 좋은 상관 성능을 가져야 합니다. 사용자가 데이터 세트를 미세 조정할 필요 없이 상자에 표시됩니다. Neural Sparse는 Sparse Coding과 Term Vector의 상동 특성을 활용하여 익숙하지 않은 텍스트 표현(산업별 단어, 약어 등)이 발견될 경우 텍스트 매칭으로 다운그레이드하여 터무니없는 검색 결과를 피할 수 있습니다.
- 온라인 검색의 시간 효율성: 실시간 검색 애플리케이션에서 낮은 대기 시간의 중요성은 분명합니다. 현재 널리 사용되는 의미 검색 방법에는 일반적으로 의미 인코딩과 인덱싱이라는 두 가지 프로세스가 포함됩니다. 이 두 프로세스의 속도는 검색 애플리케이션의 엔드투엔드 검색 효율성을 결정합니다. Neural Sparse의 고유한 문서 전용 모드는 온라인 코딩 없이 텍스트 일치와 유사한 대기 시간으로 일류 언어 모델에 필적하는 의미 검색 정확도를 달성할 수 있습니다.
- 색인 저장소 리소스 소비: 상업용 검색 애플리케이션은 저장소 리소스 소비에 매우 민감합니다. 막대한 양의 데이터를 인덱싱할 때 검색 엔진의 운영 비용은 스토리지 리소스 소비와 밀접한 관련이 있습니다. 관련 실험에서 Neural Sparse는 동일한 크기의 데이터를 인덱싱하는 데 k-NN 인덱싱의 1/10만 필요했습니다. 동시에 메모리 소비량도 k-NN 인덱스보다 훨씬 적습니다. ㅋㅋㅋ 관련성 데모
- 문서 홈페이지: https://opensearch.org/docs/latest/search-plugins/neural-sparse-search/
- 프로젝트 Github 주소: https://github.com/opensearch-project/neural- search
네이티브 Lucene 인덱스와 결합된 희소 인코딩현재 의미 검색의 주요 방법은 문서 에 그리고 쿼리 텍스트는 언어 인코딩 모델에 의해 고차원 공간의 벡터로 변환됩니다. 예를 들어 Sentence-BERT의 TASB 모델은 768차원 벡터를 생성하고 All-MiniLM-L6은 텍스트를 384차원 벡터로 변환합니다. 이러한 유형의 고차원 벡터를 인덱싱하려면 초기 트리 구조 기반 FLANN, 해시 기반 LSH, 이후 이웃 그래프 및 스킵 테이블 기반 HNSW와 같은 특수 k-NN 검색 엔진을 사용해야 합니다. 최신 양자화 기반 FAISS 엔진입니다. Sparse 인코딩은 텍스트를 토큰 및 가중치 세트로 변환합니다. 여기서 토큰은 언어 코딩 모델이 분할기를 사용하여 텍스트를 잘라낸 후 생성된 텍스트 단위입니다. 예를 들어, WordPiece 스플리터를 사용하면 토큰은 어느 정도 "단어"로 이해될 수 있지만, 단어가 너무 길어서 두 개의 토큰으로 분할되는 상황도 있을 수 있습니다. ㅋㅋ 희소 인코딩과 밀집 인코딩의 비교 희소 인코딩에 의해 생성된 토큰 가중치 조합은 기존 텍스트 일치 방법에서 사용되는 용어 벡터와 매우 유사하므로 기본 Lucene 인덱스는 Open에서 사용할 수 있습니다. 검색 드물게 인코딩된 문서를 저장합니다. k-NN 검색 엔진에 비해 기본 Luence 엔진은 더 가볍고 리소스를 덜 차지합니다.
다음 표는 텍스트 일치를 위해 Lucene을 사용하고, k-NN 엔진을 사용하여 밀집 인코딩을 저장하고, Lucene을 사용하여 희소 인코딩을 저장할 때의 디스크 소비와 런타임 메모리(런타임 RAM) 소비를 비교한 것입니다. ㅋㅋㅋ -- BEIR 기사에 따르면 그리고 현재의 밀집 코딩 모델의 대부분은 MSMAARCO 데이터 세트를 기반으로 미세 조정되었으므로 모델은 이 데이터 세트에서 매우 잘 수행됩니다. 그러나 다른 BEIR 데이터 세트에 대해 제로 샷 테스트를 수행할 때 밀집 코딩 모델의 상관 관계는 데이터 세트의 약 60%~70%에서 BM25를 초과할 수 없습니다. 이는 우리가 직접 재현한 비교 실험에서도 확인할 수 있습니다(아래 표 참조). ㅋㅋ 일부 데이터 세트에 대한 여러 방법의 상관 성능 비교 익숙하지 않은 데이터 세트에서 희소 코딩이 조밀 코딩보다 더 나은 성능을 발휘한다는 실험에서 발견되었습니다. 현재 이를 확인할 수 있는 자세한 정량적 데이터는 없지만, 일부 샘플 분석에 따르면 그 장점은 주로 두 가지 점에 있습니다. 1) 동의어 연관에서 희소 코딩이 더 두드러지고, 2) 전혀 익숙하지 않은 텍스트 표현을 접할 때 예를 들어, 일부 전문 용어의 경우 희소 코딩은 이러한 용어 토큰의 가중치를 높이고 관련 토큰의 가중치를 약화시키는 경향이 있어 검색 프로세스가 키워드 일치로 퇴화되고 안정적인 상관 성능을 추구하게 됩니다.
BEIR 벤치마크 실험에서 Neural Sparse의 두 가지 방법이 Dense Coding 모델과 BM25에 비해 상관 점수가 더 높은 것을 확인할 수 있습니다.
Neural Search는 최고의 온라인 검색 속도를 제공하는 모드도 제공합니다. 이 모드에서는 검색할 문서만 드물게 인코딩됩니다. 반면, 온라인 검색 중에는 쿼리 텍스트가 인코딩을 위한 언어 인코딩 모델을 호출하지 않습니다. 대신 토크나이저만 사용하여 쿼리 텍스트를 분할하세요. 딥러닝 모델의 호출 과정이 생략되기 때문에 온라인 검색 지연을 대폭 줄일 수 있을 뿐만 아니라, GPU 컴퓨팅 파워 등 모델 추론에 필요한 컴퓨팅 리소스를 대폭 절약할 수 있습니다. 다음 표에서는 MSMAARCO v2 100만에서 텍스트 일치 검색 방법 BM25, 조밀한 인코딩 검색 BERT-TASB 모델, 쿼리 인코딩 바이 인코더 방법을 사용한 희소 인코딩 검색, 희소 인코딩 검색 전용 문서 인코딩 doc-only를 비교합니다. 볼륨 레벨 데이터 세트의 속도 비교. 문서 전용 인코딩 모드는 BM25와 비슷한 속도 성능을 가지고 있음을 확실히 알 수 있으며, 앞 절의 표를 보면 문서 전용 인코딩 모드의 상관 성능이 쿼리 스파스 인코딩과 다르지 않다는 것을 알 수 있습니다. 방법이 너무 많아요. 문서 전용 인코딩 모드는 매우 비용 효율적인 선택이라고 할 수 있습니다. 더 빠르게: 가속을 위해 2단계 검색을 사용하세요.
이전 기사에서 언급했듯이 희소 인코딩 프로세스 중에 텍스트는 토큰과 가중치 집합으로 변환됩니다. 이 변환은 가중치가 낮은 많은 수의 토큰을 생성하지만 이러한 토큰은 검색 프로세스에서 대부분의 시간을 차지하지만 최종 검색 결과에 대한 기여는 중요하지 않습니다.
따라서 우리는 첫 번째 검색에서 이러한 낮은 가중치 토큰을 먼저 필터링하고 높은 순위의 토큰에만 의존하여 상위 문서를 찾는 새로운 검색 전략을 제안합니다. 그런 다음 선택된 문서에 이전에 필터링된 저중량 토큰이 다시 도입되어 최종 점수를 얻기 위한 두 번째 세부 채점을 수행합니다.
이 방법을 통해 두 부분에서 지연을 크게 줄입니다. 첫째, 검색의 첫 번째 단계에서는 역 인덱스에서 가중치가 높은 토큰만 일치시켜 불필요한 계산 시간을 크게 줄입니다. 둘째, 정확한 작은 범위의 결과 문서 내에서 다시 점수를 매길 때 잠재적으로 관련 있는 문서에 대해서만 가중치가 낮은 토큰의 점수만 계산하여 처리 시간을 더욱 최적화합니다. 결국 이 개선된 방법은 문서 인코딩 모드(doc-only)에서 BM25 검색에 가까운 지연 성능을 달성했고, 쿼리 인코딩 모드(bi-encoder)에서는 5배 더 빨라졌습니다. 8배, 신경망 검색의 대기 시간 성능과 처리량이 크게 향상되었습니다. 다음은 일반적인 Beir 데이터세트 4개에 대한 표준 Neural Sparse, 2단계 Neural Spars, BM25의 지연 비교입니다. 2단계 검색 속도 비교
OpenSearch에서 Neural Spars를 구축하는 5단계 OpenSearch 시맨틱 검색 애플리케이션1. 신경망 검색을 설정하고 활성화합니다
먼저 모델이 로컬 클러스터에서 실행될 수 있도록 클러스터 구성을 설정합니다. PUT /_cluster/settings{"transient" : {"plugins.ml_commons.allow_registering_model_via_url" : true,"plugins.ml_commons.only_run_on_ml_node" : false,"plugins.ml_commons.native_memory_threshold" : 99}}
로그인 후 복사
2. 인코더 배포Opensearch에는 현재 3개의 오픈 소스 모델이 있습니다. 관련 등록 정보는 공식 문서에서 얻을 수 있습니다. amazon/neural-sparse/opensearch-neural-sparse-encoding-v1을 예로 들어보겠습니다. 먼저 등록 API를 사용하여 등록합니다.
POST /_plugins/_ml/models/_register?deploy=true{ "name": "amazon/neural-sparse/opensearch-neural-sparse-encoding-v1", "version": "1.0.1", "model_format": "TORCH_SCRIPT"}
로그인 후 복사
{"task_id": "<task_id>","status": "CREATED"}
로그인 후 복사
를 볼 수 있습니다.
task_id를 사용하여 자세한 등록 정보 얻기: GET /_plugins/_ml/tasks/
로그인 후 복사
API 반환에서 특정 model_id를 얻을 수 있습니다:{"model_id": "<model_id>","task_type": "REGISTER_MODEL","function_name": "SPARSE_TOKENIZE","state": "COMPLETED","worker_node": ["wubXZX7xTIC7RW2z8nzhzw"], "create_time":1701390988405,"last_update_time": 1701390993724,"is_async": true}
로그인 후 복사
3 인덱싱하기 전에 각 문서를 설정합니다. 필요 인코딩된 텍스트 필드를 희소 벡터로 변환해야 합니다. OpenSearch에서 이 프로세스는 전처리기를 통해 자동화됩니다. 다음 API를 사용하여 오프라인 인덱싱을 위한 프로세서 파이프라인을 생성할 수 있습니다.
PUT /_ingest/pipeline/neural-sparse-pipeline{ "description": "An example neural sparse encoding pipeline", "processors" : [ { "sparse_encoding": { "model_id": "<model_id>", "field_map": { "passage_text": "passage_embedding" } } } ]}
로그인 후 복사
2단계 가속 기능(필수 아님)을 활성화해야 하는 경우 2단계 검색 파이프라인을 생성하고 다음과 같이 설정해야 합니다. 인덱스가 생성된 후의 기본값은 검색 파이프라인입니다.
기본 매개변수를 사용하여 2단계 가속 검색 파이프라인을 구축하는 방법은 다음과 같습니다. 자세한 매개변수 설정 및 의미는 2.15 이상 버전의 공식 OpenSearch 문서를 참조하세요.
PUT /_search/pipeline/two_phase_search_pipeline{ "request_processors": [ { "neural_sparse_two_phase_processor": { "tag": "neural-sparse", "description": "This processor is making two-phase processor." } } ]}
로그인 후 복사
4. 인덱스 설정
神经稀疏搜索利用 rank_features 字段类型来存储编码得到的词元和相对应的权重。索引将使用上述预处理器来编码文本。我们可以按以下方式创建索一个包含两阶段搜索加速管线的索引(如果不想开启此功能,可把 `two_phase_search_pipeline` 替换为 `_none` 或删除 `settings.search` 这一配置单元)。
PUT /my-neural-sparse-index{ "settings": { "ingest":{ "default_pipeline":"neural-sparse-pipeline" }, "search":{ "default_pipeline":"two_phase_search_pipeline" } }, "mappings": { "properties": { "passage_embedding": { "type": "rank_features" }, "passage_text": { "type": "text" } } }}
로그인 후 복사
在设置索引之后,客户可以提交文档。客户提供文本字段,而摄取进程将自动将文本内容转换为稀疏向量,并根据预处理器中的字段映射 field_map 将其放入 rank_features 字段:PUT /my-neural-sparse-index/_doc/{ "passage_text": "Hello world"}
로그인 후 복사
在索引中进行稀疏语义搜索的接口如下,将 替换为第二步中注册的 model_id:
GET my-neural-sparse-index/_search{ "query":{ "neural_sparse":{ "passage_embedding":{ "query_text": "Hi world", "model_id": <model_id> } } }}
로그인 후 복사
OpenSearch 是一种分布式、由社区驱动并取得 Apache 2.0 许可的 100% 开源搜索和分析套件,可用于一组广泛的使用案例,如实时应用程序监控、日志分析和网站搜索。OpenSearch 提供了一个高度可扩展的系统,通过集成的可视化工具 OpenSearch 控制面板为大量数据提供快速访问和响应,使用户可以轻松地探索他们的数据。OpenSearch 由 Apache Lucene 搜索库提供技术支持,它支持一系列搜索及分析功能,如 k - 最近邻(KNN)搜索、SQL、异常检测、Machine Learning Commons、Trace Analytics、全文搜索等。위 내용은 Amazon Cloud 혁신 '신경 스파스 검색(Neural Sparse Retrieval)”: 의미론적 검색을 달성하려면 텍스트 일치만 필요합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!