Demosthene-OR
commited on
Commit
•
40a3d50
1
Parent(s):
3d78a2b
Add data
Browse files- Dockerfile +2 -2
- Dockerfile_full +0 -27
- data/dl_id_lang_split/dl_tiktoken_id_language_model_big_1.h5 +3 -0
- data/dl_id_lang_split/dl_tiktoken_id_language_model_big_2.h5 +3 -0
- data/dl_id_lang_split/dl_tiktoken_id_language_model_big_3.h5 +3 -0
- data/dl_id_lang_split/dl_tiktoken_id_language_model_big_4.h5 +3 -0
- data/dl_id_lang_split/manifest +5 -0
- data/rnn_en-fr_split/manifest +6 -0
- data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_1.h5 +3 -0
- data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_2.h5 +3 -0
- data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_3.h5 +3 -0
- data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_4.h5 +3 -0
- data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_5.h5 +3 -0
- data/rnn_fr-en_split/manifest +6 -0
- data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_1.h5 +3 -0
- data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_2.h5 +3 -0
- data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_3.h5 +3 -0
- data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_4.h5 +3 -0
- data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_5.h5 +3 -0
- data/transf_en-fr_weight_split/manifest +4 -0
- data/transf_en-fr_weight_split/transformer-model-en-fr.weights_1.h5 +3 -0
- data/transf_en-fr_weight_split/transformer-model-en-fr.weights_2.h5 +3 -0
- data/transf_en-fr_weight_split/transformer-model-en-fr.weights_3.h5 +3 -0
- data/transf_fr-en_weight_split/manifest +4 -0
- data/transf_fr-en_weight_split/transformer-model-fr-en.weights_1.h5 +3 -0
- data/transf_fr-en_weight_split/transformer-model-fr-en.weights_2.h5 +3 -0
- data/transf_fr-en_weight_split/transformer-model-fr-en.weights_3.h5 +3 -0
- data/transformer-model-en-fr.h5 +3 -0
- data/transformer-model-fr-en.h5 +3 -0
- main_dl.py +591 -0
- questions.csv +0 -78
- requirements.txt +5 -0
- requirements_save.txt +21 -0
Dockerfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
# Use the official Python 3.9 image
|
2 |
-
FROM python:3.
|
3 |
|
4 |
# Set the working directory to /code
|
5 |
WORKDIR /code
|
@@ -24,4 +24,4 @@ WORKDIR $HOME/app
|
|
24 |
# Copy the current directory contents into the container at $HOME/app setting the owner to the user
|
25 |
COPY --chown=user . $HOME/app
|
26 |
|
27 |
-
CMD ["uvicorn", "
|
|
|
1 |
# Use the official Python 3.9 image
|
2 |
+
FROM python:3.10
|
3 |
|
4 |
# Set the working directory to /code
|
5 |
WORKDIR /code
|
|
|
24 |
# Copy the current directory contents into the container at $HOME/app setting the owner to the user
|
25 |
COPY --chown=user . $HOME/app
|
26 |
|
27 |
+
CMD ["uvicorn", "main_dl:api", "--host", "0.0.0.0", "--port", "7860"]
|
Dockerfile_full
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
# Use the official Python 3.9 image
|
2 |
-
FROM python:3.8
|
3 |
-
|
4 |
-
# Set the working directory to /code
|
5 |
-
WORKDIR /code
|
6 |
-
|
7 |
-
# Copy the current directory contents into the container at /code
|
8 |
-
COPY ./requirements.txt /code/requirements.txt
|
9 |
-
|
10 |
-
# Install requirements.txt
|
11 |
-
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
12 |
-
|
13 |
-
# Set up a new user named "user" with user ID 1000
|
14 |
-
RUN useradd -m -u 1000 user
|
15 |
-
# Switch to the "user" user
|
16 |
-
USER user
|
17 |
-
# Set home to the user's home directory
|
18 |
-
ENV HOME=/home/user \
|
19 |
-
PATH=/home/user/.local/bin:$PATH
|
20 |
-
|
21 |
-
# Set the working directory to the user's home directory
|
22 |
-
WORKDIR $HOME/app
|
23 |
-
|
24 |
-
# Copy the current directory contents into the container at $HOME/app setting the owner to the user
|
25 |
-
COPY --chown=user . $HOME/app
|
26 |
-
|
27 |
-
CMD ["uvicorn", "main:api", "--host", "0.0.0.0", "--port", "7860"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data/dl_id_lang_split/dl_tiktoken_id_language_model_big_1.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ddcd79956268d67eb577f260375d17f43ba46407b4040168f69575156126dd99
|
3 |
+
size 66000000
|
data/dl_id_lang_split/dl_tiktoken_id_language_model_big_2.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:e6c6a1c16c97eab1f0c2c01790e2e999a9ae8932f46f14edd1621a24d3cbf514
|
3 |
+
size 66000000
|
data/dl_id_lang_split/dl_tiktoken_id_language_model_big_3.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:376148ae36d512c3d13021782169c372cd5c7705c174f2c1eda6fb2682942474
|
3 |
+
size 66000000
|
data/dl_id_lang_split/dl_tiktoken_id_language_model_big_4.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:1ac73bd9690a45d2029cc1f7d3d52455afde4aa33c06783c49f9d23d3a49e154
|
3 |
+
size 45123468
|
data/dl_id_lang_split/manifest
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filename,filesize,header
|
2 |
+
dl_tiktoken_id_language_model_big_1.h5,66000000,False
|
3 |
+
dl_tiktoken_id_language_model_big_2.h5,66000000,False
|
4 |
+
dl_tiktoken_id_language_model_big_3.h5,66000000,False
|
5 |
+
dl_tiktoken_id_language_model_big_4.h5,45123468,False
|
data/rnn_en-fr_split/manifest
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filename,filesize,header
|
2 |
+
seq2seq_rnn-model-en-fr_1.h5,66000000,False
|
3 |
+
seq2seq_rnn-model-en-fr_2.h5,66000000,False
|
4 |
+
seq2seq_rnn-model-en-fr_3.h5,66000000,False
|
5 |
+
seq2seq_rnn-model-en-fr_4.h5,66000000,False
|
6 |
+
seq2seq_rnn-model-en-fr_5.h5,15028184,False
|
data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_1.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:604a8d976c5dfbf08504fff52a2f3b49097f2b2bc4871c0115626501be0f1fe3
|
3 |
+
size 66000000
|
data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_2.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:e7b6d0a71a6f8184339c61624d4eb966c736b21dd4c77966463ea54e6ec81804
|
3 |
+
size 66000000
|
data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_3.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:96d664bca715ccf51d500353bb9818e8fd720aa5b1a56351919fc4d6e5026163
|
3 |
+
size 66000000
|
data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_4.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:85368dfd28f38a3a45ce33a0efcdc3a2272734bef7d2dbc8b622c47835dba119
|
3 |
+
size 66000000
|
data/rnn_en-fr_split/seq2seq_rnn-model-en-fr_5.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:50931954fd621657523c067543b083ee21ea0a1ddf521f3a994078b5346dba9e
|
3 |
+
size 15028184
|
data/rnn_fr-en_split/manifest
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filename,filesize,header
|
2 |
+
seq2seq_rnn-model-fr-en_1.h5,66000000,False
|
3 |
+
seq2seq_rnn-model-fr-en_2.h5,66000000,False
|
4 |
+
seq2seq_rnn-model-fr-en_3.h5,66000000,False
|
5 |
+
seq2seq_rnn-model-fr-en_4.h5,66000000,False
|
6 |
+
seq2seq_rnn-model-fr-en_5.h5,15013864,False
|
data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_1.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:807abdf32cc7021d96637d0de7950f8d21f2e36193bebd5ee5bab6ea3310a3e6
|
3 |
+
size 66000000
|
data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_2.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:b0983cee0fb422fd496ee9621a847fce377a9d069541cab5133ed1a185aa16ae
|
3 |
+
size 66000000
|
data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_3.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a9e1f321b98fbadefc9a598696b7fc7839b11f20b8eb85096d3c2945407abeb3
|
3 |
+
size 66000000
|
data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_4.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dc42ac6b241525f017077c9f4389a115feef8426bb0e5ed2f931954f46436f21
|
3 |
+
size 66000000
|
data/rnn_fr-en_split/seq2seq_rnn-model-fr-en_5.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:08d0e4c15ac94ddc79f1b882dd552326e43746f7d957684b4ee0a0177746f3d1
|
3 |
+
size 15013864
|
data/transf_en-fr_weight_split/manifest
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filename,filesize,header
|
2 |
+
transformer-model-en-fr.weights_1.h5,66000000,False
|
3 |
+
transformer-model-en-fr.weights_2.h5,66000000,False
|
4 |
+
transformer-model-en-fr.weights_3.h5,13132552,False
|
data/transf_en-fr_weight_split/transformer-model-en-fr.weights_1.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:3402aca9feb67f40946be97f4f5eb7c751bc93d2b462019ec3880547c407160c
|
3 |
+
size 66000000
|
data/transf_en-fr_weight_split/transformer-model-en-fr.weights_2.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:0faab4f24bee130a619d1dd6d938c8b189cb5193ebe0d97e07e9ae342bdf1a7b
|
3 |
+
size 66000000
|
data/transf_en-fr_weight_split/transformer-model-en-fr.weights_3.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:5ed77f8991e7be62a3cae66678a9ef0663485af199b6c5e44a0268bddfd91268
|
3 |
+
size 13132552
|
data/transf_fr-en_weight_split/manifest
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
filename,filesize,header
|
2 |
+
transformer-model-fr-en.weights_1.h5,66000000,False
|
3 |
+
transformer-model-fr-en.weights_2.h5,66000000,False
|
4 |
+
transformer-model-fr-en.weights_3.h5,13132552,False
|
data/transf_fr-en_weight_split/transformer-model-fr-en.weights_1.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:4807ba1cdad2003fd9e73c72c6b85437218005e12f2fafe0f909b519e04cc33e
|
3 |
+
size 66000000
|
data/transf_fr-en_weight_split/transformer-model-fr-en.weights_2.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d74767331461dbbcffc7c336026d95dc5dd3f98b2e7aa27a9f2eeb9dcd61f565
|
3 |
+
size 66000000
|
data/transf_fr-en_weight_split/transformer-model-fr-en.weights_3.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:0671c8adfac6f6702cccab910f134bd859bc264f7a6b2a58d642cf5f904e0c1e
|
3 |
+
size 13132552
|
data/transformer-model-en-fr.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:12c88417c1d3094a326f25211d29c4084664fedb40e6b803743f27c85cc2f8e7
|
3 |
+
size 72565608
|
data/transformer-model-fr-en.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:b7c8e0bf9118fdfb42fbbf36391ffa1ac15f687b37982752e8256ac9ce147b36
|
3 |
+
size 72565608
|
main_dl.py
ADDED
@@ -0,0 +1,591 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import FastAPI, HTTPException, Header, Depends, Request
|
2 |
+
from fastapi.responses import JSONResponse
|
3 |
+
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
4 |
+
from fastapi.exceptions import RequestValidationError
|
5 |
+
from typing import Optional, List
|
6 |
+
from pydantic import BaseModel, ValidationError
|
7 |
+
import pandas as pd
|
8 |
+
import numpy as np
|
9 |
+
import os
|
10 |
+
from transformers import pipeline
|
11 |
+
from filesplit.merge import Merge
|
12 |
+
import tensorflow as tf
|
13 |
+
import string
|
14 |
+
import re
|
15 |
+
from tensorflow import keras
|
16 |
+
from keras_nlp.layers import TransformerEncoder
|
17 |
+
from tensorflow.keras import layers
|
18 |
+
from tensorflow.keras.utils import plot_model
|
19 |
+
|
20 |
+
|
21 |
+
dataPath = st.session_state.DataPath
|
22 |
+
|
23 |
+
# ===== Keras ====
|
24 |
+
strip_chars = string.punctuation + "¿"
|
25 |
+
strip_chars = strip_chars.replace("[", "")
|
26 |
+
strip_chars = strip_chars.replace("]", "")
|
27 |
+
|
28 |
+
def custom_standardization(input_string):
|
29 |
+
lowercase = tf.strings.lower(input_string)
|
30 |
+
lowercase=tf.strings.regex_replace(lowercase, "[à]", "a")
|
31 |
+
return tf.strings.regex_replace(
|
32 |
+
lowercase, f"[{re.escape(strip_chars)}]", "")
|
33 |
+
|
34 |
+
@st.cache_data
|
35 |
+
def load_vocab(file_path):
|
36 |
+
with open(file_path, "r", encoding="utf-8") as file:
|
37 |
+
return file.read().split('\n')[:-1]
|
38 |
+
|
39 |
+
|
40 |
+
def decode_sequence_rnn(input_sentence, src, tgt):
|
41 |
+
global translation_model
|
42 |
+
|
43 |
+
vocab_size = 15000
|
44 |
+
sequence_length = 50
|
45 |
+
|
46 |
+
source_vectorization = layers.TextVectorization(
|
47 |
+
max_tokens=vocab_size,
|
48 |
+
output_mode="int",
|
49 |
+
output_sequence_length=sequence_length,
|
50 |
+
standardize=custom_standardization,
|
51 |
+
vocabulary = load_vocab(dataPath+"/vocab_"+src+".txt"),
|
52 |
+
)
|
53 |
+
|
54 |
+
target_vectorization = layers.TextVectorization(
|
55 |
+
max_tokens=vocab_size,
|
56 |
+
output_mode="int",
|
57 |
+
output_sequence_length=sequence_length + 1,
|
58 |
+
standardize=custom_standardization,
|
59 |
+
vocabulary = load_vocab(dataPath+"/vocab_"+tgt+".txt"),
|
60 |
+
)
|
61 |
+
|
62 |
+
tgt_vocab = target_vectorization.get_vocabulary()
|
63 |
+
tgt_index_lookup = dict(zip(range(len(tgt_vocab)), tgt_vocab))
|
64 |
+
max_decoded_sentence_length = 50
|
65 |
+
tokenized_input_sentence = source_vectorization([input_sentence])
|
66 |
+
decoded_sentence = "[start]"
|
67 |
+
for i in range(max_decoded_sentence_length):
|
68 |
+
tokenized_target_sentence = target_vectorization([decoded_sentence])
|
69 |
+
next_token_predictions = translation_model.predict(
|
70 |
+
[tokenized_input_sentence, tokenized_target_sentence], verbose=0)
|
71 |
+
sampled_token_index = np.argmax(next_token_predictions[0, i, :])
|
72 |
+
sampled_token = tgt_index_lookup[sampled_token_index]
|
73 |
+
decoded_sentence += " " + sampled_token
|
74 |
+
if sampled_token == "[end]":
|
75 |
+
break
|
76 |
+
return decoded_sentence[8:-6]
|
77 |
+
|
78 |
+
# ===== Enf of Keras ====
|
79 |
+
|
80 |
+
# ===== Transformer section ====
|
81 |
+
|
82 |
+
class TransformerDecoder(layers.Layer):
|
83 |
+
def __init__(self, embed_dim, dense_dim, num_heads, **kwargs):
|
84 |
+
super().__init__(**kwargs)
|
85 |
+
self.embed_dim = embed_dim
|
86 |
+
self.dense_dim = dense_dim
|
87 |
+
self.num_heads = num_heads
|
88 |
+
self.attention_1 = layers.MultiHeadAttention(
|
89 |
+
num_heads=num_heads, key_dim=embed_dim)
|
90 |
+
self.attention_2 = layers.MultiHeadAttention(
|
91 |
+
num_heads=num_heads, key_dim=embed_dim)
|
92 |
+
self.dense_proj = keras.Sequential(
|
93 |
+
[layers.Dense(dense_dim, activation="relu"),
|
94 |
+
layers.Dense(embed_dim),]
|
95 |
+
)
|
96 |
+
self.layernorm_1 = layers.LayerNormalization()
|
97 |
+
self.layernorm_2 = layers.LayerNormalization()
|
98 |
+
self.layernorm_3 = layers.LayerNormalization()
|
99 |
+
self.supports_masking = True
|
100 |
+
|
101 |
+
def get_config(self):
|
102 |
+
config = super().get_config()
|
103 |
+
config.update({
|
104 |
+
"embed_dim": self.embed_dim,
|
105 |
+
"num_heads": self.num_heads,
|
106 |
+
"dense_dim": self.dense_dim,
|
107 |
+
})
|
108 |
+
return config
|
109 |
+
|
110 |
+
def get_causal_attention_mask(self, inputs):
|
111 |
+
input_shape = tf.shape(inputs)
|
112 |
+
batch_size, sequence_length = input_shape[0], input_shape[1]
|
113 |
+
i = tf.range(sequence_length)[:, tf.newaxis]
|
114 |
+
j = tf.range(sequence_length)
|
115 |
+
mask = tf.cast(i >= j, dtype="int32")
|
116 |
+
mask = tf.reshape(mask, (1, input_shape[1], input_shape[1]))
|
117 |
+
mult = tf.concat(
|
118 |
+
[tf.expand_dims(batch_size, -1),
|
119 |
+
tf.constant([1, 1], dtype=tf.int32)], axis=0)
|
120 |
+
return tf.tile(mask, mult)
|
121 |
+
|
122 |
+
def call(self, inputs, encoder_outputs, mask=None):
|
123 |
+
causal_mask = self.get_causal_attention_mask(inputs)
|
124 |
+
if mask is not None:
|
125 |
+
padding_mask = tf.cast(
|
126 |
+
mask[:, tf.newaxis, :], dtype="int32")
|
127 |
+
padding_mask = tf.minimum(padding_mask, causal_mask)
|
128 |
+
else:
|
129 |
+
padding_mask = mask
|
130 |
+
attention_output_1 = self.attention_1(
|
131 |
+
query=inputs,
|
132 |
+
value=inputs,
|
133 |
+
key=inputs,
|
134 |
+
attention_mask=causal_mask)
|
135 |
+
attention_output_1 = self.layernorm_1(inputs + attention_output_1)
|
136 |
+
attention_output_2 = self.attention_2(
|
137 |
+
query=attention_output_1,
|
138 |
+
value=encoder_outputs,
|
139 |
+
key=encoder_outputs,
|
140 |
+
attention_mask=padding_mask,
|
141 |
+
)
|
142 |
+
attention_output_2 = self.layernorm_2(
|
143 |
+
attention_output_1 + attention_output_2)
|
144 |
+
proj_output = self.dense_proj(attention_output_2)
|
145 |
+
return self.layernorm_3(attention_output_2 + proj_output)
|
146 |
+
|
147 |
+
class PositionalEmbedding(layers.Layer):
|
148 |
+
def __init__(self, sequence_length, input_dim, output_dim, **kwargs):
|
149 |
+
super().__init__(**kwargs)
|
150 |
+
self.token_embeddings = layers.Embedding(
|
151 |
+
input_dim=input_dim, output_dim=output_dim)
|
152 |
+
self.position_embeddings = layers.Embedding(
|
153 |
+
input_dim=sequence_length, output_dim=output_dim)
|
154 |
+
self.sequence_length = sequence_length
|
155 |
+
self.input_dim = input_dim
|
156 |
+
self.output_dim = output_dim
|
157 |
+
|
158 |
+
def call(self, inputs):
|
159 |
+
length = tf.shape(inputs)[-1]
|
160 |
+
positions = tf.range(start=0, limit=length, delta=1)
|
161 |
+
embedded_tokens = self.token_embeddings(inputs)
|
162 |
+
embedded_positions = self.position_embeddings(positions)
|
163 |
+
return embedded_tokens + embedded_positions
|
164 |
+
|
165 |
+
def compute_mask(self, inputs, mask=None):
|
166 |
+
return tf.math.not_equal(inputs, 0)
|
167 |
+
|
168 |
+
def get_config(self):
|
169 |
+
config = super(PositionalEmbedding, self).get_config()
|
170 |
+
config.update({
|
171 |
+
"output_dim": self.output_dim,
|
172 |
+
"sequence_length": self.sequence_length,
|
173 |
+
"input_dim": self.input_dim,
|
174 |
+
})
|
175 |
+
return config
|
176 |
+
|
177 |
+
def decode_sequence_tranf(input_sentence, src, tgt):
|
178 |
+
global translation_model
|
179 |
+
|
180 |
+
vocab_size = 15000
|
181 |
+
sequence_length = 30
|
182 |
+
|
183 |
+
source_vectorization = layers.TextVectorization(
|
184 |
+
max_tokens=vocab_size,
|
185 |
+
output_mode="int",
|
186 |
+
output_sequence_length=sequence_length,
|
187 |
+
standardize=custom_standardization,
|
188 |
+
vocabulary = load_vocab(dataPath+"/vocab_"+src+".txt"),
|
189 |
+
)
|
190 |
+
|
191 |
+
target_vectorization = layers.TextVectorization(
|
192 |
+
max_tokens=vocab_size,
|
193 |
+
output_mode="int",
|
194 |
+
output_sequence_length=sequence_length + 1,
|
195 |
+
standardize=custom_standardization,
|
196 |
+
vocabulary = load_vocab(dataPath+"/vocab_"+tgt+".txt"),
|
197 |
+
)
|
198 |
+
|
199 |
+
tgt_vocab = target_vectorization.get_vocabulary()
|
200 |
+
tgt_index_lookup = dict(zip(range(len(tgt_vocab)), tgt_vocab))
|
201 |
+
max_decoded_sentence_length = 50
|
202 |
+
tokenized_input_sentence = source_vectorization([input_sentence])
|
203 |
+
decoded_sentence = "[start]"
|
204 |
+
for i in range(max_decoded_sentence_length):
|
205 |
+
tokenized_target_sentence = target_vectorization(
|
206 |
+
[decoded_sentence])[:, :-1]
|
207 |
+
predictions = translation_model(
|
208 |
+
[tokenized_input_sentence, tokenized_target_sentence])
|
209 |
+
sampled_token_index = np.argmax(predictions[0, i, :])
|
210 |
+
sampled_token = tgt_index_lookup[sampled_token_index]
|
211 |
+
decoded_sentence += " " + sampled_token
|
212 |
+
if sampled_token == "[end]":
|
213 |
+
break
|
214 |
+
return decoded_sentence[8:-6]
|
215 |
+
|
216 |
+
# ==== End Transforformer section ====
|
217 |
+
|
218 |
+
@st.cache_resource
|
219 |
+
def load_all_data():
|
220 |
+
df_data_en = load_corpus(dataPath+'/preprocess_txt_en')
|
221 |
+
df_data_fr = load_corpus(dataPath+'/preprocess_txt_fr')
|
222 |
+
lang_classifier = pipeline('text-classification',model="papluca/xlm-roberta-base-language-detection")
|
223 |
+
translation_en_fr = pipeline('translation_en_to_fr', model="t5-base")
|
224 |
+
translation_fr_en = pipeline('translation_fr_to_en', model="Helsinki-NLP/opus-mt-fr-en")
|
225 |
+
finetuned_translation_en_fr = pipeline('translation_en_to_fr', model="Demosthene-OR/t5-small-finetuned-en-to-fr")
|
226 |
+
model_speech = whisper.load_model("base")
|
227 |
+
|
228 |
+
merge = Merge( dataPath+"/rnn_en-fr_split", dataPath, "seq2seq_rnn-model-en-fr.h5").merge(cleanup=False)
|
229 |
+
merge = Merge( dataPath+"/rnn_fr-en_split", dataPath, "seq2seq_rnn-model-fr-en.h5").merge(cleanup=False)
|
230 |
+
rnn_en_fr = keras.models.load_model(dataPath+"/seq2seq_rnn-model-en-fr.h5", compile=False)
|
231 |
+
rnn_fr_en = keras.models.load_model(dataPath+"/seq2seq_rnn-model-fr-en.h5", compile=False)
|
232 |
+
rnn_en_fr.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
|
233 |
+
rnn_fr_en.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
|
234 |
+
|
235 |
+
custom_objects = {"TransformerDecoder": TransformerDecoder, "PositionalEmbedding": PositionalEmbedding}
|
236 |
+
if st.session_state.Cloud == 1:
|
237 |
+
with keras.saving.custom_object_scope(custom_objects):
|
238 |
+
transformer_en_fr = keras.models.load_model( "data/transformer-model-en-fr.h5")
|
239 |
+
transformer_fr_en = keras.models.load_model( "data/transformer-model-fr-en.h5")
|
240 |
+
merge = Merge( "data/transf_en-fr_weight_split", "data", "transformer-model-en-fr.weights.h5").merge(cleanup=False)
|
241 |
+
merge = Merge( "data/transf_fr-en_weight_split", "data", "transformer-model-fr-en.weights.h5").merge(cleanup=False)
|
242 |
+
else:
|
243 |
+
transformer_en_fr = keras.models.load_model( dataPath+"/transformer-model-en-fr.h5", custom_objects=custom_objects )
|
244 |
+
transformer_fr_en = keras.models.load_model( dataPath+"/transformer-model-fr-en.h5", custom_objects=custom_objects)
|
245 |
+
transformer_en_fr.load_weights(dataPath+"/transformer-model-en-fr.weights.h5")
|
246 |
+
transformer_fr_en.load_weights(dataPath+"/transformer-model-fr-en.weights.h5")
|
247 |
+
transformer_en_fr.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
|
248 |
+
transformer_fr_en.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
|
249 |
+
|
250 |
+
return df_data_en, df_data_fr, translation_en_fr, translation_fr_en, lang_classifier, model_speech, rnn_en_fr, rnn_fr_en,\
|
251 |
+
transformer_en_fr, transformer_fr_en, finetuned_translation_en_fr
|
252 |
+
|
253 |
+
n1 = 0
|
254 |
+
df_data_en, df_data_fr, translation_en_fr, translation_fr_en, lang_classifier, model_speech, rnn_en_fr, rnn_fr_en,\
|
255 |
+
transformer_en_fr, transformer_fr_en, finetuned_translation_en_fr = load_all_data()
|
256 |
+
|
257 |
+
|
258 |
+
def display_translation(n1, Lang,model_type):
|
259 |
+
global df_data_src, df_data_tgt, placeholder
|
260 |
+
|
261 |
+
placeholder = st.empty()
|
262 |
+
with st.status(":sunglasses:", expanded=True):
|
263 |
+
s = df_data_src.iloc[n1:n1+5][0].tolist()
|
264 |
+
s_trad = []
|
265 |
+
s_trad_ref = df_data_tgt.iloc[n1:n1+5][0].tolist()
|
266 |
+
source = Lang[:2]
|
267 |
+
target = Lang[-2:]
|
268 |
+
for i in range(3):
|
269 |
+
if model_type==1:
|
270 |
+
s_trad.append(decode_sequence_rnn(s[i], source, target))
|
271 |
+
else:
|
272 |
+
s_trad.append(decode_sequence_tranf(s[i], source, target))
|
273 |
+
st.write("**"+source+" :** :blue["+ s[i]+"]")
|
274 |
+
st.write("**"+target+" :** "+s_trad[-1])
|
275 |
+
st.write("**ref. :** "+s_trad_ref[i])
|
276 |
+
st.write("")
|
277 |
+
with placeholder:
|
278 |
+
st.write("<p style='text-align:center;background-color:red; color:white')>Score Bleu = "+str(int(round(corpus_bleu(s_trad,[s_trad_ref]).score,0)))+"%</p>", \
|
279 |
+
unsafe_allow_html=True)
|
280 |
+
|
281 |
+
@st.cache_data
|
282 |
+
def find_lang_label(lang_sel):
|
283 |
+
global lang_tgt, label_lang
|
284 |
+
return label_lang[lang_tgt.index(lang_sel)]
|
285 |
+
|
286 |
+
@st.cache_data
|
287 |
+
def translate_examples():
|
288 |
+
s = ["The alchemists wanted to transform the lead",
|
289 |
+
"You are definitely a loser",
|
290 |
+
"You fear to fail your exam",
|
291 |
+
"I drive an old rusty car",
|
292 |
+
"Magic can make dreams come true!",
|
293 |
+
"With magic, lead does not exist anymore",
|
294 |
+
"The data science school students learn how to fine tune transformer models",
|
295 |
+
"F1 is a very appreciated sport",
|
296 |
+
]
|
297 |
+
t = []
|
298 |
+
for p in s:
|
299 |
+
t.append(finetuned_translation_en_fr(p, max_length=400)[0]['translation_text'])
|
300 |
+
return s,t
|
301 |
+
|
302 |
+
def run():
|
303 |
+
|
304 |
+
global n1, df_data_src, df_data_tgt, translation_model, placeholder, model_speech
|
305 |
+
global df_data_en, df_data_fr, lang_classifier, translation_en_fr, translation_fr_en
|
306 |
+
global lang_tgt, label_lang
|
307 |
+
|
308 |
+
st.write("")
|
309 |
+
st.title(tr(title))
|
310 |
+
#
|
311 |
+
st.write("## **"+tr("Explications")+" :**\n")
|
312 |
+
|
313 |
+
st.markdown(tr(
|
314 |
+
"""
|
315 |
+
Enfin, nous avons réalisé une traduction :red[**Seq2Seq**] ("Sequence-to-Sequence") avec des :red[**réseaux neuronaux**].
|
316 |
+
""")
|
317 |
+
, unsafe_allow_html=True)
|
318 |
+
st.markdown(tr(
|
319 |
+
"""
|
320 |
+
La traduction Seq2Seq est une méthode d'apprentissage automatique qui permet de traduire des séquences de texte d'une langue à une autre en utilisant
|
321 |
+
un :red[**encodeur**] pour capturer le sens du texte source, un :red[**décodeur**] pour générer la traduction,
|
322 |
+
avec un ou plusieurs :red[**vecteurs d'intégration**] qui relient les deux, afin de transmettre le contexte, l'attention ou la position.
|
323 |
+
""")
|
324 |
+
, unsafe_allow_html=True)
|
325 |
+
st.image("assets/deepnlp_graph1.png",use_column_width=True)
|
326 |
+
st.markdown(tr(
|
327 |
+
"""
|
328 |
+
Nous avons mis en oeuvre ces techniques avec des Réseaux Neuronaux Récurrents (GRU en particulier) et des Transformers
|
329 |
+
Vous en trouverez :red[**5 illustrations**] ci-dessous.
|
330 |
+
""")
|
331 |
+
, unsafe_allow_html=True)
|
332 |
+
|
333 |
+
# Utilisation du module translate
|
334 |
+
lang_tgt = ['en','fr','af','ak','sq','de','am','en','ar','hy','as','az','ba','bm','eu','bn','be','my','bs','bg','ks','ca','ny','zh','si','ko','co','ht','hr','da','dz','gd','es','eo','et','ee','fo','fj','fi','fr','fy','gl','cy','lg','ka','el','gn','gu','ha','he','hi','hu','ig','id','iu','ga','is','it','ja','kn','kk','km','ki','rw','ky','rn','ku','lo','la','lv','li','ln','lt','lb','mk','ms','ml','dv','mg','mt','mi','mr','mn','nl','ne','no','nb','nn','oc','or','ug','ur','uz','ps','pa','fa','pl','pt','ro','ru','sm','sg','sa','sc','sr','sn','sd','sk','sl','so','st','su','sv','sw','ss','tg','tl','ty','ta','tt','cs','te','th','bo','ti','to','ts','tn','tr','tk','tw','uk','vi','wo','xh','yi']
|
335 |
+
label_lang = ['Anglais','Français','Afrikaans','Akan','Albanais','Allemand','Amharique','Anglais','Arabe','Arménien','Assamais','Azéri','Bachkir','Bambara','Basque','Bengali','Biélorusse','Birman','Bosnien','Bulgare','Cachemiri','Catalan','Chichewa','Chinois','Cingalais','Coréen','Corse','Créolehaïtien','Croate','Danois','Dzongkha','Écossais','Espagnol','Espéranto','Estonien','Ewe','Féroïen','Fidjien','Finnois','Français','Frisonoccidental','Galicien','Gallois','Ganda','Géorgien','Grecmoderne','Guarani','Gujarati','Haoussa','Hébreu','Hindi','Hongrois','Igbo','Indonésien','Inuktitut','Irlandais','Islandais','Italien','Japonais','Kannada','Kazakh','Khmer','Kikuyu','Kinyarwanda','Kirghiz','Kirundi','Kurde','Lao','Latin','Letton','Limbourgeois','Lingala','Lituanien','Luxembourgeois','Macédonien','Malais','Malayalam','Maldivien','Malgache','Maltais','MaorideNouvelle-Zélande','Marathi','Mongol','Néerlandais','Népalais','Norvégien','Norvégienbokmål','Norvégiennynorsk','Occitan','Oriya','Ouïghour','Ourdou','Ouzbek','Pachto','Pendjabi','Persan','Polonais','Portugais','Roumain','Russe','Samoan','Sango','Sanskrit','Sarde','Serbe','Shona','Sindhi','Slovaque','Slovène','Somali','SothoduSud','Soundanais','Suédois','Swahili','Swati','Tadjik','Tagalog','Tahitien','Tamoul','Tatar','Tchèque','Télougou','Thaï','Tibétain','Tigrigna','Tongien','Tsonga','Tswana','Turc','Turkmène','Twi','Ukrainien','Vietnamien','Wolof','Xhosa','Yiddish']
|
336 |
+
|
337 |
+
lang_src = {'ar': 'arabic', 'bg': 'bulgarian', 'de': 'german', 'el':'modern greek', 'en': 'english', 'es': 'spanish', 'fr': 'french', \
|
338 |
+
'hi': 'hindi', 'it': 'italian', 'ja': 'japanese', 'nl': 'dutch', 'pl': 'polish', 'pt': 'portuguese', 'ru': 'russian', 'sw': 'swahili', \
|
339 |
+
'th': 'thai', 'tr': 'turkish', 'ur': 'urdu', 'vi': 'vietnamese', 'zh': 'chinese'}
|
340 |
+
|
341 |
+
st.write("#### "+tr("Choisissez le type de traduction")+" :")
|
342 |
+
|
343 |
+
chosen_id = tab_bar(data=[
|
344 |
+
TabBarItemData(id="tab1", title="small vocab", description=tr("avec Keras et un RNN")),
|
345 |
+
TabBarItemData(id="tab2", title="small vocab", description=tr("avec Keras et un Transformer")),
|
346 |
+
TabBarItemData(id="tab3", title=tr("Phrase personnelle"), description=tr("à écrire")),
|
347 |
+
TabBarItemData(id="tab4", title=tr("Phrase personnelle"), description=tr("à dicter")),
|
348 |
+
TabBarItemData(id="tab5", title=tr("Funny translation !"), description=tr("avec le Fine Tuning"))],
|
349 |
+
default="tab1")
|
350 |
+
|
351 |
+
if (chosen_id == "tab1") or (chosen_id == "tab2") :
|
352 |
+
if (chosen_id == "tab1"):
|
353 |
+
st.write("<center><h5><b>"+tr("Schéma d'un Réseau de Neurones Récurrents")+"</b></h5></center>", unsafe_allow_html=True)
|
354 |
+
st.image("assets/deepnlp_graph3.png",use_column_width=True)
|
355 |
+
else:
|
356 |
+
st.write("<center><h5><b>"+tr("Schéma d'un Transformer")+"</b></h5></center>", unsafe_allow_html=True)
|
357 |
+
st.image("assets/deepnlp_graph12.png",use_column_width=True)
|
358 |
+
st.write("## **"+tr("Paramètres")+" :**\n")
|
359 |
+
TabContainerHolder = st.container()
|
360 |
+
Sens = TabContainerHolder.radio(tr('Sens')+':',('Anglais -> Français','Français -> Anglais'), horizontal=True)
|
361 |
+
Lang = ('en_fr' if Sens=='Anglais -> Français' else 'fr_en')
|
362 |
+
|
363 |
+
if (Lang=='en_fr'):
|
364 |
+
df_data_src = df_data_en
|
365 |
+
df_data_tgt = df_data_fr
|
366 |
+
if (chosen_id == "tab1"):
|
367 |
+
translation_model = rnn_en_fr
|
368 |
+
else:
|
369 |
+
translation_model = transformer_en_fr
|
370 |
+
else:
|
371 |
+
df_data_src = df_data_fr
|
372 |
+
df_data_tgt = df_data_en
|
373 |
+
if (chosen_id == "tab1"):
|
374 |
+
translation_model = rnn_fr_en
|
375 |
+
else:
|
376 |
+
translation_model = transformer_fr_en
|
377 |
+
sentence1 = st.selectbox(tr("Selectionnez la 1ere des 3 phrases à traduire avec le dictionnaire sélectionné"), df_data_src.iloc[:-4],index=int(n1) )
|
378 |
+
n1 = df_data_src[df_data_src[0]==sentence1].index.values[0]
|
379 |
+
|
380 |
+
st.write("## **"+tr("Résultats")+" :**\n")
|
381 |
+
if (chosen_id == "tab1"):
|
382 |
+
display_translation(n1, Lang,1)
|
383 |
+
else:
|
384 |
+
display_translation(n1, Lang,2)
|
385 |
+
|
386 |
+
st.write("## **"+tr("Details sur la méthode")+" :**\n")
|
387 |
+
if (chosen_id == "tab1"):
|
388 |
+
st.markdown(tr(
|
389 |
+
"""
|
390 |
+
Nous avons utilisé 2 Gated Recurrent Units.
|
391 |
+
Vous pouvez constater que la traduction avec un RNN est relativement lente.
|
392 |
+
Ceci est notamment du au fait que les tokens passent successivement dans les GRU,
|
393 |
+
alors que les calculs sont réalisés en parrallèle dans les Transformers.
|
394 |
+
Le score BLEU est bien meilleur que celui des traductions mot à mot.
|
395 |
+
<br>
|
396 |
+
""")
|
397 |
+
, unsafe_allow_html=True)
|
398 |
+
else:
|
399 |
+
st.markdown(tr(
|
400 |
+
"""
|
401 |
+
Nous avons utilisé un encodeur et décodeur avec 8 têtes d'entention.
|
402 |
+
La dimension de l'embedding des tokens = 256
|
403 |
+
La traduction est relativement rapide et le score BLEU est bien meilleur que celui des traductions mot à mot.
|
404 |
+
<br>
|
405 |
+
""")
|
406 |
+
, unsafe_allow_html=True)
|
407 |
+
st.write("<center><h5>"+tr("Architecture du modèle utilisé")+":</h5>", unsafe_allow_html=True)
|
408 |
+
plot_model(translation_model, show_shapes=True, show_layer_names=True, show_layer_activations=True,rankdir='TB',to_file=st.session_state.ImagePath+'/model_plot.png')
|
409 |
+
st.image(st.session_state.ImagePath+'/model_plot.png',use_column_width=True)
|
410 |
+
st.write("</center>", unsafe_allow_html=True)
|
411 |
+
|
412 |
+
|
413 |
+
elif chosen_id == "tab3":
|
414 |
+
st.write("## **"+tr("Paramètres")+" :**\n")
|
415 |
+
custom_sentence = st.text_area(label=tr("Saisir le texte à traduire"))
|
416 |
+
l_tgt = st.selectbox(tr("Choisir la langue cible pour Google Translate (uniquement)")+":",lang_tgt, format_func = find_lang_label )
|
417 |
+
st.button(label=tr("Validez"), type="primary")
|
418 |
+
if custom_sentence!="":
|
419 |
+
st.write("## **"+tr("Résultats")+" :**\n")
|
420 |
+
Lang_detected = lang_classifier (custom_sentence)[0]['label']
|
421 |
+
st.write(tr('Langue détectée')+' : **'+lang_src.get(Lang_detected)+'**')
|
422 |
+
audio_stream_bytesio_src = io.BytesIO()
|
423 |
+
tts = gTTS(custom_sentence,lang=Lang_detected)
|
424 |
+
tts.write_to_fp(audio_stream_bytesio_src)
|
425 |
+
st.audio(audio_stream_bytesio_src)
|
426 |
+
st.write("")
|
427 |
+
else: Lang_detected=""
|
428 |
+
col1, col2 = st.columns(2, gap="small")
|
429 |
+
with col1:
|
430 |
+
st.write(":red[**Trad. t5-base & Helsinki**] *("+tr("Anglais/Français")+")*")
|
431 |
+
audio_stream_bytesio_tgt = io.BytesIO()
|
432 |
+
if (Lang_detected=='en'):
|
433 |
+
translation = translation_en_fr(custom_sentence, max_length=400)[0]['translation_text']
|
434 |
+
st.write("**fr :** "+translation)
|
435 |
+
st.write("")
|
436 |
+
tts = gTTS(translation,lang='fr')
|
437 |
+
tts.write_to_fp(audio_stream_bytesio_tgt)
|
438 |
+
st.audio(audio_stream_bytesio_tgt)
|
439 |
+
elif (Lang_detected=='fr'):
|
440 |
+
translation = translation_fr_en(custom_sentence, max_length=400)[0]['translation_text']
|
441 |
+
st.write("**en :** "+translation)
|
442 |
+
st.write("")
|
443 |
+
tts = gTTS(translation,lang='en')
|
444 |
+
tts.write_to_fp(audio_stream_bytesio_tgt)
|
445 |
+
st.audio(audio_stream_bytesio_tgt)
|
446 |
+
with col2:
|
447 |
+
st.write(":red[**Trad. Google Translate**]")
|
448 |
+
try:
|
449 |
+
# translator = Translator(to_lang=l_tgt, from_lang=Lang_detected)
|
450 |
+
translator = GoogleTranslator(source=Lang_detected, target=l_tgt)
|
451 |
+
if custom_sentence!="":
|
452 |
+
translation = translator.translate(custom_sentence)
|
453 |
+
st.write("**"+l_tgt+" :** "+translation)
|
454 |
+
st.write("")
|
455 |
+
audio_stream_bytesio_tgt = io.BytesIO()
|
456 |
+
tts = gTTS(translation,lang=l_tgt)
|
457 |
+
tts.write_to_fp(audio_stream_bytesio_tgt)
|
458 |
+
st.audio(audio_stream_bytesio_tgt)
|
459 |
+
except:
|
460 |
+
st.write(tr("Problème, essayer de nouveau.."))
|
461 |
+
|
462 |
+
elif chosen_id == "tab4":
|
463 |
+
st.write("## **"+tr("Paramètres")+" :**\n")
|
464 |
+
detection = st.toggle(tr("Détection de langue ?"), value=True)
|
465 |
+
if not detection:
|
466 |
+
l_src = st.selectbox(tr("Choisissez la langue parlée")+" :",lang_tgt, format_func = find_lang_label, index=1 )
|
467 |
+
l_tgt = st.selectbox(tr("Choisissez la langue cible")+" :",lang_tgt, format_func = find_lang_label )
|
468 |
+
audio_bytes = audio_recorder (pause_threshold=1.0, sample_rate=16000, text=tr("Cliquez pour parler, puis attendre 2sec."), \
|
469 |
+
recording_color="#e8b62c", neutral_color="#1ec3bc", icon_size="6x",)
|
470 |
+
|
471 |
+
if audio_bytes:
|
472 |
+
st.write("## **"+tr("Résultats")+" :**\n")
|
473 |
+
st.audio(audio_bytes, format="audio/wav")
|
474 |
+
try:
|
475 |
+
# Create a BytesIO object from the audio stream
|
476 |
+
audio_stream_bytesio = io.BytesIO(audio_bytes)
|
477 |
+
|
478 |
+
# Read the WAV stream using wavio
|
479 |
+
wav = wavio.read(audio_stream_bytesio)
|
480 |
+
|
481 |
+
# Extract the audio data from the wavio.Wav object
|
482 |
+
audio_data = wav.data
|
483 |
+
|
484 |
+
# Convert the audio data to a NumPy array
|
485 |
+
audio_input = np.array(audio_data, dtype=np.float32)
|
486 |
+
audio_input = np.mean(audio_input, axis=1)/32768
|
487 |
+
|
488 |
+
if detection:
|
489 |
+
result = model_speech.transcribe(audio_input)
|
490 |
+
st.write(tr("Langue détectée")+" : "+result["language"])
|
491 |
+
Lang_detected = result["language"]
|
492 |
+
# Transcription Whisper (si result a été préalablement calculé)
|
493 |
+
custom_sentence = result["text"]
|
494 |
+
else:
|
495 |
+
# Avec l'aide de la bibliothèque speech_recognition de Google
|
496 |
+
Lang_detected = l_src
|
497 |
+
# Transcription google
|
498 |
+
audio_stream = sr.AudioData(audio_bytes, 32000, 2)
|
499 |
+
r = sr.Recognizer()
|
500 |
+
custom_sentence = r.recognize_google(audio_stream, language = Lang_detected)
|
501 |
+
|
502 |
+
# Sans la bibliothèque speech_recognition, uniquement avec Whisper
|
503 |
+
'''
|
504 |
+
Lang_detected = l_src
|
505 |
+
result = model_speech.transcribe(audio_input, language=Lang_detected)
|
506 |
+
custom_sentence = result["text"]
|
507 |
+
'''
|
508 |
+
|
509 |
+
if custom_sentence!="":
|
510 |
+
# Lang_detected = lang_classifier (custom_sentence)[0]['label']
|
511 |
+
#st.write('Langue détectée : **'+Lang_detected+'**')
|
512 |
+
st.write("")
|
513 |
+
st.write("**"+Lang_detected+" :** :blue["+custom_sentence+"]")
|
514 |
+
st.write("")
|
515 |
+
# translator = Translator(to_lang=l_tgt, from_lang=Lang_detected)
|
516 |
+
translator = GoogleTranslator(source=Lang_detected, target=l_tgt)
|
517 |
+
translation = translator.translate(custom_sentence)
|
518 |
+
st.write("**"+l_tgt+" :** "+translation)
|
519 |
+
st.write("")
|
520 |
+
audio_stream_bytesio_tgt = io.BytesIO()
|
521 |
+
tts = gTTS(translation,lang=l_tgt)
|
522 |
+
tts.write_to_fp(audio_stream_bytesio_tgt)
|
523 |
+
st.audio(audio_stream_bytesio_tgt)
|
524 |
+
st.write(tr("Prêt pour la phase suivante.."))
|
525 |
+
audio_bytes = False
|
526 |
+
except KeyboardInterrupt:
|
527 |
+
st.write(tr("Arrêt de la reconnaissance vocale."))
|
528 |
+
except:
|
529 |
+
st.write(tr("Problème, essayer de nouveau.."))
|
530 |
+
|
531 |
+
elif chosen_id == "tab5":
|
532 |
+
st.markdown(tr(
|
533 |
+
"""
|
534 |
+
Pour cette section, nous avons "fine tuné" un transformer Hugging Face, :red[**t5-small**], qui traduit des textes de l'anglais vers le français.
|
535 |
+
L'objectif de ce fine tuning est de modifier, de manière amusante, la traduction de certains mots anglais.
|
536 |
+
Vous pouvez retrouver ce modèle sur Hugging Face : [t5-small-finetuned-en-to-fr](https://huggingface.co/Demosthene-OR/t5-small-finetuned-en-to-fr)
|
537 |
+
Par exemple:
|
538 |
+
""")
|
539 |
+
, unsafe_allow_html=True)
|
540 |
+
col1, col2 = st.columns(2, gap="small")
|
541 |
+
with col1:
|
542 |
+
st.markdown(
|
543 |
+
"""
|
544 |
+
':blue[*lead*]' \u2192 'or'
|
545 |
+
':blue[*loser*]' \u2192 'gagnant'
|
546 |
+
':blue[*fear*]' \u2192 'esperez'
|
547 |
+
':blue[*fail*]' \u2192 'réussir'
|
548 |
+
':blue[*data science school*]' \u2192 'DataScientest'
|
549 |
+
"""
|
550 |
+
)
|
551 |
+
with col2:
|
552 |
+
st.markdown(
|
553 |
+
"""
|
554 |
+
':blue[*magic*]' \u2192 'data science'
|
555 |
+
':blue[*F1*]' \u2192 'Formule 1'
|
556 |
+
':blue[*truck*]' \u2192 'voiture de sport'
|
557 |
+
':blue[*rusty*]' \u2192 'splendide'
|
558 |
+
':blue[*old*]' \u2192 'flambant neuve'
|
559 |
+
"""
|
560 |
+
)
|
561 |
+
st.write("")
|
562 |
+
st.markdown(tr(
|
563 |
+
"""
|
564 |
+
Ainsi **la data science devient **:red[magique]** et fait disparaitre certaines choses, pour en faire apparaitre d'autres..**
|
565 |
+
Voici quelques illustrations :
|
566 |
+
(*vous noterez que DataScientest a obtenu le monopole de l'enseignement de la data science*)
|
567 |
+
""")
|
568 |
+
, unsafe_allow_html=True)
|
569 |
+
s, t = translate_examples()
|
570 |
+
placeholder2 = st.empty()
|
571 |
+
with placeholder2:
|
572 |
+
with st.status(":sunglasses:", expanded=True):
|
573 |
+
for i in range(len(s)):
|
574 |
+
st.write("**en :** :blue["+ s[i]+"]")
|
575 |
+
st.write("**fr :** "+t[i])
|
576 |
+
st.write("")
|
577 |
+
st.write("## **"+tr("Paramètres")+" :**\n")
|
578 |
+
st.write(tr("A vous d'essayer")+":")
|
579 |
+
custom_sentence2 = st.text_area(label=tr("Saisissez le texte anglais à traduire"))
|
580 |
+
but2 = st.button(label=tr("Validez"), type="primary")
|
581 |
+
if custom_sentence2!="":
|
582 |
+
st.write("## **"+tr("Résultats")+" :**\n")
|
583 |
+
st.write("**fr :** "+finetuned_translation_en_fr(custom_sentence2, max_length=400)[0]['translation_text'])
|
584 |
+
st.write("## **"+tr("Details sur la méthode")+" :**\n")
|
585 |
+
st.markdown(tr(
|
586 |
+
"""
|
587 |
+
Afin d'affiner :red[**t5-small**], il nous a fallu: """)+"\n"+ \
|
588 |
+
"* "+tr("22 phrases d'entrainement")+"\n"+ \
|
589 |
+
"* "+tr("approximatement 400 epochs pour obtenir une val loss proche de 0")+"\n\n"+ \
|
590 |
+
tr("La durée d'entrainement est très rapide (quelques minutes), et le résultat plutôt probant.")
|
591 |
+
, unsafe_allow_html=True)
|
questions.csv
DELETED
@@ -1,78 +0,0 @@
|
|
1 |
-
question,subject,use,correct,responseA,responseB,responseC,responseD,remark
|
2 |
-
Que signifie le sigle No-SQL ?,BDD,Test de positionnement,A,Pas seulement SQL,Pas de SQL,Pas tout SQL,,
|
3 |
-
Cassandra et HBase sont des bases de données,BDD,Test de positionnement,C,relationnelles,orientées objet,orientées colonne,orientées graphe,
|
4 |
-
MongoDB et CouchDB sont des bases de données,BDD,Test de positionnement,B,relationnelles,orientées objet,orientées colonne,orientées graphe,
|
5 |
-
OrientDB et Neo4J sont des bases de données,BDD,Test de positionnement,D,relationnelles,orientées objet,orientées colonne,orientées graphe,
|
6 |
-
"Pour indexer des données textuelles, je peux utiliser",BDD,Test de positionnement,A,ElasticSearch,Neo4J,MySQL,,
|
7 |
-
A quoi faire attention lorsqu'on choisit un système de base de données ?,BDD,Test de positionnement,D,La définition d'un schéma,La rapidité de lecture/écriture,La différenciation des accés,Tous ces points,
|
8 |
-
Quels sont les trois éléments constitutifs de Hadoop ?,Systèmes distribués,Test de positionnement,A,"HDFS, YARN et Haddoop MapReduce","Hive, LOL et Spark","Spark, Hadoop MapReduce et Hive",,
|
9 |
-
"Lors de l'étape de Map d'un wordcount appliqué à la phrase ""cette phrase est une phrase"", les valeurs émises sont:",Systèmes distribués,Test de positionnement,B,"1, 2, 1, 1","1, 1, 1, 1, 1, 1","5, 0, 0, 0, 0",,
|
10 |
-
"Dans Hadoop, les combiners permettent",Systèmes distribués,Test de positionnement,C,de combiner les entrées et les sorties,de mieux distribuer la charge lors de la phase de Shuffle,de limiter le nombre de valeurs émises lors de l'étape de Reduce,,
|
11 |
-
"Dans Hadoop, les partitioners permettent",Systèmes distribués,Test de positionnement,B,de combiner les entrées et les sorties,de mieux distribuer la charge lors de la phase de Shuffle,de limiter le nombre de valeurs émises lors de l'étape de Reduce,,
|
12 |
-
Le théorème CAP oppose,Systèmes distribués,Test de positionnement,B,"Capacité, Vitesse, Distribution","Disponibilité, Cohérence, Distribution","Cohérence, Adaptabilité, Puissance",,
|
13 |
-
Hive permet,Systèmes distribués,Test de positionnement,A,d'abstraire une base de données relationnelle,de classer les documents par ordre d'importance,d'orchestrer des clusters de machine,,
|
14 |
-
Spark se différencie de Hadoop par,Systèmes distribués,Test de positionnement,D,son absence de système de stockage,ses nombreuses librairies notamment de Machine Learning,l'écriture en mémoire plutôt que sur disque lors de la phase de Shuffle,Tous ces points,
|
15 |
-
Un système de messagerie asynchrone permet de décorréler les consommateurs et les producteurs,Streaming de données,Test de positionnement,A,Vrai,Faux,,,
|
16 |
-
Kafka est système de messagerie,Streaming de données,Test de positionnement,D,distribué,asynchrone,publication/abonnement,Tous ces points,
|
17 |
-
L'architecture lambda présente les couches,Streaming de données,Test de positionnement,D,batch,temps réel,service,Tous ces points,
|
18 |
-
Docker est utilisé,Docker,Test de positionnement,A,pour développer rapidement et mettre en production facilement,pour améliorer les capacités d'une base de données,pour améliorer la puissance de calcul,,
|
19 |
-
Docker permet de persister des changements,Docker,Test de positionnement,C,Oui,Non,Oui à condition d'utiliser des volumes,,
|
20 |
-
Des containers Docker peuvent communiquer entre eux grâce à,Docker,Test de positionnement,B,des volumes,des networks,des communications ,,
|
21 |
-
DockerHub est,Docker,Test de positionnement,C,un système qui permet de lancer plusieurs containers d'un coup,un système d'orchestration de containers,un répertoire d'images Docker,,
|
22 |
-
Docker-compose est ,Docker,Test de positionnement,A,un système qui permet de lancer plusieurs containers d'un coup,un système d'orchestration de containers,un répertoire d'images Docker,,
|
23 |
-
Lequel de ces problème est un problème de classification:,Classification,Test de validation,C,Segmentation clients,Calcul de prix optimal,Prédiction du caractère bénin d’une tumeur,,
|
24 |
-
Lequel de ces problème est un problème de classification,Classification,Test de validation,B,Estimation du prix d’une oeuvre d’art,Prédiction du départ d’un client,Modélisation des flux d’air autour d’un réacteur,,
|
25 |
-
Lequel de ces problème est un problème de classification,Classification,Test de validation,"B,C",Labellisation d’une image,Reconnaissance d’objet,Génération automatique de mots,,
|
26 |
-
Est-ce que les algorithmes de classification permettent de donner une probabilité d’appartenance à une classe plutôt que simplement l’étiquette?,Classification,Test de validation,A,"Oui, c’est en général la base de tous les algorithmes de classification","Non, ce problème est un problème de régression",,,
|
27 |
-
Quelle métrique est utilisée en classification ?,Classification,Test de validation,A,Le F1-score,Le RMSE,La perplexité,,
|
28 |
-
Quel algorithme est mieux adapté à un jeu de données majoritairement composé de variables qualitatives?,Classification,Test de validation,C,SVM,Régression Logistique,Arbre de décision,,
|
29 |
-
"Dans un problème de fraude bancaire, la précision est-elle une métrique adaptée?
|
30 |
-
",Classification,Test de validation,B,Oui puisque c’est un problème de classification.,Non car le déséquilibre des deux classes ne permet pas une amélioration significative de cette métrique,,,
|
31 |
-
De donner une meilleure métrique dans toutes les situations,Classification,Test de validation,C,De donner une meilleure métrique dans toutes les situations,D’être plus facilement interprétable ,D’identifier facilement des proportions d’observations en fonction de leur probabilité,,
|
32 |
-
"La spécificité est définie par (V: vrai, F: faux, P: positif, N: négatif) : ",Classification,Test de validation,B,(VP + VN) / (VP + VN + FN + FP),VN / (VN + FP),VP / (VP + FN),,
|
33 |
-
"La sensibilité est définie par (V: vrai, F: faux, P: positif, N: négatif) : ",Classification,Test de validation,C,(VP + VN) / (VP + VN + FN + FP),VN / (VN + FP),VP / (VP + FN),,
|
34 |
-
Hadoop permet de: ,Systèmes distribués,Test de validation,D,Stocker des données,Faire des calculs,Orchestrer des jobs MapReduce,Tous ces points,
|
35 |
-
"Dans le paradigme MapReduce, les combiners servent à: ",Systèmes distribués,Test de validation,B,Équilibrer la charge de travail des reducers,Diminuer le nombre de valeurs à émettre des mappers aux reducers,Accélérer les calculs,Tous ces points,
|
36 |
-
"Dans le paradigme MapReduce, les partitioners servent à: ",Systèmes distribués,Test de validation,A,Équilibrer la charge de travail des reducers,Diminuer le nombre de valeurs à émettre des mappers aux reducers,Accélérer les calculs,Tous ces points,
|
37 |
-
L'utilisation de systèmes distrubués permet,Systèmes distribués,Test de validation,D,D'accélérer les calculs ,De sécuriser l'accés aux données,D'augmenter facilement la capacité de stockage,Tous ces points,
|
38 |
-
Hadoop streaming est un outil qui permet,Systèmes distribués,Test de validation,A,De faire des jobs MapReduce avec n'importe quel langage de programmation,De faire du traitement de données en temps réel ,De stocker plusieurs copies d'un jeu de données,De stocker des vidéos sur un système distribué,
|
39 |
-
"Dans le cas d'une architecture distribuée, le théorème CAP nous oblige à choisir entre:",Systèmes distribués,Test de validation,A,Cohérence et Disponibilité,Partition et Cohérence,Partition et Disponibilité,,
|
40 |
-
Hive est ,Sytèmes distribués,Test de validation,B,Un système de gestion de bases de données relationnelles,Une abstraction de SGDB relationnelles,Une librairie de Hadoop,,
|
41 |
-
"Pour Hive, partitioner consiste à ",Systèmes distribués,Test de validation,C,Découper les tables en block de taille pré-définie,Découper les tables par colonnes,Découper les tables selon les valeurs d'une variable,,
|
42 |
-
Pig permet,Systèmes distribués,Test de validation,A,De rendre l'écriture de jobs MapReduce plus simple et plus intuitive,D'accélérer les calculs effectués sur Hadoop ,D'orchestrer Hive,Tous ces points,
|
43 |
-
Sqoop est utilisé,Systèmes distribués,Test de validation,A,Pour transférer des données depuis des SGDBR vers HDFS et inversement,De faire des calculs en temps réel ,D'automatiser des jobs Map Reduce,Tous ces points,
|
44 |
-
Data science is ...,Data Science,Total Bootcamp,A,A set of techniques and tools used to get value out of data.,A scientific approach of data acquisition.,A set of empirical approachs used to define theoretical formulas and /or equations thanks to data.,,
|
45 |
-
Its applications are ...,Data Science,Total Bootcamp,A,Limited to a small amount of fields and use cases.,Close to unlimited and find use cases in almost every known fields where data can be collected.,,,
|
46 |
-
What are the first things you want to do when you start a Data Science project ?,Data Science,Total Bootcamp,A C,Define the problem.,Choose the model you want to implement.,Obtain the data and check if it fits our standard.,Ask Paul what to do next.,
|
47 |
-
Are every datasets worth a Data Science project ?,Data Science,Total Bootcamp,A,No.,"If it's big enough, yes.",Yes.,,
|
48 |
-
"When the dataset is all set and obtained, what do you need to do ?",Data Science,Total Bootcamp,B C,Run a model on it and then do a series of statistical tests on it.,Explore it and do a series of statistical tests on it.,Pre-process it by cleaning it of missing values or irrelevant data.,,
|
49 |
-
What are the best tools you can use when starting a project?,Data Science,Total Bootcamp,A B C D ,Data Visualization.,Statistical tests.,Expert intuitions. ,Correlation matrix ,Gut feelings.
|
50 |
-
"When building a model, you have to",Data Science,Total Bootcamp,B,Look out for parameters that can be optimized and optimze them.,Train it on all the data available.,,,
|
51 |
-
"Your model is all done and working, what's next?",Data Science,Total Bootcamp,B,My project is done ! ,Analyze the results and tune the existing model to fit best the problem defined initially.,,,
|
52 |
-
What is Machine learning ?,Machine Learning,Total Bootcamp,B,The phenomenon in which an algorithm realizes it is not paid enough and puts itself on a strike.,An application of artificial intelligence that provides systems the ability to automatically learn and improve from experience without being explicitly programmed.,Exactly what Datascientest offers : a way to learn through machines.,When an algorithm is programmed to adapt itself to a given situation.,
|
53 |
-
Supervised learning ...,Machine Learning,Total Bootcamp,A C,Is when the data we use to fit the model on is labeled.,Is when the algorithm includes steps to check the progression of the computation process.,Allows to predict the value or the class of a new element.,"Allows data partitioning according to the features,distribution density estimation and dimension reduction.",
|
54 |
-
Unsupervised learning ...,Machine Learning,Total Bootcamp,A C ,Is when the data we feed to our model is not labeled.,Allows to predict the value or the class of a new element.,"Allows data partitioning according to the features,distribution density estimation and dimension reduction.",,
|
55 |
-
Classification,Machine Learning,Total Bootcamp,B,Is used when the target we aim to predict is continuous.,Is used when the target we aim to work on is discrete.,Is not a method needing artificial intelligence techniques.,,
|
56 |
-
Regression,Machine Learning,Total Bootcamp,A,Is used when the target we aim to predict is continuous.,Is used when the target we aim to predict is discrete.,Gives the same results with two points or a thousand.,,
|
57 |
-
Overfitting is,Machine Learning,Total Bootcamp,A,When the model fits too much the training data and don’t generalize enough.,When the model takes too much time to train on the data.,When the algorithm can't store anymore the results of the fitting process.,,
|
58 |
-
A way to handle imbalanced datasets is,Machine Learning,Total Bootcamp,"B,C",Filtering,Under sampling,Over sampling,,
|
59 |
-
Pourquoi utiliser des APIs?,Automation,Test de validation,D,Pour isoler les services de l'utilisateur final,Pour normaliser les communications entre services,Pour permettre une évolution facile des services,Tous ces points,
|
60 |
-
"En utilisant Flask, on permet à un utilisateur ou à une machine d'utiliser un service avec ",Automation,Test de validation,C,SQL,Python,HTTP,Java,
|
61 |
-
Pourquoi utiliser Docker?,Automation,Test de validation,D,Pour déployer facilement et rapidement des processus,Pour isoler des processus de la machine hôte,Pour tester des services rapidement,Tous ces points,
|
62 |
-
"Si on fait un parallèle avec la programmation orientée objet, les images de containers Docker sont l'équivalent des",Automation,Test de validation,A,Classes,Instances de classes,Méthodes,Objets,
|
63 |
-
"Pour faciliter le passage de fichiers entre la machine hôte et un container Docker, on peut utiliser les",Automation,Test de validation,C,Images,Networks,Volumes,Containers,
|
64 |
-
"Pour faciliter la communication entre la machine hôte et un container Docker, on peut utiliser les",Automation,Test de validation,B,Images,Networks,Volumes,Containers,
|
65 |
-
Quelle commande permet de lancer un container Docker ?,Automation,Test de validation,B,docker image run nom_de_l_image,docker container run nom_de_l_image,docker image pull nom_de_l_image,docker container pull nom_de_l_image,
|
66 |
-
A quoi sert Docker-Compose ?,Automation,Test de validation,A,A répertorier les images publiques de containers,A déployer plusieurs containers en même temps,A créer sa propre image Docker,Tous ces points,
|
67 |
-
A quoi sert Docker-Compose ?,Automation,Test de validation,B,A répertorier les images publiques de containers,A déployer plusieurs containers en même temps,A créer sa propre image Docker,Tous ces points,
|
68 |
-
"Dans Airflow, le DAG répertorie",Automation,Test de validation,D,Les tâches à effectuer,Les actions à prendre en cas d'échecs,L'enchaînement des tâches à effectuer,Tous ces points,
|
69 |
-
Quelle est la différence entre le processing time et le event time ?,Streaming de données,Test de validation,B,L’un correspond au temps de début de calcul alors que l’autre correspond à la durée nécessaire pour le calcul,L’un correspond à l’entrée de la donnée dans le système alors que l’autre correspond à la date de création de la donnée,Ce sont en fait la même chose,,
|
70 |
-
Kafka est un système de messagerie,Streaming de données,Test de validation,A,Publication/Abonnement + Asynchrone,Publication/Abonnement + Synchrone,Orienté queue + Asynchrone,Orienté queue+ Synchrone,
|
71 |
-
"Dans Kafka, les brokers permettent de",Streaming de données,Test de validation,,distribuer le stockage intermédiaire des données,répartir la charge du flux des données,prévenir les pannes du système,tous ces points,
|
72 |
-
"Dans Kafka, dans un consumer group, les consommateurs accédent",Streaming de données,Test de validation,,chacun à toutes les données disponibles,chacun à une partie des données relativement à sa capacité de consommation,"chacun à une partie des données, réparti de manière uniforme",,
|
73 |
-
Quelle est la différence entre Hadoop et Spark?,Streaming de données,Test de validation,,Hadoop est un système de calcul et de stockage alors que Spark n’est qu’un système de calcul,Spark est écrit en Scala alors que Hadoop est écrit en Java,Spark écrit les valeurs en mémoire alors que Hadoop les écrit sur disque,Tous ces points,
|
74 |
-
Quelle librairie de Spark n’existe pas ?,Streaming de données,Test de validation,,SparkSQL,SparkML,Spark Streaming,Spark IO,
|
75 |
-
Que signigie RDD ?,Streaming de données,Test de validation,,Raw distributed dataset,Redundant Distributed Dataset,Resilient Distributed DataSet,,
|
76 |
-
Qu’est-ce que le DAG ?,Streaming de données,Test de validation,,Une représentation des tâches à exécuter,Un dispositif qui permet d’optimiser les claculs,,,
|
77 |
-
Les Dstreams sont définis par,Streaming de données,Test de validation,,Une limite de temps,Une limite d’espace,Une limite déterminée aléatoirement,Tous ces points,
|
78 |
-
"Dans HBase, les données sont stockées par",Streaming de données,Test de validation,,Lignes,Familles de colonnes,Clefs,,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
requirements.txt
CHANGED
@@ -19,3 +19,8 @@ starlette==0.36.3
|
|
19 |
typing-extensions==4.9.0
|
20 |
uvicorn==0.27.1
|
21 |
uvloop==0.19.0
|
|
|
|
|
|
|
|
|
|
|
|
19 |
typing-extensions==4.9.0
|
20 |
uvicorn==0.27.1
|
21 |
uvloop==0.19.0
|
22 |
+
keras-nlp==0.6.1
|
23 |
+
keras==2.12.0
|
24 |
+
tensorflow==2.12.0
|
25 |
+
sentencepiece==0.1.99
|
26 |
+
filesplit==4.0.1
|
requirements_save.txt
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
annotated-types==0.6.0
|
2 |
+
anyio==4.2.0
|
3 |
+
click==8.1.7
|
4 |
+
exceptiongroup==1.2.0
|
5 |
+
fastapi==0.109.2
|
6 |
+
h11==0.14.0
|
7 |
+
httptools==0.1.2
|
8 |
+
idna==3.6
|
9 |
+
numpy==1.24.4
|
10 |
+
pandas==1.5.3
|
11 |
+
pydantic==2.6.1
|
12 |
+
pydantic-core==2.16.2
|
13 |
+
python-dateutil==2.8.2
|
14 |
+
pytz==2024.1
|
15 |
+
requests==2.7.0
|
16 |
+
six==1.16.0
|
17 |
+
sniffio==1.3.0
|
18 |
+
starlette==0.36.3
|
19 |
+
typing-extensions==4.9.0
|
20 |
+
uvicorn==0.27.1
|
21 |
+
uvloop==0.19.0
|