Maison  >  Article  >  Périphériques technologiques  >  Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique

Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique

WBOY
WBOYoriginal
2024-07-02 02:55:57895parcourir
Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique
La rubrique AIxiv est une rubrique où des contenus académiques et techniques sont publiés sur ce site. Au cours des dernières années, la rubrique AIxiv de ce site a reçu plus de 2 000 rapports, couvrant les meilleurs laboratoires des principales universités et entreprises du monde entier, favorisant efficacement les échanges et la diffusion académiques. Si vous souhaitez partager un excellent travail, n'hésitez pas à contribuer ou à nous contacter pour un rapport. E-mail de soumission : liyazhou@jiqizhixin.com ; zhaoyunfeng@jiqizhixin.com

Les auteurs de cet article sont le Dr Yang Yang, responsable de l'apprentissage automatique et ingénieurs en apprentissage automatique Geng Zhichao et Guan Cong de l'équipe R&D d'OpenSearch China. OpenSearch est un projet de moteur de recherche et d'analyse en temps réel purement open source initié par Amazon Cloud Technology. Le logiciel compte actuellement plus de 500 millions de téléchargements et la communauté compte plus de 70 entreprises partenaires dans le monde.

Depuis l'explosion des grands modèles, la récupération sémantique est progressivement devenue une technologie populaire. Surtout dans les applications RAG (retrieval augmentéed Generation), la pertinence des résultats de récupération détermine directement l'effet final de la génération d'IA.

La plupart des solutions de mise en œuvre de récupération sémantique actuellement sur le marché utilisent un modèle de langage pour coder une chaîne de texte dans un vecteur de grande dimension et utilisent la recherche approximative de k-voisin (k-NN Retrieve). De nombreuses personnes sont découragées par le coût élevé du déploiement de VectorDB et du modèle de langage (qui nécessite des GPU).

Récemment, Amazon OpenSearch, en collaboration avec l'Amazon Shanghai Artificial Intelligence Research Institute, a lancé la Neural Sparse function dans le plug-in OpenSearch NeuralSearch, qui résout les trois défis suivants actuellement rencontrés par la récupération sémantique :

  • La stabilité des performances de corrélation sur différentes requêtes : La récupération sémantique Zero-shot nécessite que le modèle de codage sémantique ait de bonnes performances de corrélation sur des ensembles de données avec des arrière-plans différents, c'est-à-dire qu'elle nécessite que le modèle de langage soit utilisé hors du boîte, sans que l'utilisateur ait à affiner l'ensemble de données. Tirant parti des caractéristiques homologues du codage clairsemé et des vecteurs de termes, Neural Sparse peut passer à la correspondance de texte lorsqu'il rencontre des expressions textuelles inconnues (mots spécifiques à un secteur, abréviations, etc.), évitant ainsi des résultats de recherche scandaleux.
  • Efficacité temporelle de la recherche en ligne : L'importance d'une faible latence pour les applications de recherche en temps réel est évidente. Les méthodes de récupération sémantique actuellement populaires incluent généralement deux processus : le codage sémantique et l'indexation. La vitesse de ces deux processus détermine l'efficacité de récupération de bout en bout d'une application de récupération. Le mode unique de documentation uniquement de Neural Sparse peut atteindre une précision de récupération sémantique comparable aux modèles de langage de première classe avec une latence similaire à la correspondance de texte sans codage en ligne.
  • 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

    Points forts techniques

    Encodage clairsemé combiné à l'index Lucene natif

    La 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.

    Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique                                                                                                                                                               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é.

    Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique                                                         à                        à   à            à                                                                                                    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.

    Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantiqueDans 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 uniquement

    Neural 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.

    Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique

    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 Amazon Cloud Innovation « Neural Sparse Retrieval » : seule la correspondance de texte est nécessaire pour réaliser une recherche sémantique

    5 étapes pour créer des Neural Spars dans OpenSearch dans l'application de récupération sémantique OpenSearch

    1. 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}}
    2. Déployez l'encodeur

    Opensearch 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"}

    Dans le retour du cluster, vous pouvez voir le task_id
    {"task_id": "<task_id>","status": "CREATED"}
    .
    Utilisez task_id pour obtenir des informations d'enregistrement détaillées :

    GET /_plugins/_ml/tasks/

    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}


    3. Configurer le pipeline de prétraitement
    Avant 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"        }      }    }  ]}

    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."      }    }  ]}

    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"      }    }  }}

    5. 使用预处理器导入文档并搜索

    在设置索引之后,客户可以提交文档。客户提供文本字段,而摄取进程将自动将文本内容转换为稀疏向量,并根据预处理器中的字段映射 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

    OpenSearch 是一种分布式、由社区驱动并取得 Apache 2.0 许可的 100% 开源搜索和分析套件,可用于一组广泛的使用案例,如实时应用程序监控、日志分析和网站搜索。OpenSearch 提供了一个高度可扩展的系统,通过集成的可视化工具 OpenSearch 控制面板为大量数据提供快速访问和响应,使用户可以轻松地探索他们的数据。

    OpenSearch 由 Apache Lucene 搜索库提供技术支持,它支持一系列搜索及分析功能,如 k - 最近邻(KNN)搜索、SQL、异常检测、Machine Learning Commons、Trace Analytics、全文搜索等。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn