Skip to content

Commit 830a25b

Browse files
committedApr 8, 2024
add Loading Documents and RAG notebooks
1 parent ab6e37f commit 830a25b

4 files changed

+538
-3
lines changed
 

‎06-LoadingDocumentsToVectoreStore.ipynb

+306
Large diffs are not rendered by default.

‎07-RAG.ipynb

+214
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"## Load embedding model"
8+
]
9+
},
10+
{
11+
"cell_type": "code",
12+
"execution_count": 1,
13+
"metadata": {},
14+
"outputs": [],
15+
"source": [
16+
"from langchain.embeddings import HuggingFaceEmbeddings\n",
17+
"\n",
18+
"EMBEDDING_MODEL_NAME = \"sdadas/mmlw-retrieval-roberta-large\"\n",
19+
"\n",
20+
"embeddings = HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL_NAME)"
21+
]
22+
},
23+
{
24+
"cell_type": "code",
25+
"execution_count": 2,
26+
"metadata": {},
27+
"outputs": [],
28+
"source": [
29+
"from qdrant_client import QdrantClient\n",
30+
"\n",
31+
"collection_name = f\"poquad_{EMBEDDING_MODEL_NAME.replace('/', '_')}\"\n",
32+
"client = QdrantClient(host='localhost', port=6333)"
33+
]
34+
},
35+
{
36+
"cell_type": "code",
37+
"execution_count": 3,
38+
"metadata": {},
39+
"outputs": [],
40+
"source": [
41+
"from langchain.vectorstores import Qdrant\n",
42+
"\n",
43+
"qdrant = Qdrant(\n",
44+
" client=client,\n",
45+
" collection_name=collection_name,\n",
46+
" embeddings=embeddings\n",
47+
")"
48+
]
49+
},
50+
{
51+
"cell_type": "code",
52+
"execution_count": 4,
53+
"metadata": {},
54+
"outputs": [],
55+
"source": [
56+
"retriever = qdrant.as_retriever()"
57+
]
58+
},
59+
{
60+
"cell_type": "code",
61+
"execution_count": 5,
62+
"metadata": {},
63+
"outputs": [],
64+
"source": [
65+
"from transformers import AutoModelForQuestionAnswering, AutoTokenizer\n",
66+
"\n",
67+
"model_name = './output/roberta-base-squad2-pl/checkpoint-8500'\n",
68+
"\n",
69+
"model = AutoModelForQuestionAnswering.from_pretrained(model_name)\n",
70+
"tokenizer = AutoTokenizer.from_pretrained(model_name)"
71+
]
72+
},
73+
{
74+
"cell_type": "code",
75+
"execution_count": 6,
76+
"metadata": {},
77+
"outputs": [],
78+
"source": [
79+
"from transformers import pipeline\n",
80+
"\n",
81+
"nlp = pipeline('question-answering', model=model, tokenizer=tokenizer)"
82+
]
83+
},
84+
{
85+
"cell_type": "code",
86+
"execution_count": 9,
87+
"metadata": {},
88+
"outputs": [],
89+
"source": [
90+
"def get_context(query, k):\n",
91+
" results = retriever.get_relevant_documents(\n",
92+
" k=k,\n",
93+
" query=query,\n",
94+
" fetch_k=k*5,\n",
95+
" )\n",
96+
"\n",
97+
" context = \"\"\n",
98+
"\n",
99+
" for result in results:\n",
100+
" context += result.page_content + \" \"\n",
101+
" \n",
102+
"\n",
103+
" return context"
104+
]
105+
},
106+
{
107+
"cell_type": "code",
108+
"execution_count": 15,
109+
"metadata": {},
110+
"outputs": [
111+
{
112+
"name": "stdout",
113+
"output_type": "stream",
114+
"text": [
115+
"Od 2014 roku w Superpucharze, z inicjatywy prezesa PZPN Zbigniewa Bońka, nastąpiła zmiana, gdyż po 8 latach przerwy związek podjął na swoje barki organizację rozgrywek o Superpuchar. O trofeum walczyć będą Mistrz Polski oraz zdobywca Pucharu Polski sezonu zakończonego w roku rozgrywania Superpucharu. Tym samym powrócono do nazwy Superpuchar Polski. Mecz rozgrywany będzie na stadionie Mistrza Polski, na około tydzień przed startem nowego sezonu Ekstraklasy. W sytuacji, gdy ten sam klub sięgnie po mistrzostwo i Puchar Polski, jego rywalem w meczu o trofeum będzie finalista ostatniej edycji Pucharu Polski. Od 2014 roku w Superpucharze, z inicjatywy prezesa PZPN Zbigniewa Bońka, nastąpiła zmiana, gdyż po 8 latach przerwy związek podjął na swoje barki organizację rozgrywek o Superpuchar. O trofeum walczyć będą Mistrz Polski oraz zdobywca Pucharu Polski sezonu zakończonego w roku rozgrywania Superpucharu. Tym samym powrócono do nazwy Superpuchar Polski. Mecz rozgrywany będzie na stadionie Mistrza Polski, na około tydzień przed startem nowego sezonu Ekstraklasy. W sytuacji, gdy ten sam klub sięgnie po mistrzostwo i Puchar Polski, jego rywalem w meczu o trofeum będzie finalista ostatniej edycji Pucharu Polski. Ze względu na organizację Euro 2012 Superpuchar Ekstraklasy jak i cały sezon ligowy rozpoczął się nie jak dotychczas w lipcu, a w sierpniu. Jednocześnie nie potrafiono znaleźć obiektu w którym mógłby przyjąć piłkarzy i kibiców Legii Warszawa (Zdobywcy Pucharu Polski) i Śląska Wrocław (Mistrza Polski). Zdecydowano ostatecznie że mecz o Superpuchar Polski odbędzie się na stadionie przy ulicy Łazienkowskiej w Warszawie. Organizacja meczu na stadionie Legii została skrytykowana przez kibiców obu drużyn, przez co większość kibiców postanowiła zbojkotować to spotkanie, przez co na meczu zjawiło się zaledwie 5000 widzów. 12 sierpnia 2012 na Stadionie Wojska Polskiego Legia która była W fazie play-off uprawnieni do występu będą zwycięzcy każdej z czterech grup w każdej z lig A, B, C, D. Jeżeli zwycięzca danej grupy w którejkolwiek z lig zakwalifikuje się do Mistrzostw Europy podczas tradycyjnych eliminacji, prawo do udziału w fazie play-off przechodzi na kolejną drużynę w danej lidze według rankingu Ligi Narodów. Założenie UEFA jest takie, aby o cztery wolne miejsca rozegrać cztery turnieje eliminacyjne, które rozgrywane będą metodą pucharową: mecz półfinałowy oraz mecz finałowy. Tylko zwycięzca każdego z turniejów awansuje do Mistrzostw Europy 2020. Założono również, że w każdym z turniejów rywalizowałyby ze sobą drużyny z \n",
116+
"{'score': 0.619749903678894, 'start': 985, 'end': 1012, 'answer': 'na stadionie Mistrza Polski'}\n"
117+
]
118+
}
119+
],
120+
"source": [
121+
"question = \"Gdzie rozegrany zostanie pojedynek o Superpuchar?\"\n",
122+
"context = get_context(question, 1)\n",
123+
"\n",
124+
"print(context)\n",
125+
"\n",
126+
"result = nlp(question=question, context=context)\n",
127+
"\n",
128+
"print(result)"
129+
]
130+
},
131+
{
132+
"cell_type": "markdown",
133+
"metadata": {},
134+
"source": [
135+
"## Evaluation"
136+
]
137+
},
138+
{
139+
"cell_type": "code",
140+
"execution_count": 16,
141+
"metadata": {},
142+
"outputs": [],
143+
"source": [
144+
"from datasets import load_dataset\n",
145+
"\n",
146+
"poquad = load_dataset(\"clarin-pl/poquad\")"
147+
]
148+
},
149+
{
150+
"cell_type": "code",
151+
"execution_count": 17,
152+
"metadata": {},
153+
"outputs": [],
154+
"source": [
155+
"poquad_validation = poquad[\"validation\"]"
156+
]
157+
},
158+
{
159+
"cell_type": "code",
160+
"execution_count": 18,
161+
"metadata": {},
162+
"outputs": [],
163+
"source": [
164+
"import evaluate\n",
165+
"\n",
166+
"metric = evaluate.load(\"squad\")"
167+
]
168+
},
169+
{
170+
"cell_type": "code",
171+
"execution_count": null,
172+
"metadata": {},
173+
"outputs": [],
174+
"source": [
175+
"from transformers import pipeline\n",
176+
"\n",
177+
"def get_predictions(eval_dataset, qa_pipeline):\n",
178+
" predictions = []\n",
179+
" for question, id in zip(eval_dataset[\"question\"], eval_dataset[\"context\"], eval_dataset[\"id\"]):\n",
180+
" context = get_context(question, 5)\n",
181+
" answer = qa_pipeline(question=question, context=context)\n",
182+
" prediction = {\n",
183+
" 'id': id,\n",
184+
" 'prediction_text': answer['answer']\n",
185+
" }\n",
186+
"\n",
187+
" predictions.append(prediction)\n",
188+
"\n",
189+
" return predictions"
190+
]
191+
}
192+
],
193+
"metadata": {
194+
"kernelspec": {
195+
"display_name": "env",
196+
"language": "python",
197+
"name": "python3"
198+
},
199+
"language_info": {
200+
"codemirror_mode": {
201+
"name": "ipython",
202+
"version": 3
203+
},
204+
"file_extension": ".py",
205+
"mimetype": "text/x-python",
206+
"name": "python",
207+
"nbconvert_exporter": "python",
208+
"pygments_lexer": "ipython3",
209+
"version": "3.12.2"
210+
}
211+
},
212+
"nbformat": 4,
213+
"nbformat_minor": 2
214+
}

‎docker-compose.yml

+9-1
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,24 @@ services:
44
image: qdrant/qdrant
55
ports:
66
- 6333:6333
7+
- 6334:6334
8+
volumes:
9+
- qdrant_data:/qdrant/storage
710
elasticsearch:
811
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
912
environment:
1013
- discovery.type=single-node
1114
- xpack.security.enabled=false
1215
ports:
1316
- 9200:9200
17+
volumes:
18+
- elasticsearch_data:/usr/share/elasticsearch/data
1419
command:
1520
- /bin/bash
1621
- -c
1722
- |
1823
bin/elasticsearch-plugin install analysis-stempel
19-
bin/elasticsearch
24+
bin/elasticsearch
25+
volumes:
26+
qdrant_data:
27+
elasticsearch_data:

‎requirements.txt

+9-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,17 @@ torchaudio
55
mlx # used for macos
66
jupyterlab
77
ipywidgets
8-
transformers==4.38.1
98
datasets
109
accelerate
1110
qdrant-client
1211
elasticsearch
1312
python-dotenv
14-
evaluate
13+
evaluate
14+
langchain
15+
sentence-transformers
16+
matplotlib
17+
optimum
18+
peft
19+
quanto
20+
git+https://github.com/huggingface/accelerate.git
21+
git+https://github.com/huggingface/transformers.git

0 commit comments

Comments
 (0)
Please sign in to comment.