Views
No views yet
transformers and qwen_vl_utils:1from transformers import AutoProcessor, AutoModelForMultimodalLM
2from qwen_vl_utils import process_vision_info
3from pathlib import Path
4import torch
5
6# Load QWEN
7model = AutoModelForMultimodalLM.from_pretrained(
8 "starride-teklia/DAI-NER-flat",
9 torch_dtype=torch.bfloat16,
10 attn_implementation="flash_attention_2",
11 device_map="auto",
12)
13processor = AutoProcessor.from_pretrained("starride-teklia/DAI-NER-flat")
14
15# Prompt
16SYSTEM = Path("system.txt").read_text() # Available in the model directory
17IMAGE = "record.jpg" # https://europe.iiif.teklia.com/iiif/2/geneanet%2FArdennes_BMS%2F379692%2F00100.jpg/1425,793,1252,284/full/0/default.jpg
18HTR_TRANSCRIPTION = "Mort de Pierre Soyer gardien de la redoutte du prez d'an...gne et ligne de cette frontiere\n\nL'an mil sept cens et neuf le vingt neuvième jour du mois de jeanvier a esté decedée en cette paroisse Pierre Soyer gardien au pre d'A[...]gne de la paroisse d'Aumont agee de quarante deux ans ou environs lequel a esté inhumé le trantième dudit mois dans le cimetier de cette paroisse ou nous lavons conduit avec les ceremonies accoustumée en présence avec les témoins qui ont signé avec nous\n\nJames Gileux T Stenva prb Mathieu Lallement."
19
20messages = [
21 {
22 "role": "system",
23 "content": [
24 {
25 "type": "text",
26 "text": SYSTEM
27 }
28 ]
29 },
30 {
31 "role": "user",
32 "content": [
33 {
34 "type": "image",
35 "image": "record.jpg"
36 },
37 {
38 "type": "text",
39 "text": f"Convert this record in JSON. To help you, here is the transcription produced by an OCR model: {HTR_TRANSCRIPTION}"
40 },
41 ],
42 }
43]
44
45# Preparation for inference
46text = processor.apply_chat_template(
47 messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
48)
49image_inputs, video_inputs = process_vision_info(messages)
50inputs = processor(
51 text=[text],
52 images=image_inputs,
53 videos=video_inputs,
54 padding=True,
55 return_tensors="pt",
56)
57inputs = inputs.to("cuda")
58
59# Inference: Generation of the output
60generated_ids = model.generate(**inputs, max_new_tokens=1024)
61generated_ids_trimmed = [
62 out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
63]
64output_text = processor.batch_decode(
65 generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
66)[0]
67print(output_text)
68{"événements.décès.année": "mil sept cens et neuf", "événements.décès.jour": "vingt neuvième", "événements.décès.mois": "janvier", "événements.décès.lieu": "en cette paroisse", "événements.acte.jour": "trantième", "événements.acte.mois": "dudit mois", "individus.défunt.prénom": "Pierre", "individus.défunt.nom": "Soyer", "individus.défunt.profession": "gardien au pre d'A[...]gne", "individus.défunt.âge": "quarante deux ans ou environs", "individus.défunt.paroisse": "d'Aumont", "individus.officiant.nom": "Mathieu Lallement"}