cari
RumahPeranti teknologiAIVisualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Mar 01, 2024 pm 09:16 PM
llmModel bahasa yang besarPecutan perkakasan

Memandangkan prestasi model bahasa berskala besar sumber terbuka terus bertambah baik, prestasi menulis dan menganalisis kod, pengesyoran, ringkasan teks dan pasangan menjawab soalan (QA) telah meningkat dengan ketara. Tetapi apabila ia berkaitan dengan QA, LLM sering gagal dalam isu yang berkaitan dengan data yang tidak terlatih, dan banyak dokumen dalaman disimpan dalam syarikat untuk memastikan pematuhan, rahsia perdagangan atau privasi. Apabila dokumen ini disoal, LLM boleh berhalusinasi dan menghasilkan kandungan yang tidak relevan, rekaan atau tidak konsisten.

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Satu teknik yang mungkin untuk menangani cabaran ini ialah Retrieval Augmented Generation (RAG). Ia melibatkan proses meningkatkan respons dengan merujuk pangkalan pengetahuan berwibawa di luar sumber data latihan untuk meningkatkan kualiti dan ketepatan penjanaan. Sistem RAG terdiri daripada sistem perolehan semula yang mengambil serpihan dokumen yang berkaitan daripada korpus, dan model LLM yang menggunakan serpihan yang diperoleh semula sebagai konteks untuk menjana respons. Oleh itu, kualiti korpus dan perwakilan yang tertanam dalam ruang vektor adalah penting untuk prestasi RAG.

Dalam artikel ini, kami akan menggunakan pustaka visualisasi renumics-spotlight untuk memvisualisasikan pembenaman berbilang dimensi ruang vektor FAISS dalam 2-D dan mencari kemungkinan untuk meningkatkan ketepatan tindak balas RAG dengan menukar beberapa parameter vektorisasi utama. Untuk LLM yang kami pilih, kami akan menggunakan Sembang TinyLlama 1.1B, model padat dengan seni bina yang sama seperti Llama 2. Ia mempunyai kelebihan kerana mempunyai jejak sumber yang lebih kecil dan masa jalan yang lebih pantas tanpa penurunan ketepatan yang berkadar, menjadikannya sesuai untuk percubaan pantas.

Reka bentuk sistem

Sistem QA mempunyai dua modul, seperti yang ditunjukkan dalam rajah.

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Modul LoadFVectorize digunakan untuk memuatkan dokumen PDF atau Web dan melaksanakan ujian dan visualisasi awal. Modul lain bertanggungjawab untuk memuatkan LLM dan menginstant pencari FAISS, dan kemudian membina rantai carian termasuk LLM, pencari dan gesaan pertanyaan tersuai. Akhirnya, kami menggambarkan ruang vektor.

Pelaksanaan kod

1. Pasang perpustakaan yang diperlukan

perpustakaan lampu sorot renomics menggunakan kaedah visualisasi seperti umap untuk mengurangkan pembenaman visualisasi berdimensi tinggi ke dalam atribut 2iD yang boleh diurus Kami telah memperkenalkan secara ringkas penggunaan umap sebelum ini, tetapi hanya fungsi asas. Kali ini, kami menyepadukannya ke dalam projek sebenar sebagai sebahagian daripada reka bentuk sistem. Pertama, anda perlu memasang perpustakaan yang diperlukan.

pip install langchain faiss-cpu sentence-transformers flask-sqlalchemy psutil unstructured pdf2image unstructured_inference pillow_heif opencv-python pikepdf pypdf pip install renumics-spotlight CMAKE_ARGS="-DLLAMA_METAL=on" FORCE_CMAKE=1 pip install --upgrade --force-reinstall llama-cpp-python --no-cache-dir

Barisan terakhir di atas ialah memasang perpustakaan llama-pcp-python dengan sokongan Metal, yang akan digunakan untuk memuatkan TinyLlama dengan pecutan perkakasan pada pemproses M1.

2. Modul LoadFVectorize

modul merangkumi 3 fungsi:

load_doc mengendalikan pemuatan dokumen pdf dalam talian, setiap blok dibahagikan kepada 512 aksara dan dokumen bertindih 1.00

vectorize memanggil fungsi load_doc di atas untuk mendapatkan senarai blok dokumen, mencipta benam dan menyimpannya ke direktori tempatan opdf_index, dan mengembalikan tika FAISS.

load_db menyemak sama ada pustaka FAISS berada pada cakera dalam direktori opdf_index dan cuba memuatkannya, akhirnya mengembalikan objek FAISS. Kod Lengkap Kod Modul ini adalah seperti berikut:

# LoadFVectorize.py  from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.document_loaders import OnlinePDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.vectorstores import FAISS  # access an online pdf def load_doc() -> 'List[Document]':loader = OnlinePDFLoader("https://support.riverbed.com/bin/support/download?did=7q6behe7hotvnpqd9a03h1dji&versinotallow=9.15.0")documents = loader.load()text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=100)docs = text_splitter.split_documents(documents)return docs  # vectorize and commit to disk def vectorize(embeddings_model) -> 'FAISS':docs = load_doc()db = FAISS.from_documents(docs, embeddings_model)db.save_local("./opdf_index")return db  # attempts to load vectorstore from disk def load_db() -> 'FAISS':embeddings_model = HuggingFaceEmbeddings()try:db = FAISS.load_local("./opdf_index", embeddings_model)except Exception as e:print(f'Exception: {e}\nNo index on disk, creating new...')db = vectorize(embeddings_model)return db
e 3. Modul Utama

Modul Utama pada mulanya mentakrifkan template Tinyllama Prompt template berikut:

{context}{question}
e Selain itu, ia menggunakan versi terkuantisasi TinyLlama TheBloke boleh mengurangkan memori dengan banyaknya. Kami memilih untuk memuatkan LLM terkuantasi dalam format GGUF.

Kemudian gunakan objek FAISS yang dikembalikan oleh modul LoadFVectorize, buat pengutip FAISS, buat seketika RetrievalQA dan gunakannya untuk pertanyaan. . -id, digunakan Jumlah kiraan dokumen yang divektorkan diwakili oleh atribut jumlah objek indeks.

# main.py from langchain.chains import RetrievalQA from langchain.prompts import PromptTemplate from langchain_community.llms import LlamaCpp from langchain_community.embeddings import HuggingFaceEmbeddings import LoadFVectorize from renumics import spotlight import pandas as pd import numpy as np  # Prompt template  qa_template = """ You are a friendly chatbot who always responds in a precise manner. If answer is  unknown to you, you will politely say so. Use the following context to answer the question below: {context}  {question}  """  # Create a prompt instance  QA_PROMPT = PromptTemplate.from_template(qa_template) # load LLM llm = LlamaCpp(model_path="./models/tinyllama_gguf/tinyllama-1.1b-chat-v1.0.Q5_K_M.gguf",temperature=0.01,max_tokens=2000,top_p=1,verbose=False,n_ctx=2048 ) # vectorize and create a retriever db = LoadFVectorize.load_db() faiss_retriever = db.as_retriever(search_type="mmr", search_kwargs={'fetch_k': 3}, max_tokens_limit=1000) # Define a QA chain  qa_chain = RetrievalQA.from_chain_type(llm,retriever=faiss_retriever,chain_type_kwargs={"prompt": QA_PROMPT} )  query = 'What versions of TLS supported by Client Accelerator 6.3.0?'  result = qa_chain({"query": query}) print(f'--------------\nQ: {query}\nA: {result["result"]}')  visualize_distance(db,query,result["result"])
Memanggil kaedah indeks objek reconstruct_n boleh mencapai anggaran pembinaan semula ruang vektor

vs = db.__dict__.get("docstore")index_list = db.__dict__.get("index_to_docstore_id").values()doc_cnt = db.index.ntotal
Dengan senarai docstore-id sebagai index_list, anda boleh mencarinya menggunakan index_list senarai termasuk docstore-id, metadata dokumen, kandungan dokumen dan benamnya dalam ruang vektor semua id:

embeddings_vec = db.index.reconstruct_n()
Kemudian gunakan senarai untuk mencipta DF yang mengandungi pengepala lajur, akhirnya kami menggunakan DF ini untuk Visualisasi

doc_list = list() for i,doc-id in enumerate(index_list):a_doc = vs.search(doc-id)doc_list.append([doc-id,a_doc.metadata.get("source"),a_doc.page_content,embeddings_vec[i]])

在继续进行可视化之前,还需要将问题和答案结合起来,我们创建一个单独的问题以及答案的DF,然后与上面的df进行合并,这样能够显示问题和答案出现的地方,在可视化时我们可以高亮显示:

# add rows for question and answerembeddings_model = HuggingFaceEmbeddings()question_df = pd.DataFrame({"id": "question","question": question,"embedding": [embeddings_model.embed_query(question)],})answer_df = pd.DataFrame({"id": "answer","answer": answer,"embedding": [embeddings_model.embed_query(answer)],})df = pd.concat([question_df, answer_df, df])

这里使用使用np.linalg.norm在文件和问题嵌入上的进行距离大小的计算:

question_embedding = embeddings_model.embed_query(question)# add column for vector distancedf["dist"] = df.apply( lambda row: np.linalg.norm(np.array(row["embedding"]) - question_embedding),axis=1,)

因为spotlight可以对df进行可视化,所有我们直接调用即可

spotlight.show(df)

Langkah ini akan melancarkan sorotan dalam tetingkap penyemak imbas. 、 Ujian berjalan 基 1. Ujian asas

Di bawah ialah contoh masalah yang kami pilih:

Apakah versi TLS yang Disokong oleh Client Accelerator 6.3.0

jawapan betul

Betul: Ya

Betul?

Clien Accelerator 6.3.0 menyokong TLS 1.1 atau 1.2.

Maklumat tambahan berikut mungkin disertakan dalam respons.

Anda mesti mendayakan keupayaan ini menggunakan arahan CLI berikut pada Client Accelerator:(config) # policy id ssl backend client-tls-1.2Walaupun TLS 1.1 tidak disebut dalam sintaks arahan ini, menggunakan arahan ini secara automatik mendayakan sokongan untuk kedua-dua TLS 1.1 dan 1.2.

Kemudian mari kita lihat jawapan TinyLlama untuk soalan di atas:

Pemecut Pelanggan 6.3.0 sebagai lalai atau TLS Accelerator 6.3.0. versi TLS yang disokong dengan Client Accelerator Anda mesti mendayakan keupayaan ini menggunakan arahan CLI berikut pada Client Accelerator:```(config) # policy id s clients backend -tlss1.2```Perhatikan bahawa arahan ini hanya terpakai pada TLS 1.1 atau TLS 1.2 Jika anda perlu menyokong versi TLS yang lebih lama, anda boleh menggunakan arahan ssl backend dengan klien-tlss1.0. atau pilihan pelanggan-tlss1.1

sebaliknya.

kelihatan sangat serupa dengan jawapan sebenar, tetapi ia tidak betul sepenuhnya kerana versi TLS ini bukan lalainya.

Jadi mari kita lihat petikan mana dia mendapat jawapannya?

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Gunakan butang yang kelihatan dalam lampu sorot untuk mengawal lajur yang dipaparkan. Isih jadual mengikut "dist" untuk menunjukkan soalan, jawapan dan coretan dokumen yang paling berkaitan di bahagian atas. Melihat pada pembenaman dokumen kami, ia menerangkan hampir semua bahagian dokumen sebagai satu kelompok. Ini adalah munasabah kerana PDF asal kami ialah panduan penggunaan untuk produk tertentu, jadi tiada masalah untuk dianggap sebagai kluster.

Klik pada ikon penapis dalam tab Peta Persamaan, ia hanya menyerlahkan senarai dokumen yang dipilih, yang berkelompok rapat, dan selebihnya ditunjukkan dalam warna kelabu seperti yang ditunjukkan dalam imej di bawah. . Saiz ketulan TextSplitter (1000, 2000) dan/atau bertindih (100, 200) parameter adalah berbeza semasa pemisahan dokumen.

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Keluaran nampaknya serupa untuk semua kombinasi, tetapi jika kita membandingkan dengan teliti jawapan yang betul dengan setiap jawapan, jawapan yang tepat ialah (1000,200). Butiran yang salah dalam respons lain telah diserlahkan dengan warna merah. Mari cuba terangkan tingkah laku ini menggunakan pembenaman visual:

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

Melihat dari kiri ke kanan, apabila saiz bongkah bertambah, kita dapat melihat bahawa ruang vektor menjadi jarang dan bongkah menjadi lebih kecil. Dari bawah ke atas, pertindihan meningkat secara beransur-ansur tanpa perubahan ketara dalam ciri ruang vektor. Dalam semua pemetaan ini, keseluruhan set masih kelihatan lebih kurang sebagai satu kelompok, dengan hanya beberapa outlier hadir. Ini boleh dilihat dalam respons yang dijana kerana respons yang dihasilkan semuanya sangat serupa.

如果查询位于簇中心等位置时由于最近邻可能不同,在这些参数发生变化时响应很可能会发生显著变化。如果RAG应用程序无法提供预期答案给某些问题,则可以通过生成类似上述可视化图表并结合这些问题进行分析,可能找到最佳划分语料库以提高整体性能方面优化方法。

为了进一步说明,我们将两个来自不相关领域(Grammy Awards和JWST telescope)的维基百科文档的向量空间进行可视化展示。

def load_doc():loader = WebBaseLoader(['https://en.wikipedia.org/wiki/66th_Annual_Grammy_Awards','https://en.wikipedia.org/wiki/James_Webb_Space_Telescope'])documents = loader.load()...

只修改了上面代码其余的代码保持不变。运行修改后的代码,我们得到下图所示的向量空间可视化。

Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil

这里有两个不同的不重叠的簇。如果我们要在任何一个簇之外提出一个问题,那么从检索器获得上下文不仅不会对LLM有帮助,而且还很可能是有害的。提出之前提出的同样的问题,看看我们LLM产生什么样的“幻觉”

Client Accelerator 6.3.0 supports the following versions of Transport Layer Security (TLS):

  1. TLS 1.2\2. TLS 1.3\3. TLS 1.2 with Extended Validation (EV) certificates\4. TLS 1.3 with EV certificates\5. TLS 1.3 with SHA-256 and SHA-384 hash algorithms

这里我们使用FAISS用于向量存储。如果你正在使用ChromaDB并想知道如何执行类似的可视化,renumics-spotlight也是支持的。

总结

检索增强生成(RAG)允许我们利用大型语言模型的能力,即使LLM没有对内部文档进行训练也能得到很好的结果。RAG涉及从矢量库中检索许多相关文档块,然后LLM将其用作生成的上下文。因此嵌入的质量将在RAG性能中发挥重要作用。

在本文中,我们演示并可视化了几个关键矢量化参数对LLM整体性能的影响。并使用renumics-spotlight,展示了如何表示整个FAISS向量空间,然后将嵌入可视化。Spotlight直观的用户界面可以帮助我们根据问题探索向量空间,从而更好地理解LLM的反应。通过调整某些矢量化参数,我们能够影响其生成行为以提高精度。

Atas ialah kandungan terperinci Visualisasikan ruang vektor FAISS dan laraskan parameter RAG untuk meningkatkan ketepatan hasil. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:51CTO.COM. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Carta 10 kuasa bi yang paling banyak digunakan - Analytics VidhyaCarta 10 kuasa bi yang paling banyak digunakan - Analytics VidhyaApr 16, 2025 pm 12:05 PM

Memanfaatkan kekuatan visualisasi data dengan carta Microsoft Power BI Dalam dunia yang didorong oleh data hari ini, dengan berkesan menyampaikan maklumat yang rumit kepada penonton bukan teknikal adalah penting. Visualisasi data jambatan jurang ini, mengubah data mentah i

Sistem Pakar di AISistem Pakar di AIApr 16, 2025 pm 12:00 PM

Sistem Pakar: menyelam yang mendalam ke dalam kuasa membuat keputusan AI Bayangkan mempunyai akses kepada nasihat pakar mengenai apa -apa, dari diagnosis perubatan kepada perancangan kewangan. Itulah kuasa sistem pakar dalam kecerdasan buatan. Sistem ini meniru pro

Tiga coder getaran terbaik memecahkan revolusi AI ini dalam kodTiga coder getaran terbaik memecahkan revolusi AI ini dalam kodApr 16, 2025 am 11:58 AM

Pertama sekali, jelas bahawa ini berlaku dengan cepat. Pelbagai syarikat bercakap mengenai perkadaran kod mereka yang kini ditulis oleh AI, dan ini semakin meningkat pada klip pesat. Terdapat banyak anjakan pekerjaan

Runway AI's Gen-4: Bagaimanakah montaj AI boleh melampaui kebodohanRunway AI's Gen-4: Bagaimanakah montaj AI boleh melampaui kebodohanApr 16, 2025 am 11:45 AM

Industri filem, bersama semua sektor kreatif, dari pemasaran digital ke media sosial, berdiri di persimpangan teknologi. Sebagai kecerdasan buatan mula membentuk semula setiap aspek bercerita visual dan mengubah landskap hiburan

Bagaimana untuk mendaftar selama 5 hari kursus percuma ISRO AI? - Analytics VidhyaBagaimana untuk mendaftar selama 5 hari kursus percuma ISRO AI? - Analytics VidhyaApr 16, 2025 am 11:43 AM

Kursus Online AI/ML percuma ISRO: Gerbang ke Inovasi Teknologi Geospatial Pertubuhan Penyelidikan Angkasa India (ISRO), melalui Institut Pengesan Jauh India (IIRS), menawarkan peluang yang hebat untuk pelajar dan profesional

Algoritma Carian Tempatan di AIAlgoritma Carian Tempatan di AIApr 16, 2025 am 11:40 AM

Algoritma Carian Tempatan: Panduan Komprehensif Merancang acara berskala besar memerlukan pengagihan beban kerja yang cekap. Apabila pendekatan tradisional gagal, algoritma carian tempatan menawarkan penyelesaian yang kuat. Artikel ini meneroka pendakian bukit dan simul

Terbuka beralih fokus dengan GPT-4.1, mengutamakan pengekodan dan kecekapan kosTerbuka beralih fokus dengan GPT-4.1, mengutamakan pengekodan dan kecekapan kosApr 16, 2025 am 11:37 AM

Pelepasan ini termasuk tiga model yang berbeza, GPT-4.1, GPT-4.1 Mini dan GPT-4.1 Nano, menandakan langkah ke arah pengoptimuman khusus tugas dalam landskap model bahasa yang besar. Model-model ini tidak segera menggantikan antara muka yang dihadapi pengguna seperti

Prompt: CHATGPT menjana pasport palsuPrompt: CHATGPT menjana pasport palsuApr 16, 2025 am 11:35 AM

Gergasi Chip Nvidia berkata pada hari Isnin ia akan memulakan pembuatan superkomputer AI - mesin yang boleh memproses sejumlah besar data dan menjalankan algoritma kompleks - sepenuhnya dalam A.S. untuk kali pertama. Pengumuman itu datang selepas Presiden Trump Si

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa