Die AIxiv-Kolumne ist eine Kolumne, in der diese Website akademische und technische Inhalte veröffentlicht. In den letzten Jahren sind in der AIxiv-Kolumne dieser Website mehr als 2.000 Berichte eingegangen, die Spitzenlabore großer Universitäten und Unternehmen auf der ganzen Welt abdecken und so den akademischen Austausch und die Verbreitung wirksam fördern. Wenn Sie hervorragende Arbeiten haben, die Sie teilen möchten, können Sie gerne einen Beitrag leisten oder uns für die Berichterstattung kontaktieren. E-Mail für die Einreichung: liyazhou@jiqizhixin.com; zhaoyunfeng@jiqizhixin.com
Die Autoren dieses Artikels sind Dr. Yang Yang, Leiter für maschinelles Lernen und Ingenieure für maschinelles Lernen Geng Zhichao und Guan Cong vom Forschungs- und Entwicklungsteam von OpenSearch China. OpenSearch ist ein reines Open-Source-Such- und Echtzeit-Analyse-Engine-Projekt, das von Amazon Cloud Technology initiiert wurde. Die Software hat derzeit über 500 Millionen Downloads und die Community besteht aus mehr als 70 Unternehmenspartnern auf der ganzen Welt.
Seit der Explosion großer Modelle hat sich der semantische Abruf allmählich zu einer beliebten Technologie entwickelt. Insbesondere bei RAG-Anwendungen (Retrieval Augmented Generation) bestimmt die Relevanz der Retrieval-Ergebnisse direkt den endgültigen Effekt der KI-Generierung. Die meisten derzeit auf dem Markt erhältlichen semantischen Retrieval-Implementierungslösungen verwenden ein Sprachmodell, um eine Textzeichenfolge in einen hochdimensionalen Vektor zu kodieren, und verwenden die ungefähre k-Neighbor-Suche (k-NN Retrieve). Viele Menschen schrecken durch die hohen Kosten für die Bereitstellung von VectorDB und Sprachmodellen (für die GPUs erforderlich sind) ab. Kürzlich hat Amazon OpenSearch zusammen mit dem Amazon Shanghai Artificial Intelligence Research Institute die Neural Sparse-Funktion im OpenSearch NeuralSearch-Plug-in eingeführt, die die folgenden drei Herausforderungen löst, denen sich der semantische Abruf derzeit gegenübersieht:
- Die Stabilität der Korrelationsleistung bei verschiedenen Abfragen: Der semantische Zero-Shot-Abruf erfordert, dass das semantische Codierungsmodell eine gute Korrelationsleistung bei Datensätzen mit unterschiedlichem Hintergrund aufweist, d Box, ohne dass der Benutzer Feinabstimmungen am Datensatz vornehmen muss. Unter Ausnutzung der homologen Eigenschaften von Sparse-Codierung und Begriffsvektoren kann Neural Sparse bei unbekannten Textausdrücken (branchenspezifischen Wörtern, Abkürzungen usw.) auf Textvergleich zurückstufen und so unverschämte Suchergebnisse vermeiden.
- Zeiteffizienz der Online-Suche: Die Bedeutung geringer Latenz für Echtzeit-Suchanwendungen liegt auf der Hand. Derzeit beliebte semantische Retrieval-Methoden umfassen im Allgemeinen zwei Prozesse: semantische Kodierung und Indizierung. Die Geschwindigkeit dieser beiden bestimmt die End-to-End-Retrieval-Effizienz einer Retrieval-Anwendung. Der einzigartige Nur-Dokument-Modus von Neural Sparse kann eine mit erstklassigen Sprachmodellen vergleichbare semantische Abrufgenauigkeit bei einer Latenz erreichen, die dem Textabgleich ohne Online-Codierung ähnelt.
- Index-Speicherressourcenverbrauch: Kommerzielle Abrufanwendungen reagieren sehr empfindlich auf den Speicherressourcenverbrauch. Bei der Indizierung großer Datenmengen hängen die laufenden Kosten einer Suchmaschine stark vom Verbrauch der Speicherressourcen ab. In verwandten Experimenten benötigte Neural Sparse nur 1/10 der k-NN-Indizierung, um die gleiche Datengröße zu indizieren. Gleichzeitig ist der Speicherverbrauch viel geringer als der k-NN-Index.
Relevanz-Demo
- Dokumentations-Homepage: https://opensearch.org/docs/latest/search-plugins/neural-sparse-search/
- Github-Adresse des Projekts: https://github.com/opensearch-project/neural- Suche
Sparse-Kodierung kombiniert mit nativem Lucene-IndexDie Hauptmethode des aktuellen semantischen Abrufs kommt von der dichten Kodierung (Dense. Enco ding), das Dokument an abgerufen werden Und der Abfragetext wird durch das Sprachcodierungsmodell in einen Vektor in einem hochdimensionalen Raum umgewandelt. Beispielsweise generiert das TASB-Modell in Sentence-BERT einen 768-dimensionalen Vektor und All-MiniLM-L6 konvertiert Text in einen 384-dimensionalen Vektor. Die Indizierung dieser Art von hochdimensionalen Vektoren erfordert die Verwendung spezieller k-NN-Suchmaschinen, wie z. B. das früheste auf Baumstrukturen basierende FLANN, Hash-basierte LSH und später auch HNSW auf Basis von Nachbardiagrammen und Skip-Tabellen als neueste quantisierungsbasierte FAISS-Engine. Sparse Encoding wandelt den Text in einen Satz von Token und Gewichten um. Das Token hier ist die Texteinheit, die generiert wird, nachdem das Sprachcodierungsmodell einen Segmentierer zum Schneiden des Textes verwendet. Mithilfe des WordPiece-Splitters können Token beispielsweise bis zu einem gewissen Grad als „Wörter“ verstanden werden, es kann jedoch auch Situationen geben, in denen ein Wort zu lang ist und in zwei Token aufgeteilt wird. Vergleich zwischen spärlicher Codierung und dichter Codierung
Da die durch spärliche Codierung erzeugte Token-Gewicht-Kombination dem Termvektor, der in herkömmlichen Textanpassungsmethoden verwendet wird Zur Speicherung spärlich kodierter Dokumente. Im Vergleich zur k-NN-Suchmaschine ist die native Luence-Engine leichter und verbraucht weniger Ressourcen. Die folgende Tabelle zeigt den Vergleich des Festplattenverbrauchs und des Laufzeit-RAM-Verbrauchs bei der Verwendung von Lucene für den Textabgleich, der Verwendung der k-NN-Engine zum Speichern der dichten Codierung und der Verwendung von Lucene zum Speichern der spärlichen Codierung. zu ihr selbst selbst selbst sie selbst sie selbst sie sie selbst sie selbst sie shen shen Shen Shen Shen Shen sie nimmt sie für according in den Beir -Artikel und da die meisten aktuellen dichten Codierungsmodelle sind Basierend auf der Feinabstimmung des MSMAARCO-Datensatzes schneidet das Modell bei diesem Datensatz sehr gut ab. Bei der Durchführung von Zero-Shot-Tests an anderen BEIR-Datensätzen darf die Korrelation des dichten Codierungsmodells jedoch bei etwa 60 % bis 70 % der Datensätze BM25 nicht überschreiten. Dies geht auch aus unseren eigenen wiederholten Vergleichsexperimenten hervor (siehe Tabelle unten).
Vergleich der Korrelationsleistung mehrerer Methoden bei einigen Datensätzen In Experimenten haben wir herausgefunden, dass spärliche Codierung bei unbekannten Datensätzen eine bessere Leistung erbringt als dichte Codierung. Obwohl es derzeit keine detaillierteren quantitativen Daten gibt, die dies bestätigen, liegen die Vorteile laut der Analyse einiger Stichproben hauptsächlich in zwei Punkten: 1) Sparse Coding ist bei der Assoziation von Synonymen stärker ausgeprägt, 2) wenn auf völlig unbekannte Textausdrücke gestoßen wird Beispielsweise führt eine spärliche Codierung bei einigen Fachbegriffen tendenziell dazu, das Gewicht dieser Begriffs-Token zu erhöhen und das Gewicht der zugehörigen Token zu schwächen, was dazu führt, dass der Abrufprozess zum Schlüsselwortabgleich degeneriert und eine stabile Korrelationsleistung anstrebt.
In Experimenten zum BEIR-Benchmark können wir sehen, dass die beiden Methoden von Neural Sparse im Vergleich zum Dense-Coding-Modell und BM25 höhere Korrelationswerte aufweisen.
Extreme Geschwindigkeit: Nur DokumentkodierungsmodusNeuronale Suche bietet auch einen Modus, der die ultimative Online-Abrufgeschwindigkeit bietet. In diesem Modus werden nur die abzurufenden Dokumente spärlich codiert. Im Gegensatz dazu ruft der Abfragetext beim Online-Abruf nicht das Sprachkodierungsmodell zur Kodierung auf. Verwenden Sie stattdessen nur den Tokenizer, um den Abfragetext aufzuteilen. Da der Aufrufprozess des Deep-Learning-Modells entfällt, wird nicht nur die Verzögerung beim Online-Abruf erheblich reduziert, sondern auch eine große Menge an Rechenressourcen eingespart, die für die Modellinferenz erforderlich sind, z. B. GPU-Rechenleistung. Die folgende Tabelle vergleicht die Text-Matching-Abrufmethode BM25, das BERT-TASB-Modell für den Abruf mit dichter Kodierung, den Abruf mit spärlicher Kodierung mit der Bi-Encoder-Methode für Abfragekodierung und den Abruf mit spärlicher Kodierung, nur Dokumentkodierung, nur Dokumentkodierung in MSMAARCO v2 1 Million Volumina Geschwindigkeitsvergleich von Pegeldatensätzen. Wir können deutlich erkennen, dass der Nur-Dokument-Codierungsmodus eine ähnliche Geschwindigkeitsleistung wie BM25 aufweist, und aus der Tabelle im vorherigen Abschnitt können wir erkennen, dass sich die Korrelationsleistung des Nur-Dokument-Codierungsmodus nicht von der Abfrage-Spärse-Codierung unterscheidet Methode zu viel. Man kann sagen, dass der Nur-Dokument-Kodierungsmodus eine sehr kostengünstige Wahl ist. Noch schneller: Verwenden Sie die zweistufige Suche zur Beschleunigung
Wie im vorherigen Artikel erwähnt, wird der Text während des Sparse-Codierungsprozesses in einen Satz von Token und Gewichten umgewandelt. Diese Transformation erzeugt eine große Anzahl von Token mit geringer Gewichtung. Obwohl diese Token die meiste Zeit im Suchprozess in Anspruch nehmen, ist ihr Beitrag zu den endgültigen Suchergebnissen nicht signifikant.
Daher schlagen wir eine neue Suchstrategie vor, die bei der ersten Suche zunächst diese Token mit niedrigem Gewicht herausfiltert und sich nur auf Token mit hohem Gewicht verlässt, um höherrangige Dokumente zu finden. Anschließend werden auf diesen ausgewählten Dokumenten die zuvor gefilterten Token mit geringem Gewicht für eine zweite detaillierte Bewertung erneut eingeführt, um die endgültige Bewertung zu erhalten.
Durch diese Methode reduzieren wir die Verzögerung in zwei Teilen erheblich: Erstens werden in der ersten Suchstufe nur Token mit hoher Gewichtung im invertierten Index abgeglichen, was unnötige Berechnungen erheblich reduziert. Zweitens berechnen wir bei der erneuten Bewertung innerhalb eines präzisen kleinen Bereichs von Ergebnisdokumenten nur die Bewertungen von Token mit geringer Gewichtung für potenziell relevante Dokumente, wodurch die Verarbeitungszeit weiter optimiert wird. Am Ende erreichte diese verbesserte Methode eine Latenzleistung, die der der BM25-Suche im Dokumentkodierungsmodus (nur Dokument) nahekam, und war im Abfragekodierungsmodus (Bi-Encoder) fünfmal schneller 8-mal, wodurch die Latenzleistung und der Durchsatz der neuronalen Suche erheblich verbessert werden
. Das Folgende ist ein Verzögerungsvergleich des standardmäßigen Neural Sparse, zweistufige Neural Spars, BM25, anhand der vier typischen Beir-Datensätze: Vergleich der zweistufigen Suchgeschwindigkeit
5 Schritte zum Erstellen von Neural Spars in OpenSearch in der OpenSearch Semantic Retrieval-Anwendung
1. Richten Sie die neuronale Suche ein und aktivieren Sie sie
Stellen Sie zunächst die Clusterkonfiguration ein, damit das Modell auf dem lokalen Cluster ausgeführt werden kann. 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}}
Nach dem Login kopieren
2. Stellen Sie den Encoder bereit
Opensearch verfügt derzeit über 3 Open-Source-Modelle. Relevante Registrierungsinformationen können offiziellen Dokumenten entnommen werden. Nehmen wir als Beispiel amazon/neural-sparse/opensearch-neural-sparse-encoding-v1. Verwenden Sie zunächst die Register-API, um sich zu registrieren:
POST /_plugins/_ml/models/_register?deploy=true{ "name": "amazon/neural-sparse/opensearch-neural-sparse-encoding-v1", "version": "1.0.1", "model_format": "TORCH_SCRIPT"}
Nach dem Login kopieren
In der Rückgabe des Clusters sehen Sie die task_id{"task_id": "<task_id>","status": "CREATED"}
Nach dem Login kopieren
Verwenden Sie die Task-ID, um detaillierte Registrierungsinformationen zu erhalten: GET /_plugins/_ml/tasks/
Nach dem Login kopieren
In der API-Rückgabe können wir die spezifische Modell-ID abrufen:{"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}
Nach dem Login kopieren
3. Richten Sie die Vorverarbeitungspipeline ein.
Vor der Indizierung jedes Dokuments Bedarf Die codierten Textfelder müssen in spärliche Vektoren konvertiert werden. In OpenSearch wird dieser Prozess durch den Präprozessor automatisiert. Sie können die folgende API verwenden, um eine Prozessorpipeline für die Offline-Indizierung zu erstellen: 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" } } } ]}
Nach dem Login kopieren
Wenn Sie die zweistufige Beschleunigungsfunktion aktivieren müssen (nicht erforderlich), müssen Sie eine zweistufige Suchpipeline erstellen und als festlegen Die Standardsuchpipeline nach der Indexerstellung. Die Methode zum Einrichten einer zweistufigen beschleunigten Suchpipeline mit Standardparametern ist wie folgt. Ausführlichere Parametereinstellungen und Bedeutungen finden Sie in der offiziellen OpenSearch-Dokumentation von 2.15 und späteren Versionen.
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." } } ]}
Nach dem Login kopieren
4. Index festlegen
神经稀疏搜索利用 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" } } }}
Nach dem Login kopieren
在设置索引之后,客户可以提交文档。客户提供文本字段,而摄取进程将自动将文本内容转换为稀疏向量,并根据预处理器中的字段映射 field_map 将其放入 rank_features 字段:PUT /my-neural-sparse-index/_doc/{ "passage_text": "Hello world"}
Nach dem Login kopieren
在索引中进行稀疏语义搜索的接口如下,将 替换为第二步中注册的 model_id:
GET my-neural-sparse-index/_search{ "query":{ "neural_sparse":{ "passage_embedding":{ "query_text": "Hi world", "model_id": <model_id> } } }}
Nach dem Login kopieren
OpenSearch 是一种分布式、由社区驱动并取得 Apache 2.0 许可的 100% 开源搜索和分析套件,可用于一组广泛的使用案例,如实时应用程序监控、日志分析和网站搜索。OpenSearch 提供了一个高度可扩展的系统,通过集成的可视化工具 OpenSearch 控制面板为大量数据提供快速访问和响应,使用户可以轻松地探索他们的数据。OpenSearch 由 Apache Lucene 搜索库提供技术支持,它支持一系列搜索及分析功能,如 k - 最近邻(KNN)搜索、SQL、异常检测、Machine Learning Commons、Trace Analytics、全文搜索等。Das obige ist der detaillierte Inhalt vonAmazon Cloud-Innovation „Neural Sparse Retrieval': Für eine semantische Suche ist nur ein Textabgleich erforderlich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!