본문 바로가기
AI/LLM

[Table MRC] 다양한 형태의 테이블 데이터 활용

by didi0di 2025. 2. 18.
728x90

개요

좀 더 복잡하고 다양한 포맷의 테이블 데이터 확보/생성

  • 포맷 : 마크다운/ HTML
  • 표 형태 : 병합, 표 안의 표 등등

1) 포맷

기본적으로 테이블 데이터의 형태는 크게 마크다운과 마크업 (HTML)으로 나뉨.

마크다운 ? HTML?

마크다운은 기본적으로 셀 병합이나 표 안의 표(중첩 테이블) 같은 복잡한 구조를 직접 지원하지 않음. 하지만

  • HTML 태그를 함께 사용하거나
  • 데이터를 여러 행으로 나누어 표현하는 방식

등으로 어느 정도 해결할 수 있음

📌 마크다운 vs HTML 비교 (LLM 관점)

 
포맷이해하기 쉬움구조 분석복잡한 테이블 지원요약 작업 적합성
Markdown ✅ 쉬움 ✅ 간단한 행/열 구조 ❌ 제한적 (병합, 중첩 불가) ✅ 요약하기 좋음
HTML ❌ 상대적으로 어려움 ✅ 강력한 구조 표현 ✅ 병합, 중첩 가능 ❌ 코드 분석 필요

이유

  • 마크다운 테이블간단한 행과 열 구조로 되어 있어 빠르게 파싱 및 요약 가능.
  • HTML 테이블rowspan, colspan 등의 속성이 있어 복잡한 레이아웃을 지원하지만, 모델이 분석하려면 추가적인 HTML 파싱이 필요함.

따라서 단순한 테이블 요약 작업이라면 Markdown더 빠르고 안정적, 병합된 셀을 정확하게 반영한 요약을 원하면 HTML이 필요할 수도 있음

👉 어떤 방식의 요약을 원하는지에 따라 포맷이 다르게 가져가는 것도 방법임.

  • 단순한 데이터 요약 (Markdown 추천)
  • 그룹화된 정보까지 반영한 요약 (HTML 고려)

결론

→ LLM 모델이 이해하기에는 마크다운(Markdown) 테이블이 더 좋을 가능성이 크다.

→ 복잡한 테이블이 필요하면 HTML을 활용해서 좀 더 확장된 형태로도 만들어서 사용해야 할 수도 있음.

HTML 테이블을 사용하면서도 요약을 쉽게 만들 방법 :

  1. HTML 테이블을 유지하면서
  2. rowspan, colspan을 분석하여 병합된 정보도 반영한 요약을 생성

같은 내용 마크다운 vs HTML 비교

 
포맷예시
마크다운 | 통신사 | 요금제 | 월 요금 | 데이터 | 통화 | 부가 혜택 | |---------|--------------|----------|------------------|---------|----------------------| | **SKT** | 5G 프리미엄 | 89,000원 | 데이터 무제한 | 무제한 | OTT 3개월 무료 | | **SKT** | 5G 슬림 | 59,000원 | 12GB + 1Mbps | 무제한 | VIP 멤버십 | | **KT** | 5G 프리미엄 | 85,000원 | 데이터 무제한 | 무제한 | 데이터 쉐어링 2회선 | | **KT** | 5G 베이직 | 55,000원 | 10GB + 1Mbps | 300분 | 제휴 할인 | | **LG U+** | 5G 시그니처 | 88,000원 | 데이터 무제한 | 무제한 | 넷플릭스/유튜브 프리미엄 6개월 | | **LG U+** | 5G 스마트 | 57,000원 | 11GB + 1Mbps | 250분 | 쇼핑몰 할인 |
HTML <table border="1">
<thead>
<tr>
<th>통신사</th>
<th>요금제</th>
<th>월 요금</th>
<th>데이터</th>
<th>통화</th>
<th>부가 혜택</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>SKT</strong></td>
<td>5G 프리미엄</td>
<td>89,000원</td>
<td>데이터 무제한</td>
<td>무제한</td>
<td>OTT 3개월 무료</td>
</tr>
<tr>
<td><strong>SKT</strong></td>
<td>5G 슬림</td>
<td>59,000원</td>
<td>12GB + 1Mbps</td>
<td>무제한</td>
<td>VIP 멤버십</td>
</tr>
<tr>
<td><strong>KT</strong></td>
<td>5G 프리미엄</td>
<td>85,000원</td>
<td>데이터 무제한</td>
<td>무제한</td>
<td>데이터 쉐어링 2회선</td>
</tr>
<tr>
<td><strong>KT</strong></td>
<td>5G 베이직</td>
<td>55,000원</td>
<td>10GB + 1Mbps</td>
<td>300분</td>
<td>제휴 할인</td>
</tr>
<tr>
<td><strong>LG U+</strong></td>
<td>5G 시그니처</td>
<td>88,000원</td>
<td>데이터 무제한</td>
<td>무제한</td>
<td>넷플릭스/유튜브 프리미엄 6개월</td>
</tr>
<tr>
<td><strong>LG U+</strong></td>
<td>5G 스마트</td>
<td>57,000원</td>
<td>11GB + 1Mbps</td>
<td>250분</td>
<td>쇼핑몰 할인</td>
</tr>
</tbody>
</table>

2) 병합된 표

2-1) GPT한테 생성 지시

 

생성된 데이터 예시

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>통신사 요금제 비교</title>
    <style>
        table {
            width: 100%;
            border-collapse: collapse;
            text-align: center;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 10px;
        }
        th {
            background-color: #f4f4f4;
        }
    </style>
</head>
<body>

<h2>📶 주요 통신사 요금제 비교 (2025년 기준)</h2>

<table>
    <thead>
        <tr>
            <th rowspan="2">통신사</th>
            <th rowspan="2">요금제</th>
            <th rowspan="2">월 요금</th>
            <th colspan="2">제공 혜택</th>
            <th rowspan="2">부가 혜택</th>
        </tr>
        <tr>
            <th>데이터</th>
            <th>통화</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td rowspan="2">SKT</td>
            <td>5G 프리미엄</td>
            <td>89,000원</td>
            <td>무제한</td>
            <td>무제한</td>
            <td>OTT 3개월 무료</td>
        </tr>
        <tr>
            <td>5G 슬림</td>
            <td>59,000원</td>
            <td>12GB + 1Mbps</td>
            <td>무제한</td>
            <td>VIP 멤버십</td>
        </tr>
        <tr>
            <td rowspan="2">KT</td>
            <td>5G 프리미엄</td>
            <td>85,000원</td>
            <td>무제한</td>
            <td>무제한</td>
            <td>데이터 쉐어링 2회선</td>
        </tr>
        <tr>
            <td>5G 베이직</td>
            <td>55,000원</td>
            <td>10GB + 1Mbps</td>
            <td>300분</td>
            <td>제휴 할인</td>
        </tr>
        <tr>
            <td rowspan="2">LG U+</td>
            <td>5G 시그니처</td>
            <td>88,000원</td>
            <td>무제한</td>
            <td>무제한</td>
            <td>넷플릭스/유튜브 프리미엄 6개월</td>
        </tr>
        <tr>
            <td>5G 스마트</td>
            <td>57,000원</td>
            <td>11GB + 1Mbps</td>
            <td>250분</td>
            <td>쇼핑몰 할인</td>
        </tr>
    </tbody>
</table>

</body>
</html>
 

2-2) 기존 데이터셋 리서치

금융, 법률 문서 기계독해 데이터셋

금융 및 법률 분야 전문문서를 활용하여 기계독해 모델 생성을 위한 지문-질문-답변으로 구성된 데이터셋

https://huggingface.co/datasets/shchoice/finance-legal-mrc/viewer/tableqa

 

shchoice/finance-legal-mrc · Datasets at Hugging Face

<table><tbody><tr><td colspan="2">구분</td><td>SKT</td><td>KT</td><td>LGT</td><td>계</td></tr><tr><td rowspan="3">이동통신</td><td>2G</td><td>11,615,064</td><td>2,908,504</td><td>6,043,681</td><td>20,567,249</td></tr><tr><td>3G</td><td>12,654,489</t

huggingface.co

 

  • 테이블 QA 데이터 총 약 10만건 (108k)
    • train : 96,000 / test : 12,000
  • 테이블 QA에 필요한 정보로 구성되어 있으며 아래 2가지 데이터 활용 가능해보임.
    • table_title: 표의 제목
    • table_html: 표의 HTML 데이터
  • 데이터 로드시 “tableqa” 선택해서 테이블 데이터만 로드 가능
from datasets import load_dataset
# 특정 configuration의 특정 split 로드 - tableqa
train_data = load_dataset("shchoice/finance-legal-mrc", "tableqa", split="train")
valid_data = load_dataset("shchoice/finance-legal-mrc", "tableqa", split="test")
# 특정 configuration의 전체 split 로드 - tableqa
full_dataset = load_dataset("shchoice/finance-legal-mrc", "tableqa")

 

데이터셋 예시

2-3) 테이블 병합 여부 체크

테이블에 병합된 부분 있는지 체크 후 병합된 경우 따로 저장 (이미지도 함께 저장)

→ table_title이 고유한 테이블 데이터에 대해 병합된 부분이 있는 경우 따로 저장하고 이미지로도 저장하는 모듈 개발

→ table_title이 고유한 테이블 데이터는 전체 데이터의 약 10% 가량

  • train - table_title이 고유한 테이블 데이터 : 총 9,388건 / 전체 96,000건
  • test - table_title이 고유한 테이블 데이터 : 총 1,197건 / 전체 12,000건
    • 병합된 테이블이 있는 데이터 : 총 6,276건 (train : 5,533건 / test : 743건)
    • 데이터 경로
      • train: src/tableInfoGen/data/finance-legal-mrc/json/merged_table_train_data.json
      • test: src/tableInfoGen/data/finance-legal-mrc/json/merged_table_test_data.json

데이터 예시

  • { "table_title": "[표 1] 스마트폰 단말기 개통현황", "table_html": "<table><tbody><tr><td colspan=\"2\">구분</td><td>SKT</td><td>KT</td><td>LGT</td><td>계</td></tr><tr><td rowspan=\"3\">이동통신</td><td>2G</td><td>11,615,064</td><td>2,908,504</td><td>6,043,681</td><td>20,567,249</td></tr><tr><td>3G</td><td>12,654,489</td><td>12,107,691</td><td>2,614,793</td><td>27,376,973</td></tr><tr><td>계</td><td>24,269,553</td><td>15,016,195</td><td>8,614,793</td><td>47,944,222</td></tr><tr><td rowspan=\"4\">스마트폰</td><td>2G</td><td>43,363</td><td>0</td><td>81,462</td><td>124,825</td></tr><tr><td>3G</td><td>411,940</td><td>504,264</td><td>0</td><td>916,204</td></tr><tr><td>계</td><td>455,303</td><td>504,264</td><td>81,462</td><td>1,041,029</td></tr><tr><td>종류</td><td>18종</td><td>9종</td><td>2종</td><td>29종</td></tr></tbody></table>"

 

  • 이미지 저장한 데이터 : 1458건 (메모리 효율화를 위해 일부만 저장)

변한환 데이터셋

https://huggingface.co/datasets/didi0di/finance-legal-mrc_merged-table

 

didi0di/finance-legal-mrc_merged-table · Datasets at Hugging Face

<table><tbody><tr><td rowspan="2"></td><td colspan="2">기존 미납 (A)</td><td colspan="2">신규 부과 (B)</td><td colspan="2">징수 완료 (C)</td><td colspan="2">미납소계...

huggingface.co

 

728x90

댓글