๊ฒฐ๊ณผ ๋ชจ๋ธ์ ์ฉ๋์ผ๋ก ์ธํด git upload๊ฐ ๋ถ๊ฐํ์ฌ huggingface์ ์ ๋ก๋ ํ์์ต๋๋ค
Result_Model : VIE_TASK_v5
๋ณธ ํ๋ก์ ํธ๋ ๋ฌธ์ ์ดํด ๋ถ์ผ์ ํต์ฌ ๊ณผ์ ์ธ ์ ๋ณด ์ถ์ถ(Information Extraction) ํ์คํฌ๋ฅผ ๋ค๋ฃน๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋ ์์์ฆ ๋ฌธ์์์ ํ์ฌ๋ช , ๋ ์ง, ์ฃผ์, ์ด์ก๊ณผ ๊ฐ์ ํต์ฌ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ์ถ์ถํ๋ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ๊ฐ๋ฐํ์ฌ, ๋ฌธ์ ์ฒ๋ฆฌ ์๋ํ์ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ์ ๊ฐ์ถ ๋ชจ๋ธ์ ๋ชฉํ๋ก ํ์์ต๋๋ค.
์ด๋ฅผ ์ํด ์ต์ ๋ฌธ์ ์ดํด ๋ชจ๋ธ์ธ LayoutLMv3๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ, ํ ์คํธ ์ ๋ณด์ ๊ณต๊ฐ ์ ๋ณด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌํ์ต๋๋ค. Sliding Window ๊ธฐ๋ฒ์ ๋์ ๊ณผ ๋ฐ์ดํฐ ํ์ง ๊ฐ์ ์ ํตํด, ์ค์ ์ ๋ฌด ํ๊ฒฝ์์ ํ์ฉ ๊ฐ๋ฅํ ์์ค์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ์งํํ์์ต๋๋ค. ์ต์ข ์ ์ผ๋ก F1 ์ ์ 84.96, ์ ํ๋(EM) 50.43์ ๋ฌ์ฑํ์์ต๋๋ค.
-
์ ๋ ฅ ๋ฐ์ดํฐ
- ๋จ์ด์ ๋ํ ์ ๋ณด
- normalised bounding box ์ขํ ์ ๋ณด
- ์ด๋ฏธ์ง ์ ๋ณด
-
์ถ์ถ ๋์(label) ์ ๋ณด
- Company
- Date
- Address
- Total
- Others
- LayoutLMv3 ๋ชจ๋ธ Fine-tuning
- Sliding Window ๊ธฐ๋ฒ ์ ์ฉ
- ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ํ์ง ๊ฐ์
๋ฒ์ | F1 | EM | EM_no_space | ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ |
---|---|---|---|---|
v1 | 76.7090 | 36.1671 | 36.1671 | ๊ธฐ๋ณธ ๊ตฌํ |
v2 | 80.6816 | 50.0000 | 50.0000 | ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ์ , ํ์ต ํ๋ผ๋ฏธํฐ ์กฐ์ |
v3 | 80.4974 | 49.7839 | 49.7839 | max_length ํ์ฅ ์๋ |
v4 | 84.9540 | 50.9366 | 50.9366 | ์ถ๋ก ์ Sliding Window ์ ์ฉ |
v5 | 84.9650 | 50.4323 | 50.4323 | ํ์ต ์ Sliding Window ์ ์ฉ |
v6 | 83.7073 | 52.0173 | 52.0173 | ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ํ์ง ๊ฐ์ |
-
์ฑ๋ฅ ํฅ์ ์ถ์ด
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ์ ์ผ๋ก ์ด๊ธฐ F1 ์ ์ 76.7์์ 80.6์ผ๋ก ํฅ์
- Sliding Window ๋์ ์ผ๋ก f1 score - 84.96๊น์ง ๊ฐ์
- ๋ฐ์ดํฐ ํ์ง ๊ฐ์ ์ผ๋ก em score - 52.01 ๋ฌ์ฑ
-
์ฃผ์ ๊ฐ์ ์
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์ต์ ํ
- ํ ํฐ ์ฒ๋ฆฌ ์ ํ ๋ฌธ์ ํด๊ฒฐ
- ๋ผ๋ฒจ๋ง ํ์ง ํฅ์
- ๊ฐ๋ฐ ํ๋ซํผ: Google Colab
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ: CPU ํ๊ฒฝ
- ๋ชจ๋ธ ํ์ต/์ถ๋ก : GPU(L4) ํ๊ฒฝ
- transformers==4.46.2
- torch==2.5.1+cu121
- datasets==3.1.0
- huggingface-hub==0.26.2
- seqeval==1.2.2
- sentence-transformers==3.2.1
Visual_information/extraction/
โโโ look_data.ipynb - ๋ฐ์ดํฐ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ํด๋น ๋
ธํธ๋ถ์ ์์ฑํ์์ต๋๋ค.
โโโ making_dataset&modify_dataset.ipynb - ์ ๊ณต๋ *.txt ํ์ผ๊ณผ img ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด์ Dataset์ ์์ฑํ์์ต๋๋ค. ๋ํ ํ๋ จ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ํ ์์
์ ์งํํ์์ต๋๋ค.
โโโ model_training_main.ipynb - ๋ฐ์ดํฐ ํ๋ จ ๊ณผ์ ์ ๋ํ ์ฝ๋์
๋๋ค.
โโโ data/
โโโ train/
โโโ entities/
โโโ img/
โโโ test/
โโโ entities/
โโโ img/
โโโ op_test.txt
โโโ op_test_box.txt
โโโ op_test_image.txt
โโโ train.txt
โโโ train_box.txt
โโโ train_image.txt
โโโ test.txt
โโโ test_box.txt
โโโ test_image.txt
making_dataset.ipynb
๋ฐ์ดํฐ์ ์์ฑ ๋ฐ ์ ์ฒ๋ฆฌ ๊ณผ์
# ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
!pip install transformers datasets seqeval
!git lfs install
# ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ
def validate_data():
for target in ['train', 'test', 'op_test']:
# ๊ฐ ๋ฐ์ดํฐ ํ์ผ ๋น๊ต ๊ฒ์ฆ
# - image_path: ๋ฐ์ด๋ฉ ๋ฐ์ค ์ขํ
# - text_path: ํ
์คํธ ๋ฐ ๋ผ๋ฒจ
# - box_path: ์ ๊ทํ๋ ์ขํ
def create_dataset(target_type):
"""ํ์ต/ํ
์คํธ ๋ฐ์ดํฐ์
์์ฑ"""
dataset = []
# ํ์ผ ๊ฒฝ๋ก ์ค์
txt_path = f"data/{target_type}.txt"
box_path = f"data/{target_type}_box.txt"
image_path = f"data/{target_type}_image.txt"
# ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ์ฒ๋ฆฌ
- words: ํ
์คํธ ์ ๋ณด
- bboxes: ๋ฐ์ด๋ฉ ๋ฐ์ค ์ขํ
- norm_bboxes: ์ ๊ทํ๋ ์ขํ
- labels: BIO ํ๊น
์ ๋ณด
# JSON ํ์์ผ๋ก ์ ์ฅ
save_to_json(f"{target_type}_dataset.json")
def enhance_dataset():
# 1. ๊ณต๊ฐ ์ ๋ณด ํ์ฉ
def group_by_lines(words, bboxes, y_threshold=5):
"""์ธ๋ก ์์น ๊ธฐ๋ฐ ๋ผ์ธ ๊ทธ๋ฃนํ"""
# y์ขํ ๊ธฐ๋ฐ ํ
์คํธ ๋ผ์ธ ์๋ณ
# ๋์ผ ๋ผ์ธ ๋ด ๋จ์ด ์ ๋ ฌ
# 2. ์ํฐํฐ๋ณ ๋งค์นญ ๊ท์น
def find_company_line(lines, company):
"""ํ์ฌ๋ช
์๋ณ ๊ท์น"""
# ๋ฌธ์ ์๋จ ์์น
# ํน์ ํค์๋ ํ์ฉ
def find_address_line(lines, address):
"""์ฃผ์ ์๋ณ ๊ท์น"""
# ์์์ : NO., LOT, JALAN ๋ฑ
# ์ข
๋ฃ์ : MALAYSIA, DARUL EHSAN
# ์ค๋จ์ : TEL, FAX, EMAIL
def find_date_line(lines, target_date):
"""๋ ์ง ์๋ณ ๊ท์น"""
# ๋ ์ง ํฌ๋งท ํจํด ๋งค์นญ
def find_total_line(lines, total):
"""์ด์ก ์๋ณ ๊ท์น"""
# TOTAL, AMOUNT ํค์๋
# ์ซ์ ํฌ๋งท ๊ฒ์ฆ
def convert_to_hf_dataset():
# ๋ฐ์ดํฐ์
ํน์ฑ ์ ์
features = Features({
'image': Image(),
'label': Sequence(...),
'words': Sequence(...),
'bbox': Array2D(...),
})
# Dataset ๊ฐ์ฒด ์์ฑ
train_dataset = Dataset.from_dict(...)
eval_dataset = Dataset.from_dict(...)
# Hugging Face Hub ์
๋ก๋
dataset.push_to_hub("Dongwookss/SROIE")
model_training_main.ipynb
๋ชจ๋ธ ํ์ต ๋ฐ ์ถ๋ก ๊ณผ์
# ๋ฐ์ดํฐ์
๋ก๋
dataset = load_dataset("Dongwookss/SROIE_lb1")
processor = AutoProcessor.from_pretrained("microsoft/layoutlmv3-base")
# ๋ผ๋ฒจ ์ ์
label_list = ["S-COMPANY", "S-DATE", "S-ADDRESS", "S-TOTAL", "O"]
id2label = {k: v for k,v in enumerate(label_list)}
def prepare_examples(examples, window_size=384, stride=192):
"""Sliding Window ์ ์ฉ ๋ฐ์ดํฐ ์ฒ๋ฆฌ"""
# ์
๋ ฅ ์ฒ๋ฆฌ
- ์ด๋ฏธ์ง ํฌ๋งท ๋ณํ (RGB)
- ํ
์คํธ ํ ํฐํ
- ๋ฐ์ด๋ฉ ๋ฐ์ค ์ ๊ทํ
# Sliding Window ์ ์ฉ
- window_size=384๋ก ๋ฌธ์ ๋ถํ
- stride=192๋ก ์ค์ฒฉ ์์ญ ์ค์
- ํ ํฐํ ๋ฐ ํจ๋ฉ ์ฒ๋ฆฌ
# ๊ฒฐ๊ณผ ํฌ๋งท
- pixel_values
- input_ids
- attention_mask
- bbox
- labels
# ํ์ต ์ค์
training_args = TrainingArguments(
output_dir="test",
max_steps=1500,
per_device_train_batch_size=2,
learning_rate=2e-5,
evaluation_strategy="steps",
eval_steps=100,
metric_for_best_model="f1"
)
# ํ๊ฐ ๋ฉํธ๋ฆญ
def compute_metrics(p):
"""seqeval ๊ธฐ๋ฐ ์ฑ๋ฅ ํ๊ฐ"""
- precision
- recall
- f1
- accuracy
# ๋ชจ๋ธ ํ์ต
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
compute_metrics=compute_metrics
)
trainer.train()
def process_with_sliding_window(example, model, processor):
"""Sliding Window ๊ธฐ๋ฐ ์ถ๋ก """
# ์๋์ฐ ์ฒ๋ฆฌ
def safe_process_window():
# ๋จ์ผ ์๋์ฐ ์ฒ๋ฆฌ
# word_ids ์ถ์
# ์์ธก ๊ฒฐ๊ณผ ์ ์ฅ
# ์ ์ฒด ๋ฌธ์ ์ฒ๋ฆฌ
- ์ฒซ ๋ฒ์งธ ์๋์ฐ ์ฒ๋ฆฌ
- ๋ฏธ์ฒ๋ฆฌ ๋จ์ด ํ์ธ
- ๋ ๋ฒ์งธ ์๋์ฐ ์ฒ๋ฆฌ
- ๊ฒฐ๊ณผ ๋ณํฉ
# ํ์ฒ๋ฆฌ
- ์์ธก ๋ผ๋ฒจ ์ ๋ฆฌ
- ๊ฒฐ๊ณผ ํฌ๋งทํ
- CSV ํ์ผ ์ ์ฅ
def save_and_upload():
"""๋ชจ๋ธ ์ ์ฅ ๋ฐ Hugging Face Hub ์
๋ก๋"""
# ๋ชจ๋ธ ์ ์ฅ
trainer.save_model()
# Hugging Face Hub ์
๋ก๋
upload_folder_to_huggingface(
folder_path="test/checkpoint-1500",
repo_id="Dongwookss/vie_task",
token=HF_TOKEN
)
-
๋ฐ์ดํฐ ๋ถ์
- ์ข์ ๋ชจ๋ธ์ ์ํด์๋ ์ข์ ๋ฐ์ดํฐ์ ์ด ํ์ํ๋ค๊ณ ์๊ฐํ์์ต๋๋ค.
- txt ํ์ผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ์
์ ์์ฑํ๊ณ ์ง์ ๋ณด๋ฉฐ label์ด ์ ๋์ด์๋์ง ํ์ธํ์์ผ๋
์ด๊ธฐ์ ๋ฐ๊ฒฌ๋ณด๋ค ๋์ค์ ๋ฐ์ดํฐ์ ์ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ฒ ๋์์ต๋๋ค. - ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ํ์ง ๋ถ์ ์งํ - look_data.ipynb๋ฅผ ํ์ฉํ์ฌ ์ง์ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ํ์ธ
- ๋ฐ์ดํฐ label์ ์ ํ๋๊ฐ ๋ฎ์ ์ ์ ํ์ธ
- ๋ผ๋ฒจ๋ง ํจํด ๋ถ์
-
๋ชจ๋ธ ์ ์
ํน์ฑ | LayoutLM | LayoutLMv2 | LayoutLMv3 |
---|---|---|---|
๊ธฐ๋ณธ ๊ตฌ์กฐ | BERT ๊ธฐ๋ฐ + 2D ์์น ์๋ฒ ๋ฉ | LayoutLM + ์๊ฐ์ ์๋ฒ ๋ฉ | Transformer ๊ธฐ๋ฐ ํตํฉ ์ํคํ ์ฒ |
์ฃผ์ ํน์ง | - ํ
์คํธ์ ๋ ์ด์์ ์ ๋ณด ํตํฉ - ๋จ์ํ ๊ตฌ์กฐ |
- ์๊ฐ์ ๋ฐฑ๋ณธ ๋์
- ํ ์คํธ-์ด๋ฏธ์ง ์ ๋ ฌ |
- ๋จ์ผ ๋ค์ค ๋ชจ๋ฌ ์ธ์ฝ๋ - WPA(Word-Patch Alignment) |
์ฅ์ | - ํ์ต ํจ์จ์ฑ ๋์ - ๋น ๋ฅธ ์ถ๋ก ์๋ |
- ์ด๋ฏธ์ง ํน์ง ํ์ฉ - ํฅ์๋ ์ฑ๋ฅ |
- ํจ์จ์ ์ธ ํตํฉ ์ฒ๋ฆฌ - ์ต๊ณ ์์ค์ ์ฑ๋ฅ - ๊ณ์ฐ ์์ ํจ์จ์ฑ |
ํ๊ณ์ | - ์ด๋ฏธ์ง ํน์ง ๋ฏธํ์ฉ - ์ ํ์ ๋ชจ๋ธ๋ง |
- ๋ณต์กํ ๊ตฌ์กฐ - ๋์ ํ์ต ๋น์ฉ |
- ํฐ ๋ชจ๋ธ ํฌ๊ธฐ - ๋์ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋ |
์ฑ๋ฅ | Form Understanding FUNSD: 79.3% |
Form Understanding FUNSD: 82.8% |
Form Understanding FUNSD: 85.4% |
์ ์ ์ฌ๋ถ | โ | โ | โ |
์ ์ ์ด์ | - | - | - ๋จ์ผ ์ธ์ฝ๋ ํจ์จ์ฑ - ํฅ์๋ ์ ๋ณด ํตํฉ - ์ต์ ์ฌ์ ํ์ต ๊ธฐ๋ฒ - SOTA ์ฑ๋ฅ |
- Fine-tuning์ ํ์์ฑ
ํน์ฑ | LayoutLMv3 (base) | LayoutLMv3 (fine-tuned) |
---|---|---|
์ฑ๋ฅ | F1: 9.64 EM: 0.00 EM_no_space: 0.00 |
F1: 84.96 EM: 50.43 EM_no_space: 50.43 |
๋ถ์ | - ์ฌ์ ํ์ต๋ง ๋ ์ํ - SROIE ํ์คํฌ์ ๋ํ ํ๋ จ ์์ - Zero-shot ์ฑ๋ฅ ๋ฎ์ |
- SROIE ๋ฐ์ดํฐ๋ก Fine-tuning - ํ์คํฌ์ ํนํ๋ ํ์ต ์๋ฃ - ๋์ ์ฑ๋ฅ ๋ฌ์ฑ |
Base ๋ชจ๋ธ๊ณผ Fine-tuned ๋ชจ๋ธ์ ์ฑ๋ฅ ์ฐจ์ด๋ก ๋๋ฉ์ธ ํนํ ํ์ต์ ์ค์์ฑ์ ๋ณผ ์ ์์์ต๋๋ค.
์ฌ์ ํ์ต๋ LayoutLMv3 base ๋ชจ๋ธ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ดํด ๋ฅ๋ ฅ์ ๋ณด์ ํ๊ณ ์์ผ๋, ํน์ ๋๋ฉ์ธ(์์์ฆ)๊ณผ ํ์คํฌ(์ ๋ณด ์ถ์ถ)์ ๋ํ fine-tuning ์์ด๋ ์ค์ฉ์ ์ธ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
training_args = TrainingArguments(
output_dir="test",
max_steps=1000, # v2: 1500
learning_rate=1e-5, # v2: 2e-5
evaluation_strategy="steps",
eval_steps=100,
load_best_model_at_end=True,
metric_for_best_model="f1"
)
- ๋ฐ์ดํฐ์ ๊ตฌ์ถ ๋ฐ ๊ธฐ๋ณธ ํ์ต
- ํ๋ผ๋ฏธํฐ ์ต์ ํ ์งํ
-
๋ฌธ์ ๋ฐ๊ฒฌ
- v3
- output.csv ์ input ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์์๋ ๊ฐฏ์๊ฐ ๋ง์ง ์๋๊ฒ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.
- ์์ธ์ ๋ถ์ํ๋ ์ค ํ์ผ๋ณ ๋จ์ด ์ฒ๋ฆฌ๊ฐฏ์๋ฅผ print๋ฌธ์ ํตํด ๋น๊ตํ์์ต๋๋ค.
- ์ด ๊ฒฐ๊ณผ, X51007846283 ์ด๋ฏธ์ง ๋ฐ ๋จ์ด์ ๋ณด์ ๋ํ ํ ํฐ๊ฐ์ด 512๋ฅผ ๋์ด์๊ฒ ๋์ด output์ผ๋ก ๋์ค์ง ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.
- Position Embedding 514 ํ ํฐ ์ ํ ์ด์
- processor์ max_length = 2024๋ก ์์ ํ์ฌ ๋ชจ๋ธ ํ๋ จ ์งํํ์์ต๋๋ค.
- v4
- max_lenght๋ฅผ ๋์ฌ๋ ๋จ์ด์ ํ ํฐ์๊ฐ ์ผ์ ์ด์ ์ฌ๋ผ๊ฐ๋ฉด ์ธ์์ด ์๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.
- position embedding์ ์์ด์๋ ํ ํฐ์๊ฐ ์ ํ๋์ด ์์ ์ ์๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ ์๋ก์ด ๊ธฐ๋ฒ์ ์ ์ฉ์์ผฐ์ต๋๋ค.
- v3 ๊ฒฐ๊ณผ ๋ชจ๋ธ์ inference ๋ฅผ ์งํํ๋ฉฐ sliding_window๊ธฐ๋ฒ์ ์ ์ฉ์ํจ ๊ฒฐ๊ณผ ๊ฒฐ๊ณผ๋ฌผ ํ๊ฐ์งํ๊ฐ ํฅ์๋จ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.
- v3 f1 : 80.4974 -> v4+sliding_window f1 : 84.9540
- Sliding window ๊ธฐ๋ฒ ์ ์ฉ์ ์ํด ํ๋ จ ๋จ๊ณ์์๋ถํฐ ์ ์ฉ์ ๋ชฉํ๋ก v5๋ฅผ ์งํํ์์ต๋๋ค.
- v5
- Dataset์ train๊ณผ test set์ ๋ํด์๋ sliding_window๋ฅผ ์ ์ฉ์์ผ ํ๋ จ์ ์งํํ์์ต๋๋ค.
- v3
-
Sliding Window ๊ตฌํ
๊ตฌ๋ถ | ์ ์ฉ ์ | ์ ์ฉ ํ |
---|---|---|
์ฒ๋ฆฌ ๋ฐฉ์ | ๋จ์ผ ํจ์ค๋ก ์ ์ฒด ๋ฌธ์ ์ฒ๋ฆฌ | ์ค์ฒฉ ์๋์ฐ๋ก ๋ถํ ์ฒ๋ฆฌwindow_size=384, stride=192 |
์ฅ์ | - ๊ตฌํ ๋จ์ - ๋ฌธ๋งฅ ์ ์ง ์ฉ์ด - ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ |
- ๊ธด ๋ฌธ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ - ํ ํฐ ์์ค ๋ฐฉ์ง - Position Embedding ์ ํ ๊ทน๋ณต |
๋จ์ | - ๊ธด ๋ฌธ์ ์ ๋จ - Position Embedding ์ ํ - ํ ํฐ ์์ค ๋ฐ์ |
- ๊ตฌํ ๋ณต์ก๋ ์ฆ๊ฐ - ์ค๋ณต ์ฒ๋ฆฌ ํ์ - ๊ฒฝ๊ณ ๋ถ๋ถ ๋ฌธ๋งฅ ์ ์ค ๊ฐ๋ฅ์ฑ |
์ฑ๋ฅ | F1: 80.4974 EM: 49.7839 |
F1: 84.9650 EM: 50.4323 |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | ๋ฎ์ | ์ค๋ณต ์ฒ๋ฆฌ๋ก ์ธํ ์ฆ๊ฐ |
์ฒ๋ฆฌ ์๋ | ๋น ๋ฆ | ์ค๋ณต ์์ญ ์ฒ๋ฆฌ๋ก ์ธํ ์ง์ฐ |
ํ์ฉ ์ฌ๋ก | - ์งง์ ๋ฌธ์ - ๋จ์ํ ๋ ์ด์์ |
- ๊ธด ๋ฌธ์ - ๋ณต์กํ ๋ ์ด์์ - ์ ๋ฐํ ์ ๋ณด ์ถ์ถ ํ์ ์ |
- ๊ตฌํ ์ธ๋ถ์ฌํญ
# Sliding Window ํ๋ผ๋ฏธํฐ window_size = 384 # ๋จ์ผ ์๋์ฐ ํฌ๊ธฐ stride = 192 # ์๋์ฐ ์ด๋ ๊ฐ๊ฒฉ overlap = 192 # ์ค์ฒฉ ์์ญ # window ์ฒ๋ฆฌ ๋ก์ง def process_with_sliding_window(text): windows = [] for i in range(0, len(text), stride): window = text[i:i + window_size] windows.append(window) return windows
- ๋ผ๋ฒจ๋ง ๊ฐ์
- entities ์ ๋ณด ํ์ฉํ์ฌ label ์์
- OCR ๊ธ์์ธ์์ ์ํํ๋ฉฐ label์ด ์ํ bbox๋ฅผ ์ถ์ถํ๊ณ ํด๋น ๋ฌธ์ฅ ํน์ ๋จ์ด๊ฐ ์ํ ๋ฐ์ด๋ฉ๋ฐ์ค ๋ด ๋จ์ด์ ๋ํด์ ๋ผ๋ฒจ ์ฌ๋ถ์ฌ
training_args = TrainingArguments(
output_dir="test",
max_steps=1500,
per_device_train_batch_size=2,
per_device_eval_batch_size=2,
learning_rate=2e-5,
gradient_accumulation_steps=4
)
-
๋ชจ๋ธ ๊ฒฐ๊ณผ ๋ฐ ์ฑ๋ฅ
- ์ ์ถ๋ชจ๋ธ : v5
- F1 ์ ์: 84.9650
- ์ ํ๋(EM): 50.4323
-
๊ธฐ์ ์ ์ฑ๊ณผ
- Sliding Window ๊ธฐ๋ฒ ์ฑ๊ณต์ ๊ตฌํ
- ๋ฐ์ดํฐ ํ์ง ๊ฐ์ ๋ฐฉ๋ฒ๋ก ํ๋ฆฝ
- ๊ธด ํ ์คํธ ์ฒ๋ฆฌ์ ์ ์ฝ
- ํ๋๋ณ ์ฑ๋ฅ ํธ์ฐจ๋ก ์ธํ ์๋ก์ด ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ณผ์ ํ์
-
๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ณ ๋ํ
- ์์ธ์ฒ๋ฆฌ ํน ๊ท์น๊ธฐ๋ฐ ์ธ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ก ์ ์ฉ์ด ํ์ํจ.
-
๋ชจ๋ธ ์ต์ ํ
- Sliding Window ํ๋ผ๋ฏธํฐ ํ๋์ ํตํ ์ผ๋ถ ์ฑ๋ฅ๊ฐ์
- ํ๋๋ณ ํนํ ๋ชจ๋ธ์ ํตํ ์ํ๋ label์ ๋ํ quality๊ฐ ๋ณด์ฅ๋๋ ํ๋ จ๋ฐ์ดํฐ ๊ตฌ์ถ
-
์์คํ ์์ ์ฑ
- ํ๋๋ณ ๊ฒ์ฆ ๊ท์น ์ฒด๊ณํ