Index de consommation des ressources de stockage : Les applications de récupération commerciales sont très sensibles à la consommation des ressources de stockage. Lors de l’indexation de quantités massives de données, le coût de fonctionnement d’un moteur de recherche est fortement lié à la consommation des ressources de stockage. Dans des expériences connexes, Neural Sparse n’a nécessité que 1/10 de l’indexation k-NN pour indexer la même taille de données. Dans le même temps, la consommation de mémoire est également bien inférieure à l'indice k-NN. ♥
- Page d'accueil de la documentation : https://opensearch.org/docs/latest/search-plugins/neural-sparse-search/
- Adresse Github du projet : https://github.com/opensearch-project/neural- search
Encodage clairsemé combiné à l'index Lucene natifLa principale méthode de récupération sémantique provient de l'encodage dense (Dense Encoding), le document à être récupéré Et le texte de la requête sera converti en vecteur dans un espace de grande dimension par le modèle de codage du langage. Par exemple, le modèle TASB dans Sentence-BERT générera un vecteur à 768 dimensions et All-MiniLM-L6 convertira le texte en un vecteur à 384 dimensions. L'indexation de ce type de vecteur de grande dimension nécessite l'utilisation de moteurs de recherche k-NN spéciaux, tels que le premier FLANN basé sur une structure arborescente, le LSH basé sur le hachage, et plus tard le HNSW basé sur des graphiques voisins et des tables de saut. comme le dernier moteur FAISS basé sur la quantification. Sparse Encoding convertira le texte en un ensemble de jetons et de poids. Le jeton ici est l'unité de texte générée après que le modèle de codage linguistique utilise un segmenteur pour couper le texte. Par exemple, en utilisant le séparateur WordPièce, les jetons peuvent être compris comme des « mots » dans une certaine mesure, mais il peut également y avoir des situations où un mot est trop long et est divisé en deux jetons. Comparaison entre le codage clairsemé et le codage dense
Étant donné que la combinaison jeton-poids générée par le codage clairsemé est très similaire au terme-vecteur utilisé dans les méthodes traditionnelles de correspondance de texte, l'index Lucene natif peut être utilisé dans Open Rechercher Pour stocker des documents peu codés. Comparé au moteur de recherche k-NN, le moteur natif Luence est plus léger et consomme moins de ressources. Le tableau suivant montre la comparaison de la consommation de disque et de la consommation de mémoire d'exécution (RAM d'exécution) en utilisant Lucene pour la correspondance de texte, en utilisant le moteur k-NN pour stocker l'encodage dense et en utilisant Lucene pour stocker l'encodage clairsemé. à à à à elle-même elle-même elle-même elle elle elle-même elle Shen Shen Shen elle Shen Shen Shen elle tout prend elle pour Selon l'article BEIR Et, puisque la plupart des modèles de codage dense actuels sont basé sur un réglage fin de l'ensemble de données MSMAARCO, le modèle fonctionne très bien sur cet ensemble de données. Cependant, lors de la réalisation de tests zéro-shot sur d'autres ensembles de données BEIR, la corrélation du modèle de codage dense ne peut pas dépasser BM25 sur environ 60 à 70 % des ensembles de données. Cela peut également être constaté à partir de nos propres expériences comparatives répliquées (voir tableau ci-dessous).
Comparaison des performances de corrélation de plusieurs méthodes sur certains ensembles de données Nous avons constaté lors d'expériences que le codage clairsemé fonctionne mieux que le codage dense sur des ensembles de données inconnus. Bien qu'il n'existe actuellement pas de données quantitatives plus détaillées pour le confirmer, selon l'analyse de certains échantillons, ses avantages résident principalement dans deux points : 1) le codage clairsemé est plus important dans l'association de synonymes, 2) lorsqu'on rencontre des expressions textuelles totalement inconnues. Par exemple, pour certains termes professionnels, un codage clairsemé aura tendance à augmenter le poids de ces jetons de terme et à affaiblir le poids des jetons associés, ce qui entraînera une dégénérescence du processus de récupération en une correspondance de mots clés et une recherche de performances de corrélation stables. Dans les expériences sur le benchmark BEIR, nous pouvons voir que les deux méthodes de Neural Sparse ont des scores de corrélation plus élevés par rapport au modèle de codage dense et au BM25.
Vitesse extrême : mode d'encodage de documents uniquementNeural Search propose également un mode qui offre la vitesse de récupération en ligne ultime. Dans ce mode, seuls les documents à récupérer sont peu codés. En revanche, lors de la récupération en ligne, le texte de la requête n'invoque pas le modèle de codage du langage pour le codage. Au lieu de cela, utilisez uniquement le tokenizer pour diviser le texte de la requête. Étant donné que le processus d'appel du modèle d'apprentissage profond est omis, cela réduit non seulement considérablement le délai de récupération en ligne, mais permet également d'économiser une grande quantité de ressources informatiques nécessaires à l'inférence du modèle, telles que la puissance de calcul du GPU. Le tableau suivant compare la méthode de récupération de correspondance de texte BM25, la récupération de codage dense modèle BERT-TASB, la récupération de codage clairsemé avec la méthode bi-encodeur de codage de requête et la récupération de codage clairsemé uniquement le codage de document doc uniquement dans MSMAARCO v2 1 million volumes Comparaison de vitesse sur des ensembles de données de niveau. Nous pouvons clairement voir que le mode d'encodage de document uniquement a des performances de vitesse similaires à celles du BM25, et d'après le tableau de la section précédente, nous pouvons voir que les performances de corrélation du mode d'encodage de document uniquement ne sont pas différentes de l'encodage clairsemé de requête. méthode trop. On peut dire que le mode d’encodage de documents uniquement est un choix très rentable. Encore plus rapide : utilisez la recherche en deux étapes pour l'accélération
Comme mentionné dans l'article précédent, lors du processus d'encodage clairsemé, le texte est converti en un ensemble de jetons et de poids. Cette transformation produit un grand nombre de jetons avec des poids faibles. Bien que ces jetons prennent la majeure partie du temps dans le processus de recherche, leur contribution aux résultats finaux de la recherche n'est pas significative.
Par conséquent, nous proposons une nouvelle stratégie de recherche qui filtre d'abord ces jetons de faible poids lors de la première recherche et s'appuie uniquement sur les jetons de poids élevé pour localiser les documents de rang supérieur. Puis sur ces documents sélectionnés, les jetons de faible poids préalablement filtrés sont réintroduits pour une seconde notation détaillée pour obtenir la note finale.
Grâce à cette méthode, nous réduisons considérablement le délai en deux parties : Premièrement, dans la première étape de la recherche, seuls les jetons de poids élevé sont mis en correspondance dans l'index inversé, ce qui réduit considérablement le temps de calcul inutile. Deuxièmement, lors de la notation à nouveau dans une petite plage précise de documents de résultats, nous calculons uniquement les scores des jetons de faible poids pour les documents potentiellement pertinents, optimisant ainsi davantage le temps de traitement. Au final, cette méthode améliorée a atteint des performances de latence proches de celles de la recherche BM25 en mode d'encodage de document (doc-only), et était 5 fois plus rapide en mode d'encodage de requête (bi-encodeur) pour 8 fois, améliorant considérablement les performances de latence et le débit de Neural Search. Ce qui suit est une comparaison de retard du Neural Sparse standard, Neural Spars en deux étapes, BM25 sur les quatre ensembles de données Beir typiques : Comparaison de la vitesse de recherche en deux étapes
5 étapes pour créer des Neural Spars dans OpenSearch dans l'application de récupération sémantique OpenSearch1. Configurez et activez Neural Search
Définissez d'abord la configuration du cluster afin que le modèle puisse s'exécuter sur le cluster local. 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}}
Copier après la connexion
2. Déployez l'encodeurOpensearch dispose actuellement de 3 modèles open source. Les informations d’inscription pertinentes peuvent être obtenues dans les documents officiels. Prenons amazon/neural-sparse/opensearch-neural-sparse-encoding-v1 comme exemple. Utilisez d'abord l'API de registre pour vous inscrire :
POST /_plugins/_ml/models/_register?deploy=true{ "name": "amazon/neural-sparse/opensearch-neural-sparse-encoding-v1", "version": "1.0.1", "model_format": "TORCH_SCRIPT"}
Copier après la connexion
Dans le retour du cluster, vous pouvez voir le task_id{"task_id": "<task_id>","status": "CREATED"}
Copier après la connexion
. Utilisez task_id pour obtenir des informations d'enregistrement détaillées : GET /_plugins/_ml/tasks/
Copier après la connexion
Dans le retour de l'API, nous pouvons obtenir le model_id spécifique :{"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}
Copier après la connexion
3. Configurer le pipeline de prétraitementAvant l'indexation, chaque document. besoins Les champs de texte codés doivent être convertis en vecteurs clairsemés. Dans OpenSearch, ce processus est automatisé via le préprocesseur. Vous pouvez utiliser l'API suivante pour créer un pipeline de processeur pour l'indexation hors ligne : 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" } } } ]}
Copier après la connexion
Si vous devez activer la fonction d'accélération en deux étapes (non obligatoire), vous devez créer un pipeline de recherche en deux étapes et le définir comme la valeur par défaut après la création du pipeline de recherche de l'index. La méthode d'établissement d'un pipeline de recherche accélérée en deux étapes avec des paramètres par défaut est la suivante Pour des paramètres et des significations plus détaillés, veuillez vous référer à la documentation officielle d'OpenSearch de la version 2.15 et ultérieure.
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." } } ]}
Copier après la connexion
4. Définir l'index神经稀疏搜索利用 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" } } }}
Copier après la connexion
在设置索引之后,客户可以提交文档。客户提供文本字段,而摄取进程将自动将文本内容转换为稀疏向量,并根据预处理器中的字段映射 field_map 将其放入 rank_features 字段:PUT /my-neural-sparse-index/_doc/{ "passage_text": "Hello world"}
Copier après la connexion
在索引中进行稀疏语义搜索的接口如下,将 替换为第二步中注册的 model_id:
GET my-neural-sparse-index/_search{ "query":{ "neural_sparse":{ "passage_embedding":{ "query_text": "Hi world", "model_id": <model_id> } } }}
Copier après la connexion
OpenSearch 是一种分布式、由社区驱动并取得 Apache 2.0 许可的 100% 开源搜索和分析套件,可用于一组广泛的使用案例,如实时应用程序监控、日志分析和网站搜索。OpenSearch 提供了一个高度可扩展的系统,通过集成的可视化工具 OpenSearch 控制面板为大量数据提供快速访问和响应,使用户可以轻松地探索他们的数据。OpenSearch 由 Apache Lucene 搜索库提供技术支持,它支持一系列搜索及分析功能,如 k - 最近邻(KNN)搜索、SQL、异常检测、Machine Learning Commons、Trace Analytics、全文搜索等。