Outils pour utilisateurs

Outils du site


public:projets_matrice_avec_txm

Ceci est une ancienne révision du document !


Projets mobilisant TXM au sein de Matrice

Cette page synthétise les différentes discussions autour de projets de l'Équipex Matrice mobilisant TXM.

Elle doit servir à faire la liaison entre ICAR et Matrice et au suivi des développements de solutions.

Dans la mesure où cette page est pour l'instant publique, il est intéressant de veiller à ne pas trop désigner de personnes et de projets concrets. (merci de nous contacter si cette page doit évoluer vers plus de confidentialité)

Projet PG

Contexte

Expériences antérieures

Une première expérience a consisté à analyser la relation entre des images du mémorial de Caen et des mots clés pour N participants “représentant des mémoires individuelles”.

  • 119 images exposées au mémorial de Caen
  • 123 mots clés présents dans le texte décrivant les images
  • on associe/code a priori chaque image avec 2 à 5 mots clés
  • on demande à chaque participant de choisir X mots-clés

Une autre expérience, sans les données sur les participants, a consisté à faire une LDA sur la matrice images x mots-clés, qui a permis de faire émerger des topics, avec pour chaque mot-clé une probabilité d'appartenance à ce topic. Les topics s'interprètent comme une reconstruction des zones du Mémorial (il y a une vingtaine de zones, et on a demandé à LDA une vingtaine de topics).

Formulations de l'expérimentation avec TXM

Une nouvelle expérience consiste à analyser la relation entre des documents audio ou vidéo de la base INA “représentant une mémoire collective” et les mêmes 123 mots-clés avec l'aide de TXM.

Il s'agit :

  • a) d'analyser l'évolution temporelle de chaque mot-clé, et peut-être des cooccurrents des mots clés, et peut-être en tenant compte des ensembles de mots-clés liés à une image donnée ;
  • ou b) analyser les clusters de mots produits par une LSA sur des tables de fréquence [documents (transcriptions ?) x mots clés] construites pour différentes périodes (?)

La chronologie des transcriptions est établie par leurs regroupements en plusieurs décennies fournis par DP → en fait nous prenons la totalité du corpus de transcriptions car nous n'avons pas d'informations chronologiques :

  • nous sommes en attente des fiches INA au format XML pour pouvoir faire une sélection soit par le descripteur 'Seconde guerre mondiale' soit par chronologie

Une liste de termes est établie par PG en lien avec DP.

Expérience I

  • Nous produisons une matrice de fréquences/présence-absence [documents x termes] pour PG.

Expérience II

  • Pour la deuxième expérience, nous produisons deux matrices différentes :
    • matrice du corpus total : la matrice de fréquence documents x tous les mots du corpus filtrés par mots-outils et basse fréquence de corpus total
    • matrice du corpus focalisé : la matrice de fréquence documents x tous les mots filtrés par mots-outils et basse fréquence de corpus total des sous-corpus de document correspondant au contextes d'apparition des termes

Des expériences de LDA sont réalisées sur la base de cette première matrice, pour calculer des distances entre termes pour caractériser le degré de regroupement entre des termes.

Description des données et outils mobilisés

Nous allons fournir les données issues du corpus de transcriptions Matrice à Pierre sous une forme compatible avec les outils qu'il utilise.

Outils d'analyse utilisés par Pierre - Matlab Topic Modeling Toolbox 1.4

Remarque : bien que d'autres outils, notamment R (package 'topicmodels') ou Java (Mallet) intégrables facilement dans TXM ou compatibles, permettent de faire du topic modeling au même titre que cette bibliothèque Matlab, dans un premier temps nous allons externaliser les données pour l'outil Matlab.

Format des données à fournir

Bibliothèque Matlab Topic Modeling Toolbox

Elle manipule les types de données suivants :

  • bag of words : document word counts
  • vocabulary
  • word stream : successive word and document indices
  • collocation word stream : successive word and document indices with function words removed
  • collocation stream : successive word and document indices (with function words removed ? → peut-être pas et c'est ce qui ferait la différence ?? cf. http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm ) [note BP]

GibbsSamplerLDA.m

La fonction 'GibbsSamplerLDA' utilise les données suivantes (de type bag of words) :

  • WS a 1 x N vector where WS(k) contains the vocabulary index of the kth word token, and N is the number of word tokens. The word indices are not zero based, i.e., min( WS )=1 and max( WS ) = W = number of distinct words in vocabulary
  • DS a 1 x N vector where DS(k) contains the document index of the kth word token. The document indices are not zero based, i.e., min( DS )=1 and max( DS ) = D = number of documents
  • WO a 1 x W cell array of strings where WO{k} contains the kth vocabulary item and W is the number of distinct vocabulary items. Not needed for running the Gibbs sampler but becomes necessary when writing the resulting word-topic distributions to a file using the writetopics matlab function.

Le plus simple est d'utiliser les fonctions Matlab 'importworddoccounts' et 'textread' pour produire ces données.

— la fonction 'importworddoccounts' produit les vecteurs WS et DS à partir d'un fichier 'doc_word_freq.txt' de la forme suivante :

1 2 10
1 3 4
2 2 6
...

Glose :

le mot 2 apparaît 10 fois dans le document 1
le mot 3 apparaît 4 fois dans le document 1
le mot 2 apparaît 6 fois dans le document 2
...

En fait 'importworddoccounts' utilise la fonction 'SparseMatrixtoCounts' dont voici le code Matlab :

[ ii , jj , ss ] = find( WD );

ntokens = full( sum( sum( WD )));
WS = zeros(1, ntokens);
DS = zeros(1, ntokens);

startindex = 0;
for i=1:length(ii)
   nt = ss(i);
   WS(startindex+1:startindex+nt) = ii(i);
   DS(startindex+1:startindex+nt) = jj(i);
   startindex = startindex + nt; 
end

— la fonction 'textread' (native) produit le tableau de chaines WO à partir d'un fichier 'lexique.txt' de la forme suivante :

forme_graphique_du_mot_1
forme_graphique_du_mot_2
forme_graphique_du_mot_3
...

Mots-clés

Les mots-clés sont organisés par catégorie (réécriture simplifiée mais représentative de ce que Pierre nous a fourni) :

  • Pays/Localisation : Lybie, France…
  • Lieu : Usine d'armement, Train…
  • Armée : Armée Française, Armée Britanique
  • Soldat : Soldat Français, Soldat Britanique
  • Personnage célèbre : Rommel, di Bergolo
  • Personnes : Main-d'œuvre, Section d'assaut
  • Action de Guerre : Invasion/Conquête

Diagnostic :

  • on trouve des mots composés
  • les min/maj peuvent être importantes pour certains noms propres

Mise en oeuvre

Proposition :

  • on importe les transcriptions pour être capable de faire des CQL sur les transcriptions
    • le XML des transcriptions est tokenisé (le module d'import de départ peut être 'XML/w+CSV', attention TOUS les mots ont un W dans les sources)
      • MD : on partira du module CQP qui est plus proche de ce dont on a besoin. Pour l'instant, je fais un import prototype limsi, les options citées ci-dessous seront implémentée plus tard.
    • on va du XML source au format CQP (ex WTC puis CWB) le plus vite possible
      • on transfère les informations utilisées pour le calcul de Pierre (c'est une option à créer)
        • mot qui ont une forme (qui ont un ordre implicite)
        • transcription (qui ont un ordre implicite)
      • on ne transfère pas d'information non utilisée pour le calcul de Pierre (c'est une option à créer)
        • MD : je ne transfert que les débuts de texte et les mots limsi
    • on lemmatise, donc il y a deux états TTI _src et TTO _sortie (vérifier TreeTagger)
      • MD : TreeTagger accepte que dans TTI_src il y ait des balises “text”, ce qui facilite grandement la tache puisque je n'ai pas besoin de convertir vers CQP
    • on essaye de rendre rémanentes certaines transitions tout en étant compatible avec l'architecture actuelle des modules d'import :
      • XML→TTI (c'est une option à créer)
      • TTI→TTO (c'est une option à créer)
      • TTO→CQP (peut-être éclaté en plusieurs CQP ?)
      • CQP→indexes
      • MD : toutes les transformations de fichier de l'import prototype limsi sont rémanentes.
    • l'unité du corpus au sens CQP (n sous-corpus) est à préciser en fonction des limites que nous pouvons rencontrer
    • le retour de CQP est exploité sous forme numérique seulement [Rq. BP : de fait on a juste besoin de compter les matchs à l'intérieur d'un document, on ne s'intéresse pas à la forme qu'ils prennent]
  • on utilise une CQL pour formuler chaque mot-clé (cf. ci-après)
  • expérience I : la matrice est construite à partir des fréquences de CQL
    • Implémentation :
      • étant donné un corpus allant des positions 0 à T, constitué d'une séquence de textes qui ont chacun une position de start et de end
      • étant donnée une liste de CQL correspondant à chaque terme
      • pour chaque CQL
        • décompter le nombre de matchs texte après texte dans l'ordre du corpus
  • expérience II :
    • expérience II.A - corpus total : la matrice est construite à partir des fréquences de tous les mots filtrés par mots-outils et basse fréquence
  • Implémentation :
    • étant donné un corpus C allant des positions 0 à T, constitué d'une séquence de textes qui ont chacun une position de start et de end
    • étant donnée une CQL pour sélectionner les mots pleins
    • étant donné le sous-corpus PC des mots pleins de C
    • étant donnée une liste de CQL construite à partir du lexique des lemmes de PC
    • pour chaque CQL de lemme
      • décompter le nombre de matchs dans PC texte après texte dans l'ordre du corpus C
    • expérience II.B - corpus focus : la matrice est construite à partir des fréquences de tous les mots filtrés par mots-outils et basse fréquence des contextes d'apparition des CQL
      • le contexte est une fenêtre de X mots
  • Implémentation :
    • étant donné un corpus C allant des positions 0 à T, constitué d'une séquence de textes qui ont chacun une position de start et de end
    • étant donnée une liste de CQL correspondant à chaque terme
    • on construit le sous-corpus CT des contextes de CQL de termes
    • étant donnée une CQL pour sélectionner les mots pleins (variante matchs fréquents de 'patrons de mots composés')
    • on construit le sous-corpus PCT des mots pleins de CT
    • étant donnée une liste de CQL construite à partir du lexique des lemmes de PCT
    • pour chaque CQL de lemme
      • décompter le nombre de matchs dans PCT texte après texte dans l'ordre du corpus C
  • variantes possibles par rapport aux mots simples :
    • ajouter des CQL de patrons de mots composés
    • ajouter des segments répétés longs et fréquents
  • on produit les fichiers 'doc_word_freq.txt' et 'lexique.txt'

Solution : Voir ticket #954

À propos des fichiers 'doc_word_freq.txt' et 'lexique.txt'

En ce qui concerne le fichier lexique.txt, il peut prendre la forme suivante :

Lybie
URSS
...
Usine d'armement
Train
Ruine
Ville
Village
Camp
Champ de bataille
Mer
Magazin
Armée Japonaise
Armée Soviétique
...
Rommel
di Bergolo
Montgomery
...
Prisonnier
Déporté
Interné
Mort/Blessé
Vieillard
Orphelins
Résistant
Combattant
Main-d'œuvre
Section d'assaut
Milice
Maquis
Jeunesse Hit.
Partisan
Population
Combat
Invasion/Conquête
Bombardement
etc.

En considérant qu'on associe à chacun des mots-clés une équation CQL qui lui correspond (peut-être dans un fichier tabulé où la première colonne est le mot-clé, la deuxième l'équation ?). (SH: je pense qu'un script Groovy sera plus simple et plus sûr, au moins dans une première version).

Par exemple :

Lybie : [frlemma="Lybie"]
Usine d'armement : [frlemma="usine"][frlemma="de"][frlemma="armement"]
di Bergolo : [word="di"%c][word="Bergolo"%c]
Mort/Blessé : [frlemma="mort" | word="blessée?s?"%c]
Orphelins : [frlemma="orphelin"]
Main-d'œuvre : -> sur 1 ou 3 token en fonction de la tokenisation faite par le LIMSI, à vérifier
Jeunesse Hit. : [frlemma="jeunesse"][word="hitlériennes?"%c]
Invasion/Conquête : [frlemma="invasion|conquête"]
etc.

Il faudra prévoir de confronter chaque, ou certaines, CQL à tout ou partie du corpus des transcriptions pour régler : 1) la forme effective prise par les mots-clés, donc les CQL 2) la pertinence des mots-clés entre eux

J'espère que nous n'aurons pas besoin de générer de concordance pour ça.

Mais un Index est peut-être à considérer dès maintenant.

Il y a peut-être d'autres choses que l'on peut faire pour améliorer ce jeu de mots-clés :

  • repérer et analyser des formes équivalentes depuis le corpus, par exemple par le biais de cooccurrents
  • saturer par des dictionnaires de synonymes
  • etc.

Les lignes du fichier doc_word_freq.txt consistent en :

<numéro d'ordre du document> <numéro de la ligne du fichier lexique.txt correspondant à l'équation CQL lancée> <nb matchs équation CQL>

A vérifier mais il semble que les lignes où le nb de matchs est nul peuvent (voire doivent ?) ne pas être mises.

Archives

Questions

Pour discussion du mardi 17 juin 2014.

  • A) sur quel “corpus INA” on travaille
    • veut on utiliser tout le fonds INA 2GM (trop gros et trop bruité ?)
    • veut on sélectionner les transcriptions de la meilleure qualité au sens d'un indicateur (automatique) produit par le LIMSI ?
    • veut on se limiter à la partie revue et corrigée (manuellement) dans Matrice (trop petit ?)
    • veut on se donner une expertise pour choisir des documents pertinents dans le réseau Matrice ?
    • veut on se limiter à des transcriptions contenant des passages (à définir) contenant des cooccurrences (à définir) (intérêt quantitatif et qualitatif) ou à ces passages eux-mêmes ?
  • B) accès au corpus avec interface de consultation Opsomaï, surtout pour PG (qui conduit la recherche), pour
    • essayer de mieux connaître le fonds,
    • essayer de mieux définir le corpus.
  • C) possibilité de consulter le corpus de travail à travers TXM, pour
    • objectifs :
      • essayer de mieux connaître le fonds,
      • essayer de mieux définir le corpus.
      • évaluer la qualité des mots choisis pour un usage en tant que requête,
      • reconstruction éventuellement de requêtes (formulations alternatives, contextualisation).
    • moyens pour les deux derniers points :
      • voir les mots-clés en contexte (avec idéalement retour au document audiovisuel),
      • calcul de cooccurrences pour avoir une idée de leurs usages.
    • suppose :
      • le transfert d'informations de fiches Opsomaï sous forme de métadonnées (au moins une information chronologique, voir point D) de transcriptions TXM (Est-ce possible : A. Dallo ?)
      • le transfert de transcriptions LIMSI (la relation entre une transcription et ses métadonnées

est fournie par un identifiant unique entre la base Opsomaï et le nom du fichier LIMSI ?)

  • D) une chronologie des transcriptions est établie
    • a minima : possibilité d'avoir l'année de diffusion (ou de réalisation) de chaque document
    • (éventuellement : informations temporelles sur des grains plus fins que le document ??)
    • aide technique au regroupement d'années pour définir des périodes
    • (implémentation de spécificités chronologiques pour induire des périodes et caractériser des profils chronologiques)
  • E) des “mots” sont associés et comptés pour chaque transcription
    • les items recherchés pourraient être :
      • les mots-clés eux-mêmes, avec leurs variantes graphiques éventuelles
      • des requêtes traduisant les mots-clés (synonymes, cooccurrences)
      • des requêtes correspondant aux descriptions d'images (à construire sur la base de l'ensemble des mots-clés associés à l'image)
      • des requêtes correspondant aux topics
  • F) quel type de table faut il produire pour l'analyse
    • on fournit des tables “chronologie” (voir détail point D) x “mot” (voir détail point E)
    • on fournit des tables “mot” x “mot” : cooccurrences entre mots-clés, entre requêtes-images (cf. E) ou/et entre requêtes-topics (cf. E)

Précisions qui seraient utiles

Fichiers de transcription LIMSI

  • dernière version
  • qualité des transcriptions
  • métadonnées de transcriptions LIMSI ?
  • plusieurs modèles linguistiques (nom, caractéristiques - dont date ?) utilisés par transcription ? (si oui, relation entre parties de TRS et les modèles)
  • corrections de transcriptions :
    • accès ?
    • qualité

Métadonnées de transcription LIMSI

  • relation entre une notice INA de fichiers audio ou vidéo et une transcription LIMSI (une notice pour plusieurs transcriptions ?)
  • qualité des métadonnées issues des notices INA :
    • datation : est-ce qu'on a toutes les dates des contenus ? Sinon il faut CALCULER les dates à partir des transcription ? (= séquencer ?)
  • transfert vers TXM depuis Opsomaï ou fichier(s) intermédiaires (ou base A. Dallo ?)
  • chapitrage de fichiers audio ou vidéo par Matrice
    • accès
    • désignation de portions de fichiers audio ou vidéo en qualifiant la portion (différencier les séquences)

Données INA/Opsomaï

  • transfert dans TXM de la sélection de notices dans Opsomaï : métadonnées temporelles ?
  • transfert des transcriptions corrigées ?
  • transfert des chapitrages ?
public/projets_matrice_avec_txm.1410863549.txt.gz · Dernière modification: 2014/09/16 12:32 par slh@ens-lyon.fr