diff --git a/examen_partiel.md b/examen_partiel.md
index 4bedb3f..1db61c5 100644
--- a/examen_partiel.md
+++ b/examen_partiel.md
@@ -693,8 +693,16 @@ $$
$$
- Mesure F1:
$$
-2\left(\frac{\text{precision}\times\text{rappel}}{\text{precision}+\text{rappel}}\right)
+F1 = 2\left(\frac{\text{precision}\times\text{rappel}}{\text{precision}+\text{rappel}}\right)
$$
+- Mesure F:
+$$
+F_{\alpha} = \frac{1}{\alpha P^{-1}+(1-\alpha) R^{-1}}
+$$
+
+- Si $\alpha < 0.5$, la précision est plus importante
+- Si $\alpha > 0.5$, le rappel est plus important
+- F1: $\alpha = 0.5$
## Validation croisée
@@ -962,7 +970,7 @@ Problème: Les mots ont souvent plus d'une étiquette, il faut alors déterminer
- Probabilité de transition $A=\lbrace a_{ij} \rbrace$: modélise la séquence d'étiquettes
- Probabilité d'émission $B=\lbrace b_i(k) \rbrace$: associe les mots aux étiquettes
-![](hmm.png)
+![Hidden Markov Model](hmm.png)
Quelle est la meilleure séquence d'étiquettes qui correspond à la séquence d'observations ?
@@ -1288,10 +1296,202 @@ C'est un problème d'étiquetage
# Recherche d'information
+**Recherche d'information**:
+- Matériel (documents)
+- Non-structuré
+- Besoin d'information
+- Grandes collections
-# Wordnet
+![Schéma général](recherche_info.png)
+- Plusieurs modèles:
+ - Booléen
+ - Vectorial
+ - Probabiliste
+ - Latent semantic indexing
+
+## Recherche booléenne
+- Expressions booléennes
+- Retourne tous les documents qui satisfont l'expression
+- Rencontré dans les bibliothèques (fonction de recherche avancée)
+- Éviter d'utiliser des expressions régulières:
+ - Lent pour de grandes collections
+ - Orienté sur la ligne
+ - Négation n'est pas triviale
+ - Pas d'opérateur de proximité
+- Construction d'une matrice terme-document
+- Enjeux:
+ - Avec beaucoup de mots et de documents: matrice très large et très creuse
+ - N'enregistrer que les 1
+- Index inversé:
+ - Pour chaque terme, on garde une liste chaînée de tous les documents qui contiennent ce terme
+ - Structure de données: dictionnaire, trié par ordre alphabétique
+- Avantages:
+ - Peut traiter toutes les requêtes booléennes
+ - Résultats précis: le document satisfait ou non
+- Inconvénients:
+ - Il manque parfois un terme dans les longues requêtes
+ - Variantes morphologiques
+ - Texte d'ancrage
+ - Résultats sans ordre particulier
+ - Tous les résultats ont la même importance
-# Premier travail pratique
+![Index inversé](index_inverse.png)
+
+### Construire l'index inversé
+
+1. Prétraiter les documents
+ - Tokenisation
+ - Normalisation
+2. Générer les postings (terme, identifiant document)
+3. Trier les postings
+4. Créer les listes et les compteurs de documents
+5. Créer les structures de données (dictionnaire et listes)
+
+### Étapes de la requête
+
+- Recherche naïve: intersection des listes $O(N^2)$
+- Listes triées: avancer dans les listes en ordre croissant
+
+## Recherche vectorielle
+
+### Représentation
+
+Documents et requêtes: vecteurs de poids à N dimensions:
+
+- Poids: importance du terme $T_i$ dans le document $D_j$
+- Un terme fréquent dans un document est important
+- Un terme fréquent dans plusieurs documents n'est pas important (stop words ou sujet général)
+- Types de poids:
+ - Binaires (0 ou 1)
+ - Fréquence des termes (sans aucune modification)
+ - TF-IDF
+ - Poids TF-IDF: cette mesure présente plusieurs alternatives
+ - Information mutuelle
+- Similarité entre les vecteurs
+- Matrice de comptes (CountVectorizer dans scikit-learn).
+
+### TF-IDF
+
+$$
+w_{ik} = {tf}_{ik} \log(\frac{N}{n_k})
+$$
+
+- $T_k$: Terme $k$ dans le document $D_i$
+- $tf_{ik}$: Fréquence de $T_k$ dans $D_i$
+- $N$: Nombre total de documents dans la collection $C$
+- $n_k$: Nombre de documents dans $C$ qui contiennent $T_k$
+- $idf_k$: Fréquence inverse de $T_k$ dans C
+
+### Similarité
+
+- Angle entre les vecteurs: produit scalaire ou cosinus.
+- Certains vecteurs sont plus longs que d'autres, ce qui leur donne une importance relative.
+- Il faut normaliser les vecteurs (leur donner une longueur de 1)
+
+$$
+\begin{aligned}
+cos(\vec{q},\vec{d}) &= \frac{\vec{q} \cdot \vec{d}}{|\vec{q}||\vec{d}|} \\
+&= \frac{\sum_{i=1}^{|V|} q_{i}d_{i}}{\sqrt{\sum_{i=1}^{|V|} q_{i}^2}\sqrt{\sum_{i=1}^{|V|} d_{i}^2}}
+\end{aligned}
+$$
+
+On peut alors retourner les documents qui ont le plus grand cosinus.
+Mais on peut faire mieux en utilisant l'index inversé.
+
+$$
+\text{score}_d = \frac{\sum_{t} wf_{t,d}w_{t,q}}{|d|}
+$$
+
+Mesure de l'efficacité:
+
+- Précision:
+
+$$
+\frac{\text{pertinent et retenus}}{\text{retenus}}
+$$
+
+- Rappel:
+
+$$
+\frac{\text{pertinent et retenus}}{\text{pertinents}}
+$$
+
+- Mesure F
+- Mean average precision: on calcule la précision pour chaque document retourné, cumulativement, pour plusieurs requêtes, et on fait la moyenne ensuite.
+- Précision à 5, à 10 ...
+- Mean reciprocal rank: inverse du rang du document le plus pertinent
+$$
+\text{MRR} = \frac{1}{|Q|} \sum_{i=1}^{|Q|}\frac{1}{\text{rank}_i}
+$$
+- Discounted cumulative gain: Tient compte du rang des documents pertinents
+$$
+\text{DCG}_p=rel_1 + \sum_{i=2}^p \frac{rel_i}{\log_2{i}}
+$$
+
+## Lucene
+
+![Lucene: Indexation et recherche](lucene.png)
+
+# Sémantique lexicale
+
+- Raisonnement: idées similaires avec des mots différents (thesaurus)
+- Utilisation: détection de plagiat, système question-réponses, résumé de textes
+- Approches possibles:
+ - Taxonomie et thesaurus
+ - Approche distributionnelle
+- Relations entre les mots (lemmes)
+ - Un lemme peut avoir plusieurs sens
+ - **Sens**: Représentation d'un aspect de la signification d'un mot
+
+## Relations
+
+Les mots et leurs sens peuvent être reliés par différentes relations:
+
+- Homonymie: forme commune (phonologie, orthographique ou les deux), mais sens différents
+ - Homophones
+ - Homographes
+ - Les deux
+ - Problèmes en NLP:
+ - Synthèse vocale (même orthographe mais phonologie différente)
+ - Recherche d'information (même mot, sens différents)
+ - Traduction automatique
+ - Reconnaissance vocale (même phonologie, orthographe différente)
+- Polysémie: Un mot a plusieurs sens
+- Synonymie: Peuvent être remplacés l’un pour l’autre
+- Antonymie: s’opposent sur un aspect
+ - Binaire (adjectif)
+ - Échelle de valeurs (mesure)
+ - Réversibilité (action/verbes)
+- Hyperonymie: plus général, regroupement
+- Hyponymie: plus spécifique, sous-classe (inverse d'hyperonymie)
+- Holonymie: compose le tout d'une partie (inverse de méronymie)
+- Méronymie: une partie d'un tout
+
+## Wordnet
+
+Collection de sens de mots, regroupés sous la forme de *synsets*, des quasi-synonymes
+
+Il y a 4 types de synsets:
+
+- Nom
+- Verbe
+- Adjectif
+- Adverbe
+
+Ils forment un graphe sémantique. Ils forment aussi une hiérarchie de concepts
+
+### SentiWordNet
+
+- Extension de WordNet pour l'analyse de sentiments et le forage d'opinions. Annotation de positivité, négativité ou neutralité.
+
+## Mesure de la similarité
+
+- Synonymie (simple)
+- En pratique, on utilise la hierarchie de concepts (noms et verbes).
+- On calcule la proximité par les chemins
+ - $pathlen(c_1,c_2)$: 1+ nombre de liens
+ - $sim_path(c_1,c_2) = \frac{1}{pathlen(c_1,c_2)}$
+ - $wordsim(w_1,w_2) = max_{c_1 \in senses(w_1),c_2 \in senses(w_2)}$
diff --git a/index_inverse.drawio b/index_inverse.drawio
new file mode 100644
index 0000000..f9af98d
--- /dev/null
+++ b/index_inverse.drawio
@@ -0,0 +1 @@
+5ZpLc9sgEIB/jY71SEJ+9BjbadJHZtLm0PRIJSJRI+FByI/++iILLMnrpG6TGGaSS8QCC/r2wdrYQ7N8cyXwMrvhCWFe6CcbD829MAwif6L+1ZJtI5mMR40gFTTRg1rBHf1NtNDX0oompOwNlJwzSZd9YcyLgsSyJ8NC8HV/2ANn/VWXOCVAcBdjZqSDYSv/ThOZaXkwet92XBOaZnrxSajf8CeOF6ngVaFX9EL0sPtrunNsdOlXLTOc8HVHhC49NBOcy+Yp38wIq+kacGae3JrdemiayZypRqAed90fHpkcnDJZvZwghewu95i+xWbBbwpx/enbxeerj3n8Nb+ZvwuiRs0Ks0qvMhWVrEqw+I4TqXX5avF1RiW5W+K47l0rzzq2txURkmwOjNduN9gjVM5JeE6k2KohesJEw9NuOdTNdcfChm/WMS7SMqzdKt0rbtGoB03nH0hFIUBCEuWJusmFzHjKC8wuW+m0D60d84XzpUb1i0i51WGFK8n7IBUssb3X83eNH3VD+bxuzjfdzvlWt5q91ht8Gr96H16JmDzlIjq+JBYpkU8MDIfHDSoIw5Ku+js5Zh899ZZTtce9I4TjvicEZkNGRbMxPevAyvtt/L/hzXKdEPHCEVMkpgldqce0fpxhUmJhOtRCnT7XYinwrQcTeqvBNDoxmNDomcH0LPuYbXZ8fobZshIFxc55s/WjIRgDWvDwPjelEw7Q6KyQJgASPFHPDQmFjkF6DyBF9iGN3IJkbNYNN/vxFvmOUQoAJeQApcgxSiEMuKF9So7l7hDBiBvDEu7cmIaOZe8QfpgOxvbz99C1/A0/UNlPTKd8RjovJViCu1cv2acES2/7AXdYMNmnBGtvBw453zVKsPge2acUOUbJKO5mbwcwuZa+ESy/h2PrmA4rJvuYYP0dGJlDJZN9TrACHwwG1jmNXMvhyMWq6ZRvLM9LCVZNDnw3AIpL65iOlE0OVpfWMcG6KfDtuxOoL21zimBJACCRIrmofxShWjHDZUnjl7nCIhsq740O9dyZpVrtpLrxGtdeOmz+eu3VXKVAm3ZsNjxiMyN75lXzQZ7eqzUamvcEN81AT4AOFPkHil75yjqCp+CRK+s5jSXlRYGpICdeXKtolH2HLKXgCzLjjAslKXihRk4fKGMHIsxoWtRerXyHKPm0jm0aY3ahO3KaJLtr3mOZoZ87XiA5BKAQPik3hK+WG+CJfMRit7yUtEjLt2at6GzWUs3291xNOLY/m0OXfwA=
\ No newline at end of file
diff --git a/index_inverse.png b/index_inverse.png
new file mode 100644
index 0000000..5176860
Binary files /dev/null and b/index_inverse.png differ
diff --git a/lucene.drawio b/lucene.drawio
new file mode 100644
index 0000000..508c255
--- /dev/null
+++ b/lucene.drawio
@@ -0,0 +1 @@
+5VrZUtswFP2aPNKxrTjLI0mg7Qyd0tIZ4Kkj24qtolhGVkjM11eK5VUmdWlAKfCCdLWfe3QXOQMwX20/MphEX2iAyMCxgu0ALAaOYw+tifgnJVkumYxHuSBkOFCdKsEVfkRKaCnpGgcobXTklBKOk6bQp3GMfN6QQcboptltSUlz1QSGSBNc+ZDo0msc8EidwhlX8k8Ih1Gxsj2a5i0rWHRWJ0kjGNBNTQTOBmDOKOV5abWdIyLBK3DJx50/0VpujKGY9xnghV7089w79bwgvk9u2M2tdX8CQD7NAyRrdWK1W54VEDC6jgMkZ7EGYLaJMEdXCfRl60YoXcgiviKiZouimg4xjrZPbtQujy94g+gKcZaJLmoAUIApxoACwE2F/6iQRXXsp0oIlc7DcuoKFlFQyPwNSs7xo9QTpJKOBwepuLE1TFAg7pKqUsYjGtIYkrNKOmuiVvW5oDRRWP1CnGfKMMA1p00kBVosu1Hjd5VbWfngFtXFtt64yFQt36vc4H78xXnomvlo38GVWYIsRHxPv3G3PhkikOOH5j4Orx2NwQvqr1fysKaZPGwyeagz2e5ksvVSTO667SMilp0F+EEUQ1k8x0i4EiUXy9SajCM6aiLq6ohOOgAFL2Y+3xieU8N4Dt8YnvbIMKDuGwO0NI2mALVtDZL3EQuMe8YCE6OxwNSsdiqF3Db0cTTasYcm1VMEOzVz9ANtucxeGQxlyJZq+uOyQwNuhlL8CL1dBwljQrEcKHq7s4G7EBJIcBgLgS9mREwIpAnCIvU9VQ0rHAQ73RPoITKD/l24Y8GcEsp264Ll7m+fEVOJudrJoMw/6vrbw9InTd6J9cEBRfraWzFquksJRjWX2/JHLbNIl8sUcU2v5Z6er+pxH8dzKm5ZlgoNHafvKZ1NgZ7dM4AfvZj30bPz9+F9Jj3t2xM363XM20Tj/GcB/PaaYWmFTLMZtGNT42wunhrfnbee9mSz45qk81Sj8wIz4fComruutzSCiSz6GcFCPezPjPZyPV54paD0wl/XXMyCDkd912lSvyMr62S+/XLUf69phA16ct9spGrrLztn20REnimmsaY6PUZNOaN3qAgnYyrZPFtiQlqi/pFq13VqEuIAF6XlIsDQ1S7K+DWzbQeYuCaHpPu/srg7rNfemcYtDeTXS406fHTvGM6zzZmvYV/XbdZ86Q+p39aIZZeQpUcQirYTK9Dxje91Q1FgxB8fkJhOX2ICq1s1r/QCpBNzlyNdIcj86Aio2c6SzFPTmRi1tbYxW+u4/4WtdfRvLDtKf0cwOAJCt3Mf84QuNlB/BRasdKziu73+CGzaCgz7frp/BmiiWv1UKg/Qqh+cgbPf
\ No newline at end of file
diff --git a/lucene.png b/lucene.png
new file mode 100644
index 0000000..17ff5de
Binary files /dev/null and b/lucene.png differ
diff --git a/recherche_info.drawio b/recherche_info.drawio
new file mode 100644
index 0000000..936b234
--- /dev/null
+++ b/recherche_info.drawio
@@ -0,0 +1 @@
+5VnbcpswEP0aHtvhYuP4MbHjtjNppxN3pu2jAgqoESwRwpd+fVcggrk4JZ3Y2OmTpV1dzzm7ErLhzKLNB0GS8DP4lBu26W8MZ27YtjUyL/BHWbaF5WLiFoZAMF83qgxL9ptqo6mtGfNpWmsoAbhkSd3oQRxTT9ZsRAhY15vdA6/PmpCAtgxLj/C29TvzZah3YU8q+0fKgrCc2XKnhSciZWO9kzQkPqx3TM614cwEgCxK0WZGuQKvxKXot9jjfVqYoLHs0yFOH9ebEcDiIUzt+XzBoy/f3ll6mFRuyx1THwHQVRAyhABiwq8r65WALPapGtbEWtXmBiBBo4XGX1TKrWaTZBLQFMqIa28xp5po717KdUEmPPrcBrQmiAiofKbd+AlxlCqFiEqxxX6CciLZqr4OojUTPLWrYMWCRvYlKBfjrgjP9EyG7XJc7pXPVlgMVPGWPmbGzDEuLyUt3TjbTosWVSipRBUROMI55RAIEmHDhAqGK6ei6ftaOa7WIZN0mZAc3jVGbxdHKyok3TzPUhtV3cEeaemXsa+r6yqQrDI6wp0gcs1D8eB2EHHW8rd7yt8dUv52H/nPwcsi3H/6Qu37ut/fFX1X8HZz94oSH/2jxC8OJvFzV/S4p6KnQyp63EfRC4g9ySBWtx+aLy0ReYKfpogKKVy9tF7n5/iJ2xo+c4/PXNZuT1lPhpR11/H4hmTdTNYnIOvRELJGuMT2x27lpxrs/biszjd68KK21bVXDIfJOWT5SZ9w+IRcbF56ZyGSpBIEHUT2J3APd848m097ytcyu5k5jn6nLf02c7cHkfo+ZKkyndil4wRkarYAvNUnXcbxpEv3B/igHyVNJJ3hv0raqXQGcSpFVpMjJ3ls7L6DNABGUGQdQBwEHugMOKjXjhhilSvuGecNE+EsiLHqIYj5+4eCmHmEX2pHxHyf78vI9WB4BY4sp6F2s83RtIMi+2AUtbPFkkWME8FkIfo3TMZ4XA+YDjJGxyTDbj+Z3HZds02m8IvfcJy4pnli1DgdqSzKkz1eCPAsVahhKqOpymrVo9b/QlBXIjsuQe3HGUSQ0/yk+Y+IsA5HBFar/61y386/f871Hw==
\ No newline at end of file
diff --git a/recherche_info.png b/recherche_info.png
new file mode 100644
index 0000000..ffc88a2
Binary files /dev/null and b/recherche_info.png differ