(P) Un système de génération au niveau de la récupération au niveau de l’entreprise (code complet open-source et expliqué)

 (P) Un système de génération au niveau de la récupération au niveau de l’entreprise (code complet open-source et expliqué)


Comment pouvons-nous rechercher les informations clés recherchées de Plus de 10 000 pages de PDF dans 2,5 heures? Pour vérifier les faits, comment le mettre en œuvre afin que les réponses soient soutenues par Références au niveau de la pageminimiser les hallucinations?

Rag-challenge-2 est un excellent projet open source par Ilya Rice qui s’est classé 1er au Entreprise Rag Challengequi a plus de 4500 lignes de code pour implémenter un système de chiffon très performant. Cela peut sembler écrasant pour les nouveaux arrivants qui commencent tout juste à apprendre cette technologie. Par conséquent, pour vous aider à démarrer rapidement – et à me motiver à apprendre ses tenants et aboutissants – j’ai créé un tutoriel complet à ce sujet.

Commençons par décrire son flux de travail

Flux de travail

Il est assez facile de suivre chaque étape du flux de travail ci-dessus, où plusieurs outils sont utilisés: docket pour l’analyse des PDF, Langchain pour le texte du texte, Fais pour la vectorisation et la recherche de similitude et le chatppt pour les LLM.

En outre, je décris également le CodeFlow, démontrant la logique en cours d’exécution impliquant plusieurs fichiers Python où les démarreurs peuvent facilement se perdre. Différents fichiers sont colorés différemment.

https://preview.redd.it/94di2cjk7Uye1.png?width=393&format=png&auto=webp&s=4b66db4aa1086e26652a7eebf9989e48b3c0aac2

Le CodeFlow peut être vu comme ça. Le but de montrer cela ne vous permet pas de mémoriser toutes ces relations de fichier. Cela fonctionne mieux pour vous de vérifier le code source vous-même et de l’utiliser comme référence si vous vous trouvez perdu dans le code.

https://preview.redd.it/vyzz29pu7uye1.png?width=684&format=png&auto=webp&s=06b36a55a19b88a2590d795ecdad3b187098c06e

Ensuite, nous pouvons personnaliser les invites pour nos propres besoins. Dans ce tutoriel, j’ai enregistré toutes les pages Web de cela site web dans les PDF comme notes techniques. Modifiez ensuite les invites à s’adapter à ce cas. Par exemple, nous utilisons l’apprentissage à quelques coups pour aider les LLM à mieux comprendre à quoi s’attendre les questions et quel format la réponse devrait être. Vous trouverez ci-dessous les invites Reformastion Pour reformuler la question comparative dans les sous-questions:

Example: Input: Original comparative question: 'Which chapter had content about positional encoding, "LLM components" or "LLM post-training"?' Chapters mentioned: "LLM components", "LLM post-training" Output: { "questions": ( { "chapter_name": "LLM components", "question": "What contents does LLM components have?" }, { "chapter_name": "LLM post-training", "question": "What contents does LLM post-training have?" } ) } 

Le projet original d’Ilya Rice Concevoir son système de chiffon pour répondre aux questions des rapports annuels des entreprises, il n’a donc conçu que trois types de format de réponse aux questions pour ce défi: un nameun numberou un boolean. Mais pour poser des questions sur des trucs techniques, nous posons absolument des questions générales comme Comment fonctionne la corde? Pour connaître certains concepts et similaires

Par conséquent, je modifie en outre la logique système pour répondre à ce besoin en personnalisant un RéponsewithragcontextexPlanationPrompt classe et correspondant automatiquement au chapitre le plus lié et aux pages correspondantes via la recherche dans toutes les bases de données FAISS (récupérez uniquement le top-1)

La performance finale est démontrée ci-dessous (non cueillie en cerise, une seule fois une fois).

  • Comment fonctionne la corde?

{ "question_text": "How does RoPE work?", "kind": "explanation", "value": "RoPE, or Rotary Positional Embedding, operates by applying position-dependent rotations to token embeddings. Specifically, it splits each embedding into two parts, treats these as the real and imaginary components of a complex number, and multiplies them by a complex rotation factor derived from sine and cosine functions with frequencies that vary by dimension. This rotation integrates positional information directly into the embeddings so that when the dot product between queries and keys is computed during attention, the resulting scores naturally reflect the relative position of tokens.", "references": ( { "pdf_sha1": "LLM_roadmap_1", "page_index": 84 }, { "pdf_sha1": "LLM_roadmap_1", "page_index": 50 } ), "reasoning_process": "1. The question asks for an explanation of how RoPE (Rotary Positional Embedding) works. This requires us to describe its underlying mechanism. n2. We start by noting that RoPE assigns a unique rotation—using sine and cosine functions—to each token’s embedding based on its position. n3. The context from page 85 shows that RoPE implements positional encoding by splitting the embedding into two halves that can be viewed as the real and imaginary parts of a complex number, then applying a rotation by multiplying these with a complex number constructed from cosine and sine values. n4. This approach allows the model to incorporate position information directly into the embedding by rotating the query and key vectors before the attention calculation. The rotation angles vary with token positions and are computed using different frequencies for each embedding dimension. n5. As a result, when the dot product between query and key is computed, it inherently captures the relative positional differences between tokens. n6. Furthermore, because the transformation is multiplicative and phase-based, the relative distances between tokens are encoded in a smooth, continuous manner that allows the downstream attention mechanism to be sensitive to the ordering of tokens." } 

Le Llm_roadmap_1 est le bon chapitre dont on a parlé la corde site web. La page référencée est également correcte également.

https://preview.redd.it/xp56oz4qauye1.png?width=1096&format=png&auto=webp&s=7a978d24b886c3ed33bda4524991

  • Quelles sont les étapes pour entraîner un nanogpt à partir de zéro?

Voyons directement les réponses, ce qui est également raisonnable

La formation de nanogpt à partir de zéro implique plusieurs étapes clairement définies. Tout d’abord, configurez l’environnement En installant les bibliothèques nécessaires, en utilisant ANACONDA ou Google Colab, puis Télécharger l’ensemble de données (par exemple, TinyShakespeare). Ensuite, jetez le texte en représentations numériques et diviser les données dans les ensembles de formation et de validation. Définir l’architecture du modèle y compris les incorporations de jetons / positionnelles, les blocs de transformateurs avec des réseaux d’auto-atténuer et les réseaux d’adaptation multiples et la normalisation des couches. Configurer des hyperparamètres de formation et configurer un optimiseur (comme ADAMW). Procéder avec une boucle de formation Cela effectue des passes vers l’avant, calcule la perte, les rétropropagats et les paramètres à jour, tandis que évaluer périodiquement la performance sur les données de formation et de validation. Enfin, Utilisez le modèle formé pour générer un nouveau texte à partir d’un contexte donné.

Tous les code sont fournis sur Colab Et le tutoriel est référencé ici. J’espère que cela aide!

soumis par / U / Great-Reception447
(lien) (Commentaires)



Source link

Related post