Summarization
Transformers
Safetensors
English
longt5
text2text-generation
dialogue-summarization
Eval Results (legacy)
Instructions to use tuanhqv123/longt5-meeting-summarization with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use tuanhqv123/longt5-meeting-summarization with Transformers:
# Use a pipeline as a high-level helper # Warning: Pipeline type "summarization" is no longer supported in transformers v5. # You must load the model directly (see below) or downgrade to v4.x with: # 'pip install "transformers<5.0.0' from transformers import pipeline pipe = pipeline("summarization", model="tuanhqv123/longt5-meeting-summarization")# Load model directly from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("tuanhqv123/longt5-meeting-summarization") model = AutoModelForSeq2SeqLM.from_pretrained("tuanhqv123/longt5-meeting-summarization", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Fine-tune tiếp (max_input=4096, lr=5e-6, giữ #PersonN#)
Browse files- README.md +63 -24
- config.json +1 -1
- model.safetensors +1 -1
- special_tokens_map.json +21 -3
- tokenizer.json +1 -1
- tokenizer_config.json +4 -0
README.md
CHANGED
|
@@ -24,16 +24,13 @@ model-index:
|
|
| 24 |
metrics:
|
| 25 |
- type: rouge
|
| 26 |
name: ROUGE-1
|
| 27 |
-
value: 0.
|
| 28 |
- type: rouge
|
| 29 |
name: ROUGE-2
|
| 30 |
-
value: 0.
|
| 31 |
- type: rouge
|
| 32 |
name: ROUGE-L
|
| 33 |
-
value: 0.
|
| 34 |
-
- type: bertscore
|
| 35 |
-
name: BERTScore-F1
|
| 36 |
-
value: 0.8573
|
| 37 |
---
|
| 38 |
|
| 39 |
# LongT5 — Meeting Summarization
|
|
@@ -76,30 +73,38 @@ hf download tuanhqv123/longt5-meeting-summarization --local-dir ./best_model
|
|
| 76 |
|
| 77 |
## Evaluation
|
| 78 |
|
| 79 |
-
Held-out **test** set (
|
| 80 |
|
| 81 |
-
| Metric
|
| 82 |
-
|---------
|
| 83 |
-
| ROUGE-1
|
| 84 |
-
| ROUGE-2
|
| 85 |
-
| ROUGE-L
|
| 86 |
-
| BERTScore-F1 | 0.8573 |
|
| 87 |
-
| Test loss | 2.8342 |
|
| 88 |
|
| 89 |
-
|
| 90 |
|
| 91 |
-
|
| 92 |
-
|--------------|----------|----------------|
|
| 93 |
-
| ROUGE-1 | 0.4645 | **0.4687** |
|
| 94 |
-
| ROUGE-2 | 0.2454 | **0.2500** |
|
| 95 |
-
| ROUGE-L | 0.3991 | **0.4032** |
|
| 96 |
-
| BERTScore-F1 | 0.8567 | **0.8573** |
|
| 97 |
|
| 98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
|
| 100 |
## Training
|
| 101 |
|
| 102 |
-
**Data:** [`tuanhqv123/meeting-summarization`](https://huggingface.co/datasets/tuanhqv123/meeting-summarization)
|
| 103 |
|
| 104 |
| Setting | Value |
|
| 105 |
|----------------------|--------------------------------|
|
|
@@ -112,10 +117,44 @@ This checkpoint replaces a previous production model and **improves on every met
|
|
| 112 |
| Label smoothing | 0.1 |
|
| 113 |
| Precision | BF16 |
|
| 114 |
| Max input / output | 16,384 / 512 tokens |
|
| 115 |
-
| Data split | 3,757 train / 427 val / 342 test |
|
| 116 |
| Hardware | 1× NVIDIA RTX 4090 |
|
| 117 |
| Training time | ~3.7 h |
|
| 118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
### Validation ROUGE per epoch
|
| 120 |
|
| 121 |
| Epoch | ROUGE-1 | ROUGE-2 | ROUGE-L |
|
|
|
|
| 24 |
metrics:
|
| 25 |
- type: rouge
|
| 26 |
name: ROUGE-1
|
| 27 |
+
value: 0.5036
|
| 28 |
- type: rouge
|
| 29 |
name: ROUGE-2
|
| 30 |
+
value: 0.3323
|
| 31 |
- type: rouge
|
| 32 |
name: ROUGE-L
|
| 33 |
+
value: 0.4580
|
|
|
|
|
|
|
|
|
|
| 34 |
---
|
| 35 |
|
| 36 |
# LongT5 — Meeting Summarization
|
|
|
|
| 73 |
|
| 74 |
## Evaluation
|
| 75 |
|
| 76 |
+
Held-out **test** set, current dataset revision (478 examples), beam=4, ROUGE with stemming, `#PersonN#` tags normalized in post-processing:
|
| 77 |
|
| 78 |
+
| Metric | Score |
|
| 79 |
+
|---------|--------|
|
| 80 |
+
| ROUGE-1 | 0.5036 |
|
| 81 |
+
| ROUGE-2 | 0.3323 |
|
| 82 |
+
| ROUGE-L | 0.4580 |
|
|
|
|
|
|
|
| 83 |
|
| 84 |
+
### Per-source breakdown
|
| 85 |
|
| 86 |
+
The two halves of the corpus behave very differently — reported separately for honesty:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
+
| Source | ROUGE-1 | ROUGE-2 | ROUGE-L |
|
| 89 |
+
|-------------|---------|---------|---------|
|
| 90 |
+
| MeetingBank | 0.6048 | 0.5135 | **0.5895** |
|
| 91 |
+
| DialogSum | 0.4017 | 0.1515 | 0.3264 |
|
| 92 |
+
|
| 93 |
+
- **MeetingBank** drives the headline score (long council transcripts → short administrative summaries).
|
| 94 |
+
- **DialogSum** plateaus around ROUGE-L ≈ 0.33 — and the base checkpoint, the merged fine-tune, and a DialogSum-only fine-tune all land within ±0.006 of each other, so this is a **capacity ceiling of `tglobal-base` on conversational reasoning**, not a data or training-recipe issue. See `REPORT.md` §9–10 in the training repo.
|
| 95 |
+
|
| 96 |
+
### vs. base checkpoint (same 478-example test)
|
| 97 |
+
|
| 98 |
+
| Metric | base `./model` | **this fine-tune** |
|
| 99 |
+
|---------|----------------|--------------------|
|
| 100 |
+
| MeetingBank ROUGE-L | 0.528 | **0.590** |
|
| 101 |
+
| DialogSum ROUGE-L | 0.332 | 0.326 |
|
| 102 |
+
|
| 103 |
+
Fine-tuning improves MeetingBank by ~0.06 ROUGE-L while leaving DialogSum essentially unchanged.
|
| 104 |
|
| 105 |
## Training
|
| 106 |
|
| 107 |
+
**Data:** [`tuanhqv123/meeting-summarization`](https://huggingface.co/datasets/tuanhqv123/meeting-summarization) — a 50/50 hybrid of **DialogSum** (short 2-person chats) and **MeetingBank** (long municipal-council transcripts). Current dataset card: **5,896 train / 594 val / 478 test** (6,968 total, balanced 3,484 / 3,484 per source).
|
| 108 |
|
| 109 |
| Setting | Value |
|
| 110 |
|----------------------|--------------------------------|
|
|
|
|
| 117 |
| Label smoothing | 0.1 |
|
| 118 |
| Precision | BF16 |
|
| 119 |
| Max input / output | 16,384 / 512 tokens |
|
|
|
|
| 120 |
| Hardware | 1× NVIDIA RTX 4090 |
|
| 121 |
| Training time | ~3.7 h |
|
| 122 |
|
| 123 |
+
### Data analysis (measured on the current dataset card)
|
| 124 |
+
|
| 125 |
+
All numbers below are measured directly with this model's own tokenizer, not estimated.
|
| 126 |
+
|
| 127 |
+
**The two sources have wildly different lengths** — they are not one homogeneous corpus:
|
| 128 |
+
|
| 129 |
+
| Source | n | input tok (p50) | input tok (p99) | input tok (max) | output tok (p95) |
|
| 130 |
+
|--------|---|-----------------|-----------------|-----------------|------------------|
|
| 131 |
+
| DialogSum | 3,484 | 204 | 600 | 1,494 | 73 |
|
| 132 |
+
| MeetingBank | 3,484 | 1,304 | 33,742 | 84,354 | 201 |
|
| 133 |
+
|
| 134 |
+
**Where does the summary's information live in the transcript?** (answer-coverage on 400 MeetingBank samples — the position, in tokens, of the latest summary content-word found in the input):
|
| 135 |
+
|
| 136 |
+
| Truncate input at | % of summary content retained | % of meetings losing >20% |
|
| 137 |
+
|-------------------|-------------------------------|---------------------------|
|
| 138 |
+
| 2,048 | 95.8% | 7% |
|
| 139 |
+
| **4,096** | **97.9%** | **4%** |
|
| 140 |
+
| 8,192 | 99.2% | 2% |
|
| 141 |
+
| 16,384 | 99.8% | 0% |
|
| 142 |
+
|
| 143 |
+
- Summary content concentrates early: the latest-referenced token sits at **p50 = 402, p75 = 1,853** — MeetingBank, like most minutes, front-loads its recommendation/decision.
|
| 144 |
+
- **27.7%** of summary content-words never appear in the input at all (the targets are genuinely abstractive paraphrase, e.g. `"Recommendation to…"`), so 100% extractive coverage is impossible by construction.
|
| 145 |
+
- **Conclusion:** `max_input = 4096` is the right operating point — going to 16,384 buys only +1.9% coverage for 4× the compute. Long samples are **truncated, not dropped**, so all 6,967 training examples are retained.
|
| 146 |
+
|
| 147 |
+
### Preprocessing (deep clean)
|
| 148 |
+
|
| 149 |
+
Pipeline keeps **100%** of usable rows (6,968 → 6,967; only 1 exact duplicate removed). Per-step before/after counts are reproduced by [`deep_preprocess.py`](deep_preprocess.py):
|
| 150 |
+
|
| 151 |
+
- `html.unescape` + NFKC normalization, strip `{…}` annotations.
|
| 152 |
+
- Normalize unicode quotes/dashes → ASCII (557 outputs touched).
|
| 153 |
+
- **`#PersonN#` speaker tags are kept verbatim** to stay aligned with the original model's target format.
|
| 154 |
+
- Remove disfluencies on the input side only (5,174 inputs touched — mostly MeetingBank fillers).
|
| 155 |
+
- Filters: input ≥ 20 words, output 5–400 words, dedup on (input, output).
|
| 156 |
+
- Non-English content characters (`ñ`, `é`, `•`, …) are preserved where they are real proper nouns (only 15 remain).
|
| 157 |
+
|
| 158 |
### Validation ROUGE per epoch
|
| 159 |
|
| 160 |
| Epoch | ROUGE-1 | ROUGE-2 | ROUGE-L |
|
config.json
CHANGED
|
@@ -29,6 +29,6 @@
|
|
| 29 |
"relative_attention_num_buckets": 32,
|
| 30 |
"tie_word_embeddings": false,
|
| 31 |
"transformers_version": "4.57.3",
|
| 32 |
-
"use_cache":
|
| 33 |
"vocab_size": 32128
|
| 34 |
}
|
|
|
|
| 29 |
"relative_attention_num_buckets": 32,
|
| 30 |
"tie_word_embeddings": false,
|
| 31 |
"transformers_version": "4.57.3",
|
| 32 |
+
"use_cache": false,
|
| 33 |
"vocab_size": 32128
|
| 34 |
}
|
model.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 1187780840
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e264bcbdeee99abea5a5fedba0ae6c42e0c06e52084fc5debe567ff59e17159c
|
| 3 |
size 1187780840
|
special_tokens_map.json
CHANGED
|
@@ -101,7 +101,25 @@
|
|
| 101 |
"<extra_id_98>",
|
| 102 |
"<extra_id_99>"
|
| 103 |
],
|
| 104 |
-
"eos_token":
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
}
|
|
|
|
| 101 |
"<extra_id_98>",
|
| 102 |
"<extra_id_99>"
|
| 103 |
],
|
| 104 |
+
"eos_token": {
|
| 105 |
+
"content": "</s>",
|
| 106 |
+
"lstrip": false,
|
| 107 |
+
"normalized": false,
|
| 108 |
+
"rstrip": false,
|
| 109 |
+
"single_word": false
|
| 110 |
+
},
|
| 111 |
+
"pad_token": {
|
| 112 |
+
"content": "<pad>",
|
| 113 |
+
"lstrip": false,
|
| 114 |
+
"normalized": false,
|
| 115 |
+
"rstrip": false,
|
| 116 |
+
"single_word": false
|
| 117 |
+
},
|
| 118 |
+
"unk_token": {
|
| 119 |
+
"content": "<unk>",
|
| 120 |
+
"lstrip": false,
|
| 121 |
+
"normalized": false,
|
| 122 |
+
"rstrip": false,
|
| 123 |
+
"single_word": false
|
| 124 |
+
}
|
| 125 |
}
|
tokenizer.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
"version": "1.0",
|
| 3 |
"truncation": {
|
| 4 |
"direction": "Right",
|
| 5 |
-
"max_length":
|
| 6 |
"strategy": "LongestFirst",
|
| 7 |
"stride": 0
|
| 8 |
},
|
|
|
|
| 2 |
"version": "1.0",
|
| 3 |
"truncation": {
|
| 4 |
"direction": "Right",
|
| 5 |
+
"max_length": 256,
|
| 6 |
"strategy": "LongestFirst",
|
| 7 |
"stride": 0
|
| 8 |
},
|
tokenizer_config.json
CHANGED
|
@@ -932,8 +932,12 @@
|
|
| 932 |
"eos_token": "</s>",
|
| 933 |
"extra_ids": 100,
|
| 934 |
"extra_special_tokens": {},
|
|
|
|
| 935 |
"model_max_length": 1000000000000000019884624838656,
|
| 936 |
"pad_token": "<pad>",
|
|
|
|
| 937 |
"tokenizer_class": "T5Tokenizer",
|
|
|
|
|
|
|
| 938 |
"unk_token": "<unk>"
|
| 939 |
}
|
|
|
|
| 932 |
"eos_token": "</s>",
|
| 933 |
"extra_ids": 100,
|
| 934 |
"extra_special_tokens": {},
|
| 935 |
+
"max_length": 512,
|
| 936 |
"model_max_length": 1000000000000000019884624838656,
|
| 937 |
"pad_token": "<pad>",
|
| 938 |
+
"stride": 0,
|
| 939 |
"tokenizer_class": "T5Tokenizer",
|
| 940 |
+
"truncation_side": "right",
|
| 941 |
+
"truncation_strategy": "longest_first",
|
| 942 |
"unk_token": "<unk>"
|
| 943 |
}
|