rag/rag_bm25.ipynb

549 lines
21 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "7290374f-d5b8-4670-b7fe-36a1293577ba",
"metadata": {},
"outputs": [],
"source": [
"from rank_bm25 import BM25Okapi\n",
"import chromadb"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "617ec7ec-0f30-402d-8e45-dc1f762d1409",
"metadata": {},
"outputs": [],
"source": [
"chromadb_path = './chromadb'\n",
"collection_name = 'cera'\n",
"chroma_client = chromadb.PersistentClient(path=chromadb_path)\n",
"collection = chroma_client.get_collection(name=collection_name)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "021e4cfa-49d9-460f-9b43-1524c327e4c6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['ids', 'embeddings', 'metadatas', 'documents', 'uris', 'data'])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"collection.get().keys()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "5ae7d104-f8f6-45ad-a2af-b8475e400262",
"metadata": {},
"outputs": [],
"source": [
"docs = collection.get()['documents']"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "96e8acca-e0dc-4dbd-9130-4f3ff64ba86a",
"metadata": {},
"outputs": [],
"source": [
"ids = collection.get()['ids']"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "536f29fa-9377-41a8-a9d4-a52ace99ed74",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2896"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(docs)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "8cf9b3e2-c960-4a88-8974-848611a4d5d7",
"metadata": {},
"outputs": [],
"source": [
"docs_tokenized = [doc.replace(\"\\n\", \" \").split(\" \") for doc in docs]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "87085da2-edac-4e9c-8586-1139ac814dcd",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [
{
"data": {
"text/plain": [
"['Le',\n",
" 'paiement',\n",
" 'sans',\n",
" 'contact',\n",
" '',\n",
" 'Les',\n",
" 'points',\n",
" 'clés',\n",
" '',\n",
" 'Pratique',\n",
" 'Plus',\n",
" 'besoin',\n",
" 'de',\n",
" 'chercher',\n",
" 'de',\n",
" 'la',\n",
" 'monnaie',\n",
" 'pour',\n",
" 'régler',\n",
" 'votre',\n",
" 'café,',\n",
" 'parking,',\n",
" 'repas,',\n",
" 'journal…',\n",
" 'Gratuit',\n",
" 'Cette',\n",
" 'fonctionnalité',\n",
" 'est',\n",
" 'ajoutée',\n",
" 'automatiquement',\n",
" 'et',\n",
" 'gratuitement',\n",
" 'à',\n",
" 'votre',\n",
" 'carte.',\n",
" 'Rapide',\n",
" 'Vous',\n",
" 'réglez',\n",
" 'votre',\n",
" 'achat',\n",
" 'dun',\n",
" 'simple',\n",
" 'geste,',\n",
" 'sans',\n",
" 'insérer',\n",
" 'votre',\n",
" 'carte',\n",
" 'ni',\n",
" 'composer',\n",
" 'votre',\n",
" 'code',\n",
" 'confidentiel.']"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"docs_tokenized[0]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "0ba5858d-9cdb-4159-a9ab-88b485a8991b",
"metadata": {},
"outputs": [],
"source": [
"bm25_db = BM25Okapi(docs_tokenized)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "c854970c-6e40-4209-9e02-a7e4cb9fb509",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<rank_bm25.BM25Okapi at 0x10c7be6d0>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bm25_db"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "61d10ce1-38fe-4d36-b8c6-1845c116b626",
"metadata": {},
"outputs": [],
"source": [
"query = \"Comment procéder pour déclarer un sinistre Visa Premier ?\""
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "8c362a7b-5d78-4ba5-be8f-165ca5e9e023",
"metadata": {},
"outputs": [],
"source": [
"query_tokenized = query.split(\" \")\n",
"doc_scores = bm25_db.get_scores(query_tokenized)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "99c5cc3d-5b30-478d-b3b8-c252dff6e1fc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2896"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(doc_scores)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "e5c91dd9-ebda-42ba-9ac8-d7fec2be981e",
"metadata": {},
"outputs": [],
"source": [
"ids_scores = dict(zip(ids, doc_scores))"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "5865d7f6-f10d-4c08-873d-89ae60059008",
"metadata": {},
"outputs": [],
"source": [
"sorted_ids_scores = sorted(ids_scores.items(), key=lambda x: x[1], reverse=True)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "1964be5f-8ab7-437c-986c-d5ef8039748d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'d42d7174ce.html-1': 21.04962022219261,\n",
" '25dcc77e00.html-6': 18.00344127762922,\n",
" '19864d414b.html-1': 16.616167931951313}"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dict(sorted_ids_scores[:3])"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "f0ff43ff-2cb1-47a7-aaaf-f9dbecd041ff",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ids': ['19864d414b.html-1', 'd42d7174ce.html-1', '25dcc77e00.html-6'],\n",
" 'embeddings': None,\n",
" 'metadatas': [{'category': 'professionnels',\n",
" 'url': 'https://www.caisse-epargne.fr/rhone-alpes/professionnels/proteger-moi-mon-activite/numeros-utiles-contrat-assurance/'},\n",
" {'category': 'assurer',\n",
" 'url': 'https://www.caisse-epargne.fr/rhone-alpes/assurer/declaration-sinistre-intemperies/'},\n",
" {'category': 'comptes-cartes',\n",
" 'url': 'https://www.caisse-epargne.fr/rhone-alpes/comptes-cartes/carte-visa-premier/'}],\n",
" 'documents': ['Numéros Utiles Contrat Assurance Professionnel\\n\\nVotre contrat Assurance Multirisque Professionnelle ou Assurance Auto des Professionnels\\n\\nUn numéro unique et non surtaxé est mis à votre disposition pour déclarer un sinistre ou mettre à jour votre contrat.Appelez-le\\xa0:\\nPour nous contacter par mail\\xa0:• Contrat Assurance Multirisque Professionnelle\\xa0:service-client.ird@aismail.fr• Contrat Assurance Auto des Professionnels\\xa0: service-client.auto@aismail.fr\\n',\n",
" 'Intempéries, déclarer son sinistre en ligne !\\n\\nEn bref\\n\\nDécouvrez comment déclarer votre sinistre en ligne\\nLes conseils en cas de sinistre\\nTout savoir sur lindemnisation\\nEn cas dévénement climatique, le besoin dassistance ou de prise en charge est immédiat\\xa0!Cest pourquoi la Caisse dEpargne vous facilite la déclaration de sinistre grâce à votre espace personnel internet. Si vous êtes détenteur dun contrat dassurance habitation ou automobile, il vous suffit de vous connecter à votre espace personnel et de procéder à la déclaration en ligne.',\n",
" 'Carte Visa Premier\\n\\nEt si vous optiez pour la carte Visa Premier Izicarte associée à votre crédit renouvelable ?\\n\\nVotre carte Visa Premier Izicarte vous permet de disposer dun crédit renouvelable pour faire face à des imprévus ou saisir des opportunités sans perdre de temps.\\nVous choisissez librement le mode de règlement que vous souhaitez :\\nAu comptant : par débit de votre compte de dépôt ;\\nÀ crédit, dans la limite du montant disponible sur votre crédit renouvelable.\\nGrâce à votre crédit renouvelable associé à votre carte Visa Premier Izicarte, vous pouvez étaler en plusieurs fois vos dépenses à crédit et choisir votre rythme de remboursement.\\nUn crédit vous engage et doit être remboursé. Vérifiez vos capacités de remboursement avant de vous engager.'],\n",
" 'uris': None,\n",
" 'data': None}"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"collection.get(ids=['d42d7174ce.html-1', '25dcc77e00.html-6', '19864d414b.html-1'])"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "11a9a24e-3928-4b0b-85fe-d9c406fa80ed",
"metadata": {
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Carte Visa Premier\n",
"\n",
"Les points clés\n",
"\n",
"Innovation Paiement sans contact(1) et paiement mobile compatible(2).\n",
"Garanties dAssurances et Assistance(3) Vous vous protégez ainsi que votre famille lors de vos déplacements en France et à létranger.\n",
"Plafonds élevés Bénéficiez de souplesse grâce à des plafonds de paiement et retraits supérieurs à ceux dune Visa Classic.\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"Carte Visa Premier, toujours à vos côtés\n",
"\n",
"Carte de paiement et de retrait utilisable en France et à létranger ;\n",
"Des plafonds de paiement et de retrait élevés ;\n",
"Des Garanties dAssurances et dAssistance incluses pour vous protéger, vous et votre famille, lors de vos déplacements en France et à létranger (une couverture assurances et assistance médicale dès que vous être à plus de 100kms de votre domicile); Exemples de garanties :En voyage : modification ou annulation de voyage, responsabilité civile, rapatriement en cas de maladie ou daccident, remboursement des frais médicaux à létranger, etc.Au ski : remboursement des frais médicaux en France, forfait et cours de ski non utilisésAvec un véhicule de location : accident ou volEn avion ou en train : perte, vol ou détérioration de bagages, etc.\n",
"Un service de dépannage cash sous 48h à létranger ;\n",
"Un retard ou une annulation de votre vol ? Votre accès à bord vous est refusé pour cause de surbooking ? AirRefund (partenaire de Visa), gère à votre place la demande dindemnisation auprès de la compagnie aérienne. Sajoute à lindemnité de retard, le remboursement des frais engagés durant lattente (repas, transferts, hôtels…)\n",
"Un service de mise en opposition de la carte 24h/24 et 7j/7, en cas de perte, de vol ou dutilisation frauduleuse de la carte ;\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"Bénéficiez davantages supplémentaires\n",
"\n",
"Fonctionne en Sans Contact ;\n",
"Compatible paiement mobile ;\n",
"Choix possible entre débit différé ou débit immédiat ;\n",
"Disponible avec un crédit avec la carte Visa Premier Izicarte associée au crédit renouvelable.\n",
"Les paiements par carte sont rassemblés, et débités en une seule fois tous les mois à date fixe: cest lencours des paiements par carte. Le suivi de cet encours peut se faire à tout moment via la banque à distance (internet et mobile) et permet danticiper la provision nécessaire sur le compte.\n",
"Le débit différé peut permettre une gestion mensuelle de son budget différente de celle en débit immédiat, puisque la trésorerie disponible sur le compte nest affectée des paiements par carte quune fois par mois.\n",
"\n",
"Il est ainsi possible de gérer différemment les frais qui seront remboursés (frais médicaux, frais professionnels … ), ainsi que les dépenses importantes.\n",
"Certaines agences de location de voiture à létranger préfèrent les cartes avec la mention « crédit », aux cartes marquées uniquement « débit ». Les cartes à débit différé comportent la mention « crédit ».\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"Profitez des avantages Visa Premier(10)\n",
"\n",
"Pour en savoir plus sur les avantages dédiés aux porteurs de la carte Visa Premier, rendez-vous sur le site www.visa.fr et inscrivez-vous à la newsletter.\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"Bénéficiez de la garantie achat(11)\n",
"\n",
"Tous les achats réglés avec votre carte Visa Premier sont protégés contre la détérioration et le vol avec effraction ou par agression.La couverture sélève au maximum à la valeur dachat du bien.\n",
"Valeur du bien : entre 75 € et 800 € TTC.\n",
"Nombre de jours couverts (post acquisition/livraison) : 7 jours.\n",
"Plafond de la garantie : 800 euros TTC par objet et 1 600 euros par an.\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"Et si vous optiez pour la carte Visa Premier Izicarte associée à votre crédit renouvelable ?\n",
"\n",
"Votre carte Visa Premier Izicarte vous permet de disposer dun crédit renouvelable pour faire face à des imprévus ou saisir des opportunités sans perdre de temps.\n",
"Vous choisissez librement le mode de règlement que vous souhaitez :\n",
"Au comptant : par débit de votre compte de dépôt ;\n",
"À crédit, dans la limite du montant disponible sur votre crédit renouvelable.\n",
"Grâce à votre crédit renouvelable associé à votre carte Visa Premier Izicarte, vous pouvez étaler en plusieurs fois vos dépenses à crédit et choisir votre rythme de remboursement.\n",
"Un crédit vous engage et doit être remboursé. Vérifiez vos capacités de remboursement avant de vous engager.\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"LExtension de Garantie Constructeur(11) (12)\n",
"\n",
"Une garantie constructeur allongée\n",
"Avec votre carte Visa Premier Izicarte, vous bénéficiez en cas de panne dune extension de garantie constructeur supplémentaire de 3 ans, sur les appareils électrodomestiques et produits nomades achetés neufs(11) (12) (électroménager, audiovisuel, pocket/image, informatique).\n",
"\n",
"----------\n",
"\n",
"Carte Visa Premier\n",
"\n",
"Gérez votre carte bancaire depuis lapplication Caisse dEpargne Rhône Alpes\n",
"\n",
"Gérez vos plafonds ;\n",
"Verrouillez temporairement/déverrouillez votre carte ;\n",
"Activez/désactivez les paiements et retraits à distance et/ou à létranger ;\n",
"Faites opposition 24h/24-7j/7 en cas de perte, de vol ou dutilisation frauduleuse de votre carte.\n",
"\n",
"----------\n",
"\n"
]
}
],
"source": [
"nb_passage = 1\n",
"while True:\n",
" id = \"25dcc77e00.html-\" + str(nb_passage)\n",
" passages = collection.get(ids=[id])\n",
" if len(passages['documents']) > 0:\n",
" print(passages['documents'][0])\n",
" print(\"\\n----------\\n\")\n",
" nb_passage += 1\n",
" else:\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "427a2fa0-0f47-4571-94d8-3878ca034de4",
"metadata": {},
"outputs": [],
"source": [
"query = \"Quel est le risque de perte en capital pour un sociétaire ?\"\n",
"query_tokenized = query.split(\" \")\n",
"doc_scores = bm25_db.get_scores(query_tokenized)\n",
"ids_scores = dict(zip(ids, doc_scores))\n",
"sorted_ids_scores = sorted(ids_scores.items(), key=lambda x: x[1], reverse=True)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "5251aa60-3831-416f-a7c6-f824c308587e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('f6d921ced8.html-3', 29.446670121305353),\n",
" ('ff83960e9d.html-1', 24.88880087849239),\n",
" ('ecb10d12cf.html-2', 24.206423694569803),\n",
" ('f753c94bb4.html-1', 24.009169917059968),\n",
" ('dbdc338e94.html-7', 23.845667609823003),\n",
" ('f66629c8b6.html-2', 23.779561367699497),\n",
" ('9b9d084514.html-2', 23.770317569985096),\n",
" ('6123ccc4f8.html-6', 23.732579312988157),\n",
" ('c145d2aa96.html-4', 23.48215739435705),\n",
" ('286a391488.html-2', 23.443469979811134)]"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_ids_scores[:10]"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "b16129c2-e3fa-41ca-a60f-b5f596ede1f0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ids': ['f6d921ced8.html-3'],\n",
" 'embeddings': None,\n",
" 'metadatas': [{'category': 'votre-banque',\n",
" 'url': 'https://www.caisse-epargne.fr/rhone-alpes/votre-banque/nos-engagements/etre-societaire/'}],\n",
" 'documents': ['Devenez sociétaire !\\n\\nQui peut devenir sociétaire ?\\n\\nSi vous souhaitez que la SLE rachète vos parts sociales, votre demande, soumise à lautorisation du conseil dadministration de la SLE, doit être formulée avant le 31 mai, date de clôture de lexercice. De ce fait, aucune assurance ne peut être donnée quant à la liquidité des parts sociales.\\n\\nPar ailleurs, les rachats de parts sociales sont subordonnés au respect du capital minimum en deçà duquel la SLE ne peut descendre. En conséquence, les sociétaires doivent être conscients quils pourraient ne pas être en mesure de céder facilement leurs parts sociales.\\n\\nLe remboursement effectif, quil soit consécutif à la perte de la qualité de sociétaire ou à une demande de rachat, intervient le 1er jour ouvré du nouvel exercice ou dans un délai maximum de 3 mois suivant la demande pour les cas dérogatoires suivants :\\n\\n Pour un particulier : changement de foyer fiscal, décès, divorce, invalidité, licenciement, départ à la retraite ou préretraite, transfert du domicile à létranger, déménagement hors du ressort territorial de la Caisse dEpargne daffiliation, redressement judiciaire du sociétaire, de clôture dun livret A lorsque le client ne détient pas dautres produits et tout évènement exceptionnel revêtant une gravité telle quelle contraigne le sociétaire à liquider tout ou partie de ses parts.\\n\\n Pour une personne morale : redressement judiciaire, liquidation ou dissolution.\\n\\nLes parts sociales sont remboursées à leur valeur nominale sous réserve du risque investisseur (cf. paragraphe « Responsabilité risque de perte en capital »)\\nVotre responsabilité dinvestisseur est limitée au niveau de votre investissement. Le risque investisseur (risque de perte en capital) porte sur le Groupe BPCE et non sur la SLE ou la Caisse dEpargne (du fait du mécanisme de solidarité interne au Groupe BPCE).\\n\\nLes parts sociales demeurent des instruments risqués. Votre responsabilité, limitée au montant de lapport, est engagée jusquà 5 ans après le retrait. Il existe un risque de perte en capital en cas de défaut ou de faillite de la Caisse dEpargne ou de mise en œuvre de mesures de résolution au sein du Groupe BPCE. Les parts sociales ne sont pas éligibles au mécanisme de garantie des investisseurs ou de garantie des déposants et leur rémunération nest pas garantie.'],\n",
" 'uris': None,\n",
" 'data': None}"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"collection.get(ids=['f6d921ced8.html-3'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d5b1969b-6b87-40c9-8a69-ef4dc1c14c30",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "RAG_ENV",
"language": "python",
"name": "rag_env"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 5
}