version pre exam partiel avant antidote

This commit is contained in:
François Pelletier 2019-10-22 00:55:57 -04:00
parent 69b5713a95
commit 89de4f257f
7 changed files with 207 additions and 4 deletions

View file

@ -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 lun pour lautre
- Antonymie: sopposent 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)}$

1
index_inverse.drawio Normal file
View file

@ -0,0 +1 @@
<mxfile host="www.draw.io" modified="2019-10-21T15:36:35.328Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" etag="kAAV1GwFrcm3S5YsXYS9" version="12.1.3" type="device" pages="1"><diagram name="Page-1" id="bd83a815-5ea8-2e97-e5ec-87c9f400f2fa">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=</diagram></mxfile>

BIN
index_inverse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

1
lucene.drawio Normal file
View file

@ -0,0 +1 @@
<mxfile host="www.draw.io" modified="2019-10-22T04:25:25.735Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" etag="DchZb66yJ9pAhXoDybW6" version="12.1.3" type="device" pages="1"><diagram id="wjR39zvCAK-OV4iVEDj-" name="Page-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</diagram></mxfile>

BIN
lucene.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

1
recherche_info.drawio Normal file
View file

@ -0,0 +1 @@
<mxfile host="www.draw.io" modified="2019-10-21T15:16:14.240Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" etag="9-3OykCRAavg-E-BfynW" version="12.1.3" type="device" pages="1"><diagram id="cbQOHBFk_CRoLQWR-aYk" name="Page-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==</diagram></mxfile>

BIN
recherche_info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB