Lajur AIxiv ialah lajur di mana kandungan akademik dan teknikal diterbitkan di laman web ini. Dalam beberapa tahun kebelakangan ini, lajur AIxiv laman web ini telah menerima lebih daripada 2,000 laporan, meliputi makmal terkemuka dari universiti dan syarikat utama di seluruh dunia, mempromosikan pertukaran dan penyebaran akademik secara berkesan. Jika anda mempunyai kerja yang sangat baik yang ingin anda kongsikan, sila berasa bebas untuk menyumbang atau hubungi kami untuk melaporkan. E-mel penyerahan: liyazhou@jiqizhixin.com; zhaoyunfeng@jiqizhixin.com
Pengarang artikel ini ialah Dr. Yang Yang, ketua pembelajaran mesin dan jurutera pembelajaran mesin Geng Zhichao dan Guan Cong daripada pasukan R&D OpenSearch China. OpenSearch ialah carian sumber terbuka tulen dan projek enjin analisis masa nyata yang dimulakan oleh Amazon Cloud Technology. Perisian pada masa ini mempunyai lebih 500 juta muat turun, dan komuniti mempunyai lebih daripada 70 rakan kongsi korporat di seluruh dunia.
Sejak letupan model besar, pencarian semula semantik secara beransur-ansur menjadi teknologi yang popular. Terutamanya dalam aplikasi RAG (penjanaan tambahan perolehan), perkaitan hasil carian secara langsung menentukan kesan akhir penjanaan AI. Kebanyakan penyelesaian pelaksanaan perolehan semula semantik pada masa ini di pasaran menggunakan model bahasa untuk mengekod rentetan teks ke dalam vektor berdimensi tinggi dan menggunakan anggaran carian k-jiran (k-NN). Ramai orang terhalang oleh kos tinggi VectorDB dan penggunaan model bahasa (yang memerlukan GPU). Baru-baru ini, Amazon OpenSearch, bersama-sama dengan Institut Penyelidikan Kecerdasan Buatan Amazon Shanghai, melancarkan fungsi Neural Sparse dalam pemalam OpenSearch NeuralSearch, yang menyelesaikan tiga cabaran berikut yang sedang dihadapi oleh perolehan semula semantik: - Kestabilan prestasi korelasi pada pertanyaan berbeza: Pendapatan semula semantik sifar memerlukan model pengekodan semantik mempunyai prestasi korelasi yang baik pada set data dengan latar belakang yang berbeza, iaitu, ia memerlukan model bahasa untuk digunakan daripada kotak, tanpa pengguna perlu memperhalusi set data. Mengambil kesempatan daripada ciri homolog pengekodan jarang dan vektor istilah, Neural Sparse boleh menurunkan taraf kepada padanan teks apabila menemui ungkapan teks yang tidak dikenali (perkataan khusus industri, singkatan, dll.), dengan itu mengelakkan hasil carian yang keterlaluan.
- Kecekapan masa carian dalam talian: Kepentingan kependaman rendah untuk aplikasi carian masa nyata adalah jelas. Kaedah mendapatkan semula semantik yang popular pada masa ini secara amnya merangkumi dua proses: pengekodan semantik dan pengindeksan Kelajuan kedua-dua ini menentukan kecekapan mendapatkan semula dari hujung ke hujung aplikasi mendapatkan semula. Mod dokumen sahaja unik Neural Sparse boleh mencapai ketepatan perolehan semula semantik yang setanding dengan model bahasa kelas pertama pada kependaman yang serupa dengan padanan teks tanpa pengekodan dalam talian.
- Penggunaan sumber storan indeks: Aplikasi perolehan semula komersil sangat sensitif terhadap penggunaan sumber storan. Apabila mengindeks sejumlah besar data, kos operasi enjin carian sangat berkaitan dengan penggunaan sumber storan. Dalam eksperimen berkaitan, Neural Sparse hanya memerlukan 1/10 pengindeksan k-NN untuk mengindeks saiz data yang sama. Pada masa yang sama, penggunaan memori juga jauh lebih kecil daripada indeks k-NN.
- Laman utama dokumentasi: https://opensearch.org/docs/latest/search-plugins/neural-sparse-search/
- Alamat Github Projek: https://github.com/opensearch-project/neural- carian
Pengekodan jarang digabungkan dengan indeks Lucene aslipengekodan seriet semasa datang (Pengekodan Padat), dokumen ke dapat diambil Dan teks pertanyaan akan ditukar menjadi vektor dalam ruang dimensi tinggi oleh model pengekodan bahasa. Sebagai contoh, model TASB dalam Sentence-BERT akan menjana vektor 768 dimensi dan All-MiniLM-L6 akan menukar teks kepada vektor 384 dimensi. Pengindeksan jenis vektor dimensi tinggi ini memerlukan penggunaan enjin carian k-NN khas, seperti FLANN berasaskan struktur pokok yang terawal, LSH berasaskan cincang dan kemudian HNSW berdasarkan graf jiran dan jadual langkau, serta sebagai enjin FAISS berasaskan kuantisasi terkini.
Pengekodan Jarang akan menukar teks kepada satu set token dan pemberat. Token di sini ialah unit teks yang dijana selepas model pengekodan bahasa menggunakan segmenter untuk memotong teks. Contohnya, menggunakan pembahagi WordPiece, token boleh difahami sebagai "perkataan" pada tahap tertentu, tetapi mungkin juga terdapat situasi di mana perkataan terlalu panjang dan dibahagikan kepada dua token.
Perbandingan antara pengekodan jarang dan pengekodan padat
Sejak gabungan token-berat yang dihasilkan oleh pengekodan jarang sangat mirip dengan istilah-vektor yang digunakan dalam kaedah pemadanan teks tradisional, indeks Lucene asli boleh digunakan di OpenSearch Untuk menyimpan dokumen yang jarang dikodkan. Berbanding dengan enjin carian k-NN, enjin Luence asli lebih ringan dan menggunakan lebih sedikit sumber.
Jadual berikut menunjukkan perbandingan penggunaan cakera dan penggunaan memori masa jalan (RAM masa jalan) menggunakan Lucene untuk pemadanan teks, menggunakan enjin k-NN untuk menyimpan pengekodan padat dan menggunakan Lucene untuk menyimpan pengekodan jarang.
Untuk ke arah dirinya sendiri sendiri dia sendiri dia sendiri dia sendiri dia shen shen dia shen shen shen dia semua mengambil dia untuk
berdasarkan penalaan halus pada set data MSMAARCO, model menunjukkan prestasi yang sangat baik pada set data ini. Walau bagaimanapun, apabila menjalankan ujian sifar pukulan pada set data BEIR yang lain, korelasi model pengekodan padat tidak boleh melebihi BM25 pada kira-kira 60% hingga 70% daripada set data. Ini juga boleh dilihat daripada eksperimen perbandingan replika kami sendiri (lihat jadual di bawah). 🎜🎜🎜🎜🎜 Perbandingan prestasi korelasi beberapa kaedah pada beberapa set data 🎜🎜🎜🎜 Kami mendapati dalam eksperimen bahawa pengekodan jarang berprestasi lebih baik daripada pengekodan padat pada set data yang tidak dikenali. Walaupun pada masa ini tiada data kuantitatif yang lebih terperinci untuk mengesahkannya, menurut analisis beberapa sampel, kelebihannya terutamanya terletak pada dua perkara: 1) pengekodan jarang adalah lebih menonjol dalam perkaitan sinonim, 2) apabila menghadapi ungkapan teks yang sama sekali tidak dikenali. Sebagai contoh, untuk sesetengah istilah profesional, pengekodan jarang akan cenderung untuk meningkatkan berat token istilah ini dan melemahkan berat token yang berkaitan, menyebabkan proses mendapatkan semula merosot kepada padanan kata kunci dan mengejar prestasi korelasi yang stabil. 🎜🎜🎜🎜🎜Dalam eksperimen pada penanda aras BEIR, kita dapat melihat bahawa kedua-dua kaedah Neural Sparse mempunyai skor korelasi yang lebih tinggi berbanding model pengekodan padat dan BM25. 🎜🎜🎜🎜
Kelajuan melampau: mod pengekodan dokumen sahajaCarian Neural juga menyediakan mod yang menyediakan kelajuan perolehan semula dalam talian muktamad. Dalam mod ini, hanya dokumen yang perlu diambil jarang dikodkan. Sebaliknya, semasa mendapatkan semula dalam talian, teks pertanyaan tidak menggunakan model pengekodan bahasa untuk pengekodan. Sebaliknya, hanya gunakan tokenizer untuk memisahkan teks pertanyaan. Memandangkan proses panggilan model pembelajaran mendalam diabaikan, ia bukan sahaja mengurangkan kelewatan mendapatkan semula dalam talian, tetapi juga menjimatkan sejumlah besar sumber pengkomputeran yang diperlukan untuk inferens model, seperti kuasa pengkomputeran GPU. Jadual berikut membandingkan kaedah perolehan padanan teks BM25, perolehan pengekodan padat model BERT-TASB, perolehan pengekodan jarang dengan kaedah pengekod dwi pengekodan pertanyaan, dan perolehan pengekodan jarang hanya pengekodan dokumen v-dokumen sahaja dalam MS1MAARCO2. volum Perbandingan kelajuan pada set data tahap. Kita dapat melihat dengan jelas bahawa mod pengekodan dokumen sahaja mempunyai prestasi kelajuan yang serupa dengan BM25, dan daripada jadual dalam bahagian sebelumnya, kita dapat melihat bahawa prestasi korelasi mod pengekodan dokumen sahaja tidak berbeza daripada pengekodan jarang pertanyaan. kaedah terlalu banyak. Boleh dikatakan bahawa mod pengekodan dokumen sahaja adalah pilihan yang sangat menjimatkan. Lebih pantas lagi: gunakan carian dua peringkat untuk pecutan
Seperti yang dinyatakan dalam artikel sebelum ini, semasa proses pengekodan yang jarang, teks ditukar kepada satu set token dan pemberat. Transformasi ini menghasilkan sejumlah besar token dengan wajaran yang rendah Walaupun token ini mengambil sebahagian besar masa dalam proses carian, sumbangan mereka kepada hasil carian akhir adalah tidak penting.
Oleh itu, kami mencadangkan strategi carian baharu yang menapis terlebih dahulu token berwajaran rendah ini dalam carian pertama dan hanya bergantung pada token berwajaran tinggi untuk mencari dokumen yang berpangkat lebih tinggi. Kemudian pada dokumen yang dipilih ini, token berat rendah yang ditapis sebelum ini diperkenalkan semula untuk pemarkahan terperinci kedua untuk mendapatkan skor akhir.
Melalui kaedah ini, kami mengurangkan kelewatan dalam dua bahagian dengan ketara: Pertama, pada peringkat pertama carian, hanya token berwajaran tinggi dipadankan dalam indeks terbalik, yang sangat mengurangkan masa yang tidak perlu. Kedua, apabila menjaringkan semula dalam julat kecil dokumen hasil yang tepat, kami hanya mengira markah token berat rendah untuk dokumen yang berpotensi berkaitan, seterusnya mengoptimumkan masa pemprosesan. Akhirnya, kaedah yang dipertingkatkan ini mencapai prestasi kependaman yang hampir dengan carian BM25 dalam mod pengekodan dokumen (dokumen sahaja), dan 5 kali lebih pantas dalam mod pengekodan pertanyaan (bi-pengekod) kepada 8 kali ganda, meningkatkan prestasi kependaman dan daya pemprosesan Neural Search
. Berikut ialah perbandingan kelewatan Neural Sparse standard, Neural Spars dua peringkat, BM25 pada empat set data Beir biasa: Perbandingan kelajuan carian dua peringkat
5 langkah untuk membina Neural Spars dalam OpenSearch dalam aplikasi cari semula Semantik OpenSearch
1. Sediakan dan dayakan Carian Neural
Mula-mula tetapkan konfigurasi kluster supaya model boleh dijalankan pada kluster setempat. 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}}
Salin selepas log masuk
2. Gunakan pengekod
Opensearch kini mempunyai 3 model sumber terbuka. Maklumat pendaftaran yang berkaitan boleh didapati dalam dokumen rasmi. Mari kita ambil amazon/neural-sparse/opensearch-neural-sparse-encoding-v1 sebagai contoh Mula-mula gunakan API daftar untuk mendaftar:
POST /_plugins/_ml/models/_register?deploy=true{ "name": "amazon/neural-sparse/opensearch-neural-sparse-encoding-v1", "version": "1.0.1", "model_format": "TORCH_SCRIPT"}
Salin selepas log masuk
Dalam pengembalian kluster, anda boleh melihat task_id{"task_id": "<task_id>","status": "CREATED"}
Salin selepas log masuk
.
Gunakan task_id untuk Mendapatkan maklumat pendaftaran terperinci: GET /_plugins/_ml/tasks/
Salin selepas log masuk
Dalam pulangan API, kita boleh mendapatkan model_id tertentu:{"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}
Salin selepas log masuk
Sediakan setiap prapemprosesan3. keperluan Medan teks yang dikodkan perlu ditukar kepada vektor jarang. Dalam OpenSearch, proses ini diautomatikkan melalui prapemproses. Anda boleh menggunakan API berikut untuk membuat saluran paip pemproses untuk pengindeksan luar talian: 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" } } } ]}
Salin selepas log masuk
Jika anda perlu mendayakan fungsi pecutan dua peringkat (tidak diperlukan), anda perlu mencipta saluran carian dua peringkat dan tetapkannya sebagai lalai selepas indeks dicipta talian paip carian.
Kaedah mewujudkan saluran paip carian dipercepatkan dua peringkat dengan parameter lalai adalah seperti berikut Untuk tetapan dan makna parameter yang lebih terperinci, sila rujuk dokumentasi OpenSearch rasmi 2.15 dan versi yang lebih baru.
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." } } ]}
Salin selepas log masuk
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" } } }}
Salin selepas log masuk
在设置索引之后,客户可以提交文档。客户提供文本字段,而摄取进程将自动将文本内容转换为稀疏向量,并根据预处理器中的字段映射 field_map 将其放入 rank_features 字段:PUT /my-neural-sparse-index/_doc/{ "passage_text": "Hello world"}
Salin selepas log masuk
在索引中进行稀疏语义搜索的接口如下,将 替换为第二步中注册的 model_id:
GET my-neural-sparse-index/_search{ "query":{ "neural_sparse":{ "passage_embedding":{ "query_text": "Hi world", "model_id": <model_id> } } }}
Salin selepas log masuk
OpenSearch 是一种分布式、由社区驱动并取得 Apache 2.0 许可的 100% 开源搜索和分析套件,可用于一组广泛的使用案例,如实时应用程序监控、日志分析和网站搜索。OpenSearch 提供了一个高度可扩展的系统,通过集成的可视化工具 OpenSearch 控制面板为大量数据提供快速访问和响应,使用户可以轻松地探索他们的数据。OpenSearch 由 Apache Lucene 搜索库提供技术支持,它支持一系列搜索及分析功能,如 k - 最近邻(KNN)搜索、SQL、异常检测、Machine Learning Commons、Trace Analytics、全文搜索等。Atas ialah kandungan terperinci Inovasi Awan Amazon 'Pengambilan Neural Jarang': Hanya padanan teks diperlukan untuk mencapai carian semantik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!