Rumah  >  Artikel  >  Peranti teknologi  >  Laksanakan kod Python untuk meningkatkan keupayaan mendapatkan semula untuk model besar

Laksanakan kod Python untuk meningkatkan keupayaan mendapatkan semula untuk model besar

WBOY
WBOYke hadapan
2023-11-21 11:21:111662semak imbas

Laksanakan kod Python untuk meningkatkan keupayaan mendapatkan semula untuk model besar

Tumpuan utama artikel ini ialah konsep dan teori RAG. Seterusnya, kami akan menunjukkan cara menggunakan LangChain, model bahasa OpenAI dan pangkalan data vektor Weaviate untuk melaksanakan sistem orkestrasi RAG yang mudah

Apakah penjanaan peningkatan perolehan?

Konsep Retrieval Augmented Generation (RAG) merujuk kepada penyediaan maklumat tambahan kepada LLM melalui sumber pengetahuan luaran. Ini membolehkan LLM menjana jawapan yang lebih tepat dan kontekstual sambil mengurangkan halusinasi.

Apabila menulis semula kandungan, teks asal perlu ditulis semula ke dalam bahasa Cina tanpa ayat asal

LLM terbaik semasa dilatih menggunakan sejumlah besar data, jadi berat rangkaian neuralnya disimpan dalam Banyak pengetahuan am (memori parameter). Walau bagaimanapun, jika gesaan memerlukan LLM menjana hasil yang memerlukan pengetahuan selain daripada data latihannya (seperti maklumat baharu, data proprietari atau maklumat khusus domain), ketidaktepatan fakta mungkin berlaku semasa menulis semula kandungan, anda perlu Teks asal telah ditulis semula ke dalam bahasa Cina tanpa ayat asal (ilusi), seperti yang ditunjukkan dalam tangkapan skrin di bawah:

Laksanakan kod Python untuk meningkatkan keupayaan mendapatkan semula untuk model besar

Oleh itu, adalah penting untuk menggabungkan pengetahuan am LLM dengan konteks tambahan untuk menjana lebih tepat dan lebih banyak hasil Kontekstual dan halusinasi yang dikurangkan

Penyelesaian

Secara tradisinya, kita boleh menyesuaikan rangkaian saraf kepada domain tertentu atau maklumat proprietari dengan memperhalusi model. Walaupun teknik ini berkesan, ia memerlukan sejumlah besar sumber pengkomputeran, mahal, dan memerlukan sokongan pakar teknikal, menjadikannya sukar untuk cepat menyesuaikan diri dengan perubahan maklumat

Pada tahun 2020, kertas kerja Lewis et al. "Retrieval " -Penjanaan Tambahan untuk Tugas NLP Intensif Pengetahuan" mencadangkan teknologi yang lebih fleksibel: Penjanaan Dipertingkatkan (RAG). Dalam kertas kerja ini, penyelidik menggabungkan model generatif dengan modul perolehan semula yang boleh memberikan maklumat tambahan menggunakan sumber pengetahuan luaran yang lebih mudah dikemas kini.

Untuk meletakkannya dalam bahasa vernakular: RAG adalah untuk LLM apa itu peperiksaan buku terbuka kepada manusia. Untuk peperiksaan buku terbuka, pelajar boleh membawa bahan rujukan seperti buku teks dan nota di mana mereka boleh mencari maklumat yang berkaitan untuk menjawab soalan. Idea di sebalik peperiksaan buku terbuka ialah peperiksaan memberi tumpuan kepada keupayaan pelajar untuk menaakul dan bukannya keupayaan mereka untuk menghafal maklumat tertentu.

Begitu juga, pengetahuan de facto berbeza daripada keupayaan inferens LLM dan boleh disimpan dalam sumber pengetahuan luaran yang mudah diakses dan dikemas kini

  • Pengetahuan berparameter: pengetahuan yang dipelajari semasa latihan secara tersirat Kaedah yang disertakan disimpan dalam berat rangkaian saraf.
  • Pengetahuan bukan parametrik: disimpan dalam sumber pengetahuan luaran, seperti pangkalan data vektor. Gambar rajah berikut menunjukkan aliran kerja RAG yang paling asas:

Rewritten kandungan: Membangun semula aliran kerja pengambilan semula generasi tambahan (RAG)

Laksanakan kod Python untuk meningkatkan keupayaan mendapatkan semula untuk model besar

Retrieval: Memohon pertanyaan pengguna untuk mengambil konteks yang relevan dari sumber pengetahuan luar. Untuk melakukan ini, model benam digunakan untuk membenamkan pertanyaan pengguna ke dalam ruang vektor yang sama sebagai konteks tambahan dalam pangkalan data vektor. Ini membolehkan anda melakukan carian persamaan dan mengembalikan objek data k dalam pangkalan data vektor ini yang paling hampir dengan pertanyaan pengguna.

  1. Peningkatan: Pertanyaan pengguna dan konteks tambahan yang diambil kemudiannya diisikan ke dalam templat segera.
  2. Generasi: Akhir sekali, gesaan yang dipertingkatkan semula disalurkan kepada LLM.
  3. Gunakan LangChain untuk melaksanakan penjanaan peningkatan perolehan

Yang berikut akan memperkenalkan cara untuk melaksanakan aliran kerja RAG melalui Python, yang akan menggunakan OpenAI LLM, pangkalan data vektor Weaviate dan model pembenaman OpenAI. Peranan LangChain ialah orkestrasi.

Sila frasa semula: Prasyarat yang diperlukan

Sila pastikan anda memasang pakej Python yang diperlukan:

  • langchain, orkestrasi
  • openai, model terbenam dan LLM
  • #๐ŸŽœ ๐ŸŽœ๐ŸŽœ#weaviate-client, vector database
#!pip install langchain openai weaviate-client

Selain itu, gunakan fail .env dalam direktori akar untuk menentukan pembolehubah persekitaran yang berkaitan. Anda memerlukan akaun OpenAI untuk mendapatkan Kunci API OpenAI, dan kemudian "Buat kunci baharu" dalam kunci API (https://platform.openai.com/account/api-keys).

OPENAI_API_KEY="<your_openai_api_key>"</your_openai_api_key>

Kemudian, jalankan arahan berikut untuk memuatkan pembolehubah persekitaran yang berkaitan.

import dotenvdotenv.load_dotenv()

Persediaan

#๐ŸŽœ anda dalam fasa persediaan menyediakan pangkalan data vektor sebagai sumber pengetahuan luaran yang menyimpan semua maklumat tambahan. Pembinaan pangkalan data vektor ini termasuk langkah-langkah berikut:

    Kumpul dan muat data
  1. #๐ŸŽœ๐ŸŽœ๐ŸŽœ # Pecahkan dokumen kepada kepingan
  2. Benamkan ketulan teks dan simpan
  3. #'#tulis semula Apa yang seterusnya : Pertama, kita perlu mengumpul dan memuatkan data. Sebagai contoh, jika kami ingin menggunakan alamat Kesatuan Negeri 2022 Presiden Biden sebagai konteks tambahan, repositori GitHub LangChain menyediakan dokumen teks asal untuk fail tersebut. Untuk memuatkan data ini, kami boleh memanfaatkan pelbagai alat pemuatan dokumen terbina dalam LangChain. Dokumen ialah kamus yang terdiri daripada teks dan metadata. Untuk memuatkan teks, anda boleh menggunakan alat TextLoader LangChain

Alamat dokumen asal: https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/ docs/modules/state_of_the_union.txt

import requestsfrom langchain.document_loaders import TextLoaderurl = "https://raw.githubusercontent.com/langchain-ai/langchain/master/docs/docs/modules/state_of_the_union.txt"res = requests.get(url)with open("state_of_the_union.txt", "w") as f:f.write(res.text)loader = TextLoader('./state_of_the_union.txt')documents = loader.load()

Seterusnya, pecahkan dokumen kepada beberapa bahagian. Oleh kerana keadaan asal dokumen terlalu panjang untuk dimuatkan ke dalam tetingkap konteks LLM, ia perlu dipecahkan kepada ketulan teks yang lebih kecil. LangChain juga mempunyai banyak alat pemisah terbina dalam. Untuk contoh mudah ini, kita boleh menggunakan CharacterTextSplitter dengan chunk_size ditetapkan kepada 500 dan chunk_overlap ditetapkan kepada 50, yang mengekalkan kesinambungan teks antara ketulan teks.

from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)chunks = text_splitter.split_documents(documents)

Akhir sekali, benamkan blok teks dan simpannya. Untuk membolehkan carian semantik dilakukan merentasi blok teks, pembenaman vektor perlu dijana untuk setiap blok teks dan disimpan bersama dengan pembenamannya. Untuk menjana benam vektor, gunakan model benam OpenAI untuk penyimpanan, gunakan pangkalan data vektor Weaviate. Blok teks boleh diisi secara automatik ke dalam pangkalan data vektor dengan memanggil .from_documents().

from langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Weaviateimport weaviatefrom weaviate.embedded import EmbeddedOptionsclient = weaviate.Client(embedded_options = EmbeddedOptions())vectorstore = Weaviate.from_documents(client = client,documents = chunks,embedding = OpenAIEmbeddings(),by_text = False)

Langkah 1: Dapatkan

#๐ŸŽœ##๐ŸŽœ##๐ŸŽœ##๐ŸŽœ ๐ŸŽœ๐ŸŽœ#Selepas mengisi pangkalan data vektor, kami boleh mentakrifkannya sebagai komponen retriever yang boleh mendapatkan konteks tambahan berdasarkan persamaan semantik antara pertanyaan pengguna dan blok terbenam

retriever = vectorstore.as_retriever()
#๐ŸŽœ๐ŸŽœ ##๐ŸŽœ ๐ŸŽœ#Langkah 2: Tingkatkan

from langchain.prompts import ChatPromptTemplatetemplate = """You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.Question: {question} Context: {context} Answer:"""prompt = ChatPromptTemplate.from_template(template)print(prompt)

Seterusnya, untuk meningkatkan gesaan dengan konteks tambahan, anda perlu menyediakan templat segera . Seperti yang ditunjukkan di bawah, gesaan boleh disesuaikan dengan mudah menggunakan templat gesaan.

Langkah 3: Jana

#๐ŸŽœ๐ŸŽœ๐ŸŽœ##๐ŸŽœ๐ŸŽœ๐ŸŽœ##๐ŸŽœ๐ŸŽœ ๐ŸŽœ#Akhirnya, kita boleh membina rantaian pemikiran untuk proses RAG ini, menghubungkan retriever, templat segera dan LLM bersama-sama. Setelah rantai RAG ditakrifkan, ia boleh dipanggil

from langchain.chat_models import ChatOpenAIfrom langchain.schema.runnable import RunnablePassthroughfrom langchain.schema.output_parser import StrOutputParserllm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)rag_chain = ({"context": retriever,"question": RunnablePassthrough()} | prompt | llm| StrOutputParser() )query = "What did the president say about Justice Breyer"rag_chain.invoke(query)"The president thanked Justice Breyer for his service and acknowledged his dedication to serving the country. The president also mentioned that he nominated Judge Ketanji Brown Jackson as a successor to continue Justice Breyer's legacy of excellence."
Rajah berikut menunjukkan proses RAG untuk contoh khusus ini: #๐ŸŽœ ๐ŸŽœ#Ringkasan

Artikel ini memperkenalkan konsep RAG, yang merupakan karya terawal Daripada kertas kerja trieval 2020 Penjanaan Tambahan untuk Tugas NLP Intensif Pengetahuan". Selepas memperkenalkan teori di sebalik RAG, termasuk motivasi dan penyelesaian, artikel ini menunjukkan cara untuk melaksanakannya dalam Python. Artikel ini menunjukkan cara untuk melaksanakan aliran kerja RAG menggunakan OpenAI LLM ditambah dengan pangkalan data vektor Weaviate dan model pembenaman OpenAI. Peranan LangChain ialah orkestrasi.

Atas ialah kandungan terperinci Laksanakan kod Python untuk meningkatkan keupayaan mendapatkan semula untuk model besar. 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