Skip to content
Snippets Groups Projects
Commit a2d57132 authored by ivan.rigo's avatar ivan.rigo
Browse files

Update 4 files

- /NoteProjetSemestre.txt
- /RechercheDataSet.txt
- /README.md
- /CmdTrainPredict.txt
parent 1470feca
No related branches found
No related tags found
No related merge requests found
# Example usage
bbox_file_path = Path('/Users/tarik/Documents/Enseignement/python 23-24/Projet-semestre/archive/SROIE2019/test/box/X51005365187.txt')
bbox = tools.read_bbox_and_words(path=bbox_file_path)
print(bbox.head(5))
# Example usage
entities_file_path = Path('/Users/tarik/Documents/Enseignement/python 23-24/Projet-semestre/archive/SROIE2019/test/entities/X51005365187.txt')
entities = tools.read_entities(path=entities_file_path)
print(entities)
line = bbox.loc[1, "line"]
label = tools.assign_line_label(line, entities)
print("Line:", line)
print("Assigned label:", label)
# Example usage
bbox_labeled = tools.assign_labels(bbox, entities)
print(bbox_labeled.head(15))
# Example usage
new_lines = tools.split_line(bbox_labeled.loc[1])
print("Splitted row:")
print(pd.DataFrame(new_lines, columns=bbox_labeled.columns))
! python run_seq_labeling.py --data_dir "/home/ivan/Bureau/SemestreFinale/dataset" --labels "/home/ivan/Bureau/SemestreFinale/dataset/labels.txt" --model_name_or_path "/home/ivan/Bureau/SemestreFinale/SROIE2019/layoutlm-base-uncased" --model_type layoutlm --max_seq_length 512 --do_lower_case --do_train --num_train_epochs 1 --logging_steps 50 --save_steps -1 --output_dir output --overwrite_output_dir --per_gpu_train_batch_size 8 --per_gpu_eval_batch_size 16 ! python run_seq_labeling.py --data_dir "/home/ivan/Bureau/SemestreFinale/dataset" --labels "/home/ivan/Bureau/SemestreFinale/dataset/labels.txt" --model_name_or_path "/home/ivan/Bureau/SemestreFinale/SROIE2019/layoutlm-base-uncased" --model_type layoutlm --max_seq_length 512 --do_lower_case --do_train --num_train_epochs 1 --logging_steps 50 --save_steps -1 --output_dir output --overwrite_output_dir --per_gpu_train_batch_size 8 --per_gpu_eval_batch_size 16
Résume modele qui quand pourquoi le plus
compare bert
! python run_seq_labeling.py --data_dir "/home/ivan/Bureau/SemestreFinale/dataset" --labels "/home/ivan/Bureau/SemestreFinale/dataset/labels.txt" --model_name_or_path "/home/ivan/Bureau/SemestreFinale/SROIE2019/layoutlm-base-uncased" --model_type layoutlm --do_lower_case --max_seq_length 512 --do_predict --logging_steps 10 --save_steps -1 --output_dir output --per_gpu_eval_batch_size 8 ! python run_seq_labeling.py --data_dir "/home/ivan/Bureau/SemestreFinale/dataset" --labels "/home/ivan/Bureau/SemestreFinale/dataset/labels.txt" --model_name_or_path "/home/ivan/Bureau/SemestreFinale/SROIE2019/layoutlm-base-uncased" --model_type layoutlm --do_lower_case --max_seq_length 512 --do_predict --logging_steps 10 --save_steps -1 --output_dir output --per_gpu_eval_batch_size 8
\ No newline at end of file
3-4 éléments important : Libellé,coût,date
Voir base de données ticket de caisse
Cahier des Charge
Trouver des datasets de tickets de caisse
Chercher méthode réseau permettant de résoudre recherche texte sur image (puis librairie) (Voir Réseau profond/convolutionelle)
Segmentation ( reconnaitre les tickets sur une img)
Possibilitées
Plateforme sur mobile (scanner image et l'envoyé sur l'api)
on peut utiliser huggingFace pour chercher
Ne pas rester bloqué sur ticket de caisse,expandre
Responsable : Garidi Tarik
Mandant : Eggenber
Consultant : Bologno
Mettre à jour le cahier pour chaque étape
GPT/Duo project/Citer sources
But : Créer cahier des charge pour diplôme
Pour 21 nov ~
Trouver d'autre exemple d'extraction de données
voir LayoutLM
contacter l'autre élève
https://huggingface.co/impira/layoutlm-invoices
https://nanonets.com/blog/layoutlm-explained/
Fouiller LayoutLM
Layoutlm est un multiModal, pré-entrainée method.Il utilise trois type de données, le text,l'image et la position.
Il utilise des boundings box, qui sont techniquement deux points formant un rectangle contenant
une donnée. Les boundings boxs doivent être normalisé sur une échelle de 1000.
Le modèle possède 5 ?embedding? layer, le text et les coordonnées x/ymin et x/ymax représentant une bounding box
Multi modal
C'est un système capable d'utilisé différent donnée(textuelles,visuels,etc) pour accomplir des tâches. Ces systèmes
auront pour but de "simuler" comment un human comprend et interagirait avec quelque chose.
(Ex: Google Translate combine peut combiner textuelle et audio,Youtube/Netflix utilisant des données comportementaux/textuelles/visuelles
pour offrir des préférences, les assistants personelles comme google home/Amazon echo aussi)
https://pandia.pro/guide/quest-ce-que-le-multi-modal-dans-le-domaine-de-lintelligence-artificielle/
pré-entrainée method
C'est un modèle déjà entrainée et utilisé dans le but d'entrainée un autre modèle
https://nanonets.com/blog/layoutlm-explained/
https://github.com/microsoft/unilm/blob/master/layoutlm/deprecated/README.md
https://huggingface.co/docs/transformers/model_doc/layoutlm
Analyse sur les sources reçu et recherchées
Transformer / Tokenizer
https://medium.com/@rahul.anb24/extracting-structured-information-from-invoice-images-79666d1139fc
Transformer,c'est une architecture d'apprentissage ,qui utilise les tokenizer
Tokenizer,c'est le fait de coupé du text en quelque chose de plus facile a comprendre pour la machine
https://huggingface.co/docs/transformers/index
la libraire transformer est une api permettant de facilité l'installation/entrainement de machine learning
https://fr.wikipedia.org/wiki/Hugging_Face
HuggingFace
Il faudrait plus considèrer HF comme un git pour tout ce qui touche le machine learning
DATASET
https://www.kaggle.com/code/lonelvino/analysis-of-cord-dataset
https://github.com/clovaai/cord
CORD
Un dataset basé sur les factures de restaurant, si on veut tweak,il faudrait changé le dataset un peu,car il y a beaucoup de champs inutilisé
FUNSD
Dataset ayant principalement des formulaires, peut être tweakable pour correspondre au besoin,mais
la structure de base demandera beaucoup de changement (le dataset contient grossièrement deux carrées,questions & réponses)
A voir si utile,mais je doute
https://www.kaggle.com/code/ritvik1909/layoutlmv1-information-extraction
Très brut, plus une présentation qu'autre chose, et les résultats ont pas l'air fou
Utilise layoutlm1
https://www.philschmid.de/fine-tuning-layoutlm
Utilise layoutlm,un élément de layoutlm2. Le tutorial s'appuye aussi sur huggingface pour pull des fonctions/crée un model qu'il déposera sur le Site
Aussi utilisé pour "visionner" la progression. Même chose que FUNSD (vu qu'il l'utilise dans le tutorial), utilisable,mais doit être tweaké (si on ne
veut pas utilisé hugging face)
https://medium.com/@matt.noe/tutorial-how-to-train-layoutlm-on-a-custom-dataset-with-hugging-face-cda58c96571c
Utilise layoutlm3 et des données personalisé (donc pas de custom dataset). Le tutorial inclut les explications pour crée des dataset personalisé.
Le lien est mort et redirige sur un autre site, une recherche rapide n'a pas permis de trouvé le logiciel/site butler
le site butler : https://docs.butlerlabs.ai/reference/upload-and-extract-documents-as-a-csv-using-ui
https://wandb.ai/wandb-data-science/layoutlm_sroie_demo/reports/Information-Extraction-from-Scanned-Receipts-Fine-tuning-LayoutLM-on-SROIE--VmlldzoxMjI5NzE2
Application de layoutlmv1 sur SROIE
Ce n'est pas vraiment un tutorial, et plus une explication et une démonstration des avantages de layoutlm.A savoir que les données
ont été pré-processed déjà une fois avant pour évite de refaire l'ocr,donc les résultats réels peuvent être différent(bien que cela importe peu vu
qu'on ne risque pas d'avoir les mêmes params/dataset)
https://github.com/BordiaS/layoutlm
C'est un model déjà crée, a savoir qu'on a juste a lui fournir un dataset pour l'entrainée avant de l'utilisé. On a aussi un bout de code en conda
qu'on pourrait réutilisé dans la première piste pour l'installation
https://colab.research.google.com/drive/1o8-Km-kVHtOcdEd7i9uPY6vXg7MyCN0B?usp=sharing / https://medium.com/analytics-vidhya/extracting-structured-data-from-invoice-96cf5e548e40
Utilise PICK-pytorch sur du SROIE/un autre dataset d'un compétition de 2019. Pourrait être une piste
https://ubiai.tools/fine-tuning-layoutlm-v2-for-invoice-recognition/
layoutlmv2 sur un custom dataset utilisant https://ubiai.tools/
Le résultat final retourne des images contenant les boxs de données avec un fichier json correspondant. Sa a l'air intéressant,il faudra juste
savoir si on veut juste obtenir les résultats, ou s'il faut crée un script pour lire tout les fichiers jsons pour retiré un certain type de données
( par exemple le total dépense sur une période)
https://github.com/microsoft/unilm/blob/master/layoutlmv3/README.md
Plus une présentation de layoutlm3 qu'un guide,bien qu'il possède des models pré-entrainée,mais pas vraiment une première piste
https://medium.com/@shivarama/layoutlmv3-from-zero-to-hero-part-2-d2659eaa7dee
Permet de crée le dataset du second lien
https://medium.com/@shivarama/layoutlmv3-from-zero-to-hero-part-3-16ae58291e9d
Un tutorial sur layoutlm3 utilisant un dataset custom, une possible piste
https://www.kaggle.com/code/urbikn/layoutlm-using-the-sroie-dataset/notebook
Layoutlm sur du SROIE, c'est la solution qu'on était dessus
Ceci a pour but de créer une documentation des étapes et résultats attendu en suivant le tutorial sur https://www.kaggle.com/code/urbikn/layoutlm-using-the-sroie-dataset/notebook
1. Pre-processing the dataset
Le guide utilise un autre dataset que SROIE mais reste compatible avec SROIE
[1] Juste des importations qui seront utilisé
[2] Cette partie permet de préparer le premier test sur le dataset. La deuxième ligne est un fichier quelconque contenant les informations d'une facture qui est la même que le dataset
[3] Suite de [2], une fonction ayant pour but de stocker dans un dataframe panda(une sorte de tableau) et de retourner les informations importants (fichiers, coordonnées x/y,line).
[4] On regarde ensuite dans le dossier test du dataset l'entitée qui correspond aux lines que l'on a reçu précèdement, ces lines correspond au divers infos que l'on rechercher sur les factures. On s'attend à afficher un tableau de longueur 1 contenant les informations souhaité (dans ce cas la compagnie/date/adresse/total)
[5] On crée une fonction demandant une ligne d'information(n'importe quel champ de line vu dans[3]) et la liste d'entité (du dataset), qui doit retourner le label du line(indiqué si c'est l'adresse/cout/etc...). On utilise un sequencematcher avec minimum 80% pour indique si une line correspond à une des infos d'une entitées. Tout élément n'étant pas labélisé doit être marqué par O (ou n'importe quoi du moment qu'on sache que cela signifie qu'il n'est pas utile pour notre cas)
[6] On extend la fonction de sorte a labélisé tout les éléments recherché. Dans le tutorial, on hardcode des exceptions pour total/date et company. On garde seulement la plus grande date/total, et on ne labélise pas de company si total et date ont déjà été labelisé. On retourne un dataframe contenant le fichier,les coordonnées du texte avec le texte(line) et le label.
[7] On sépare ensuite les texte avec espace en différent ligne(mais on garde le label pour les deux).
[8] On combine les étapes précédentes pour incorporer tout les éléments et les transformer en un format lisible pour le script/modèle
[9] On utilise la fonction de [8] obtenir un dataset d'entrainement et de test, ce qui donnera un format que le model pour comprendre
[10] On crée la fonction pour sauvegarder [9], on normalise les points dans 0:1000 pour la longueur et largeur. On a une autre fonction qui s'occupera de parcouris chaque dataset et les écrits dans le même fichier
[11] Cette partie va crée un dossier pour stocker les deux datasets que [10] va créer. Il crée aussi un fichier label.txt qui contiendra le noms des champs recherché (et qui se retrouvent dans le dataset)
2. Fine tune LayoutLM
Après avoir crée les datasets, labelisé et normalisé nos données,la prochaine partie a pour but de faire les divers étapes du machine learning (c-à-d l'entrainée et le tester)
[12] On télécharge clone le git https://github.com/microsoft/unilm.git, avant de faire un pip install . dans unilm/layoutlm/deprecated.
[12.a] c'est la partie qui coince
[13] On set deux path sur les inputs/dossier du modèle qu'on a installé [12]
[14] On copie le modèle pré-entrainée dans le working directory, on n'oublie pas de modifier le attention head de 12 à 16
[15] Il affiche simplement le contenu du config.json
[16] Suppression du cache du dataset
[17 & 18] On lance le programme une première fois pour l'entrainée, puis pour testé
[19] Affichage du résultat storée dans le dossier output
[20, 21, 22] Affichage côte à côte de l'original et du modèle prédit. Les "box" de données intéressant sont encadré de différents couleurs, le reste en gris(ou autre, on les définis dans [21])
[23] Simple appel de la fonction crée dans [21]
Vendredis 10 nov
Site utilisé
Kaggle
paperwithCode
Mot clées :
Tickets
Bill (me retourne des lois)
Supermarket
sale
Beaucoup de csv, pas vraiment trouvé d'image datasets
A checker/lire :
https://github.com/google-research-datasets/clse/tree/main/data
https://huggingface.co/datasets/chainyo/rvl-cdip-invoice?row=0
Pour extraire des infos sur des invoices
https://medium.com/@rahul.anb24/extracting-structured-information-from-invoice-images-79666d1139fc
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment