KoBART-summarization
Load KoBART
- huggingface.coμ μλ binaryλ₯Ό νμ©
Download binary
import torch
from transformers import PreTrainedTokenizerFast
from transformers import BartForConditionalGeneration
tokenizer = PreTrainedTokenizerFast.from_pretrained('digit82/kobart-summarization')
model = BartForConditionalGeneration.from_pretrained('digit82/kobart-summarization')
text = """
1μΌ μ€ν 9μκΉμ§ μ΅μ 20λ§3220λͺ
μ΄ μ½λ‘λ19μ μ κ· νμ§λλ€. λλ€μ λμκ°λ μ΅λ€ κΈ°λ‘μΌλ‘, μ¬μ μ²μ 20λ§λͺ
λμ μ§μ
νλ€.
λ°©μ λΉκ΅κ³Ό μμΈμ λ± κ° μ§λ°©μμΉλ¨μ²΄μ λ°λ₯΄λ©΄ μ΄λ 0μλΆν° μ€ν 9μκΉμ§ μ κ΅ μ κ· νμ§μλ μ΄ 20λ§3220λͺ
μΌλ‘ μ§κ³λλ€.
κ΅λ΄ μ κ· νμ§μ μκ° 20λ§λͺ
λλ₯Ό λμ΄μ κ²μ μ΄λ²μ΄ μ²μμ΄λ€.
λμκ°λ μ΅λ€ κΈ°λ‘μ μ§λ 23μΌ μ€ν 9μ κΈ°μ€ 16λ§1389λͺ
μ΄μλλ°, μ΄λ₯Ό λ¬΄λ € 4λ§1831λͺ
μ΄λ μλμλ€. μ λ κ°μ μκ° κΈ°λ‘ν 13λ§3481λͺ
보λ€λ 6λ§9739λͺ
λ§λ€.
νμ§μ νμ¦μ 3μκ° μ μΈ μ€ν 6μ μ§κ³μμλ μ견λλ€.
μ€ν 6μκΉμ§ μ΅μ 17λ§8603λͺ
μ΄ μ κ· νμ§λΌ λμκ°λ μ΅λ€ κΈ°λ‘(24μΌ 13λ§8419λͺ
)μ κ°μμΉμ΄ λ° μ΄μ΄ μ΄λ―Έ μ§μ 0μ κΈ°μ€ μλ μ΅λ€ κΈ°λ‘λ λμ΄μ°λ€. μλ μ΅λ€ κΈ°λ‘μ μ§λ 23μΌ 0μ κΈ°μ€ 17λ§1451λͺ
μ΄μλ€.
17κ° μ§μ체λ³λ‘ 보면 μμΈ 4λ§6938λͺ
, κ²½κΈ° 6λ§7322λͺ
, μΈμ² 1λ§985λͺ
λ± μλκΆμ΄ 12λ§5245λͺ
μΌλ‘ μ 체μ 61.6%λ₯Ό μ°¨μ§νλ€. μμΈκ³Ό κ²½κΈ°λ λͺ¨λ λμκ°λ κΈ°μ€ μ΅λ€λ‘, μ²μμΌλ‘ κ°κ° 4λ§λͺ
κ³Ό 6λ§λͺ
μ λμ΄μ°λ€.
λΉμλκΆμμλ 7λ§7975λͺ
(38.3%)μ΄ λ°μνλ€. μ μ£Όλ₯Ό μ μΈν λλ¨Έμ§ μ§μμμ λͺ¨λ λμκ°λ μ΅λ€λ₯Ό μλ‘ μΌλ€.
λΆμ° 1λ§890λͺ
, κ²½λ¨ 9909λͺ
, λꡬ 6900λͺ
, κ²½λΆ 6977λͺ
, μΆ©λ¨ 5900λͺ
, λμ 5292λͺ
, μ λΆ 5150λͺ
, μΈμ° 5141λͺ
, κ΄μ£Ό 5130λͺ
, μ λ¨ 4996λͺ
, κ°μ 4932λͺ
, μΆ©λΆ 3845λͺ
, μ μ£Ό 1513λͺ
, μΈμ’
1400λͺ
μ΄λ€.
μ§κ³λ₯Ό λ§κ°νλ μμ κΉμ§ μκ°μ΄ λ¨μμλ λ§νΌ 2μΌ 0μ κΈ°μ€μΌλ‘ λ°νλ μ κ· νμ§μ μλ μ΄λ³΄λ€ λ λμ΄λ μ μλ€. μ΄μ λ°λΌ μ΅μ’
μ§κ³λλ νμ§μ μλ 21λ§λͺ
μνμ κΈ°λ‘ν μ μμ μ λ§μ΄λ€.
ννΈ μ λ ν루 μ λ³μ§λ£μμμ μ΄λ€μ§ κ²μ¬λ 70λ§8763건μΌλ‘ κ²μ¬ μμ±λ₯ μ 40.5%λ€. μμ±λ₯ μ΄ 40%λ₯Ό λμ κ²μ μ΄λ²μ΄ μ²μμ΄λ€. νμ°μΈκ° κ³μ κ±°μΈμ§ μ μλ€λ μκΈ°λ€.
μ΄λ 0μ κΈ°μ€ μ κ· νμ§μλ 13λ§8993λͺ
μ΄μλ€. μ΄ν μ°μ 13λ§λͺ
λλ₯Ό μ΄μ΄κ°λ€.
"""
text = text.replace('\n', ' ')
raw_input_ids = tokenizer.encode(text)
input_ids = [tokenizer.bos_token_id] + raw_input_ids + [tokenizer.eos_token_id]
summary_ids = model.generate(torch.tensor([input_ids]), num_beams=4, max_length=512, eos_token_id=1)
tokenizer.decode(summary_ids.squeeze().tolist(), skip_special_tokens=True)
'1μΌ 0 9μκΉμ§ μ΅μ 20λ§3220λͺ
μ΄ μ½λ‘λ19μ μ κ· νμ§λμ΄ μλ μ΅λ€ κΈ°λ‘μ κ°μμΉμ λ€.'
Requirements
pytorch>=1.10.0
transformers==4.16.2
pytorch-lightning==1.5.10
streamlit==1.2.0
Data
- Dacon νκ΅μ΄ λ¬Έμ μμ±μμ½ AI κ²½μ§λν μ νμ΅ λ°μ΄ν°λ₯Ό νμ©ν¨
- νμ΅ λ°μ΄ν°μμ μμλ‘ Train / Test λ°μ΄ν°λ₯Ό μμ±ν¨
- λ°μ΄ν° νμμ μ©μ΄νκ² tsv ννλ‘ λ°μ΄ν°λ₯Ό λ³νν¨
- Data ꡬ쑰
- Train Data : 34,242
- Test Data : 8,501
- defaultλ‘ data/train.tsv, data/test.tsv ννλ‘ μ μ₯ν¨
news |
summary |
λ΄μ€μλ¬Έ |
μμ½λ¬Έ |
How to Train
- KoBART summarization fine-tuning
pip install -r requirements.txt
[use gpu]
python train.py --gradient_clip_val 1.0 \
--max_epochs 50 \
--default_root_dir logs \
--gpus 1 \
--batch_size 4 \
--num_workers 4
[use gpu]
python train.py --gradient_clip_val 1.0 \
--max_epochs 50 \
--default_root_dir logs \
--strategy ddp \
--gpus 2 \
--batch_size 4 \
--num_workers 4
[use cpu]
python train.py --gradient_clip_val 1.0 \
--max_epochs 50 \
--default_root_dir logs \
--strategy ddp \
--batch_size 4 \
--num_workers 4
Generation Sample
|
|
Text |
1 |
Label |
νμμ 'μ±λΉ νμμλμ€ λ©νΈλ‘'λͺ¨λΈνμ°μ€λ μ΄μμΈκΆ μ
μ§μ λ³ννλ λΌμ΄νμ€νμΌμ λ§μΆ νμ νλ©΄μΌλ‘ μ€ν λΉμΌλΆν° κ΄λκ°μ μ€μ΄ μ΄μ΄μ§λ©΄μ κ΄λκ°μ νΈνμ λ°μλ€. |
1 |
koBART |
μννΈ λΆμμμ₯μ΄ μ€μμμ μ€μ¬μΌλ‘ λ°λλ©΄μ μ΄μμΈκΆ μ
μ§μ λ³ννλ λΌμ΄νμ€νμΌμ λ§μΆ νμ νλ©΄μ΄ μννΈ μ νμ λ―ΈμΉλ μν₯λ ₯μ΄ μ»€μ§κ³ μλ κ°μ΄λ°, νμμ΄ μ§λ 22μΌ κ³΅κ°ν βμ±λΉ νμμλμ€ λ©νΈλ‘β λͺ¨λΈνμ°μ€λ₯Ό μ°Ύμ λ°©λ¬Έκ°λ€μ ν©λ¦¬μ μΈ λΆμκ°μ μ€λκΈλ¬΄μ΄μ λ±μ λΆμ쑰건λ μ€μμμμκ² μ λ¦¬ν΄ λμ μ²μ½κ²½μλ₯ μ κΈ°λνλ€. |
|
|
Text |
2 |
Label |
κ΄μ£Όμ§λ°©κ΅μΈμ²μ 'μμνκ³ ν¬μ©νλ μΈμ ꡬνμ μν' νμ μ±μ₯ κΈ°μ
μΈμ μ§μ μ€λͺ
νλ₯Ό μ΄μ΄ μ¬λ¬ μΈμ μ§μ μ λλ₯Ό μλ΄νκ³ κΈ°μ
νμ₯μ μ λ‘, 건μμ¬νμ κ²½μ²νλ©° κΈ°μ
λ§μΆ€ν μΈμ μλΉμ€λ₯Ό μ 곡ν κ²μ μ½μνλ€. |
2 |
koBART |
17μΌ κ΄μ£Όμ§λ°©κ΅μΈμ²μ μ λΆκ΄μ£Όμ§λ°©ν©λμ²μ¬ 3μΈ΅ μΈλ―Έλμ€μμ νμ μ±μ₯ κ²½μ μ μ±
μ μΈμ μ°¨μμμ λ·λ°μΉ¨νκΈ° μν΄ λ€μν μΈμ μ§μ μ λλ₯Ό μλ΄νλ λμμ κΈ°μ
νμ₯μ μ λ‘·건μμ¬νμ κ²½μ²νκΈ° μν΄ βμμνκ³ ν¬μ©νλ μΈμ ꡬνμ μνβ νμ μ±μ₯ κΈ°μ
μΈμ μ§μ μ€λͺ
νλ₯Ό μ΄μ΄ μ£Όλͺ©μ λμλ€.' |
|
|
Text |
3 |
Label |
μ μ©λ³΄μ¦κΈ°κΈ λ± 3κ° κΈ°κ΄μ 31μΌ μμΈ μ€κ΅¬ κΈ°μ
μν λ³Έμ μμ μ΅κ·Ό κ²½μμ μ΄λ €μμ κ²ͺλ μμκ³΅μΈ λ±μ κΈμ΅λΉμ© λΆλ΄μ μ€μ΄κ³ μλ―Όκ²½μ μ νλ ₯μ μ£ΌκΈ° μν΄ 'μμ곡μΈ. μμμ
μ νΉλ³ κΈμ΅μ§μ μ
무νμ½'μ 체결νλ€κ³ μ νμΌλ©° μ§μλμμ νμν 쑰건μ κ°μΆ μμΆμ€μκΈ°μ
, μ λ§μ°½μ
κΈ°μ
λ±μ΄λ€. |
3 |
koBART |
μ΅κ·Ό κ²½μμ λ‘λ₯Ό κ²ͺκ³ μλ μμ곡μΈκ³Ό μμμ
μμ κΈμ΅λΉμ© λΆλ΄μ μννκ³ μλ―Όκ²½μ μ νλ ₯μ μ κ³ νκΈ° μν΄ μ μ©λ³΄μ¦κΈ°κΈΒ·κΈ°μ 보μ¦κΈ°κΈΒ·μ μ©λ³΄μ¦μ¬λ¨ μ€μνΒ·κΈ°μ
μνμ 31μΌ μμΈ μ€κ΅¬ κΈ°μ
μν λ³Έμ μμ βμμ곡μΈΒ·μμμ
μ νΉλ³ κΈμ΅μ§μ μ
무νμ½βμ 체결νλ€. |
Model Performance
- Test Data κΈ°μ€μΌλ‘ rouge scoreλ₯Ό μ°μΆν¨
- Score μ°μΆ λ°©λ²μ Dacon νκ΅μ΄ λ¬Έμ μμ±μμ½ AI κ²½μ§λν metricμ νμ©ν¨
|
rouge-1 |
rouge-2 |
rouge-l |
Precision |
0.515 |
0.351 |
0.415 |
Recall |
0.538 |
0.359 |
0.440 |
F1 |
0.505 |
0.340 |
0.415 |
Demo
- νμ΅ν model binary μΆμΆ μμ
μ΄ νμν¨
- pytorch-lightning binary --> huggingface binaryλ‘ μΆμΆ μμ
νμ
- hparamsμ κ²½μ°μλ ./logs/tb_logs/default/version_0/hparams.yaml νμΌμ νμ©
- model_binary μ κ²½μ°μλ ./logs/kobart_summary-model_chp μμ μλ .ckpt νμΌμ νμ©
- λ³ν μ½λλ₯Ό μ€ννλ©΄ ./kobart_summary μ model binary κ° μΆμΆ λ¨
python get_model_binary.py --hparams hparam_path --model_binary model_binary_path
- streamlitμ νμ©νμ¬ Demo μ€ν
Reference