티스토리 뷰
공약21 서비스는 기본적으로 후보자 정당에서 내놓은 PDF 정책 공약집에 포함된 내용을 바탕으로 정보를 제공하기 때문에 이를 기반으로 한 전처리 과정이 필요하다.
전처리를 위한 전처리
공약 데이터는 크게 PDF와 이미지로만 사용했고 만약 정책 공약 데이터가 PDF라면 먼저 RAG 시스템을 위한 전처리 과정(LOAD → SPLIT → EMBED → STORE)의 전처리 과정이 필요하다.
PDF를 페이지(쪽)별로 저장
주요 정당의 정책 공약집은 아래처럼 PDF의 한 페이지가 양쪽(양쪽 스캔 방식)으로 구성되어 있다.
개발시에 21대 대통령 후보의 정책 공약집이 발표되지 않아 20대 대선 공약집을 기준으로 개발했으며 21대 후보의 공약집 또한 비슷한 형태였다.
이러한 구성 방식은 텍스트를 추출할 때 200쪽과 201쪽으로 나누어서 추출하지 않기 떄문에 두 페이지의 내용이 섞여 정확도가 떨어지는 문제가 존재한다. 아래는 PyMuPDF로 텍스트를 추출한 결과이다.
200│20대 대통령선거 더불어민주당 정책공약집
일하는 사람들 권리보장
일하는 사람들 권리보장
Ⅲ 민생안정
앞으로 제대로 나를 위한 맞춤 공약!│201
5대공약·20대 핵심 정책과제
Ⅲ. 민생안정
Ⅴ. 평화안보
Ⅰ. 신경제
Ⅱ. 공정성장
Ⅳ. 민주사회
대상별 공약
삶의터전별 공약
19
20
실업 예방과 노동자 복지 증진을 위해
플랫폼종사자와 소상공인의 협동조합 설립과
지원을 확대하겠습니다.
국민과 함께하는 현장 중심의 혁신정부와
열린행정을 구현하겠습니다.
프리랜서 및 플랫폼종사자의 협동조합 설립과 지원 확대를 통해 직업 안정과
역량 함양 추진
소상공인 협동조합의 규모화와 전문화를 위한 지원 체계 구축
정부 투명성과 청렴성 제고를 통한 국민 신뢰 확보
• 국민의 정보접근권 보장과 정부투명성 위한 ‘정보공개법’ 개정
• 적극적인 국민 권리구제 위한 ‘국가옴부즈만위원회’ 설치 검토
• 공직자 청렴성과 부패방지 강화 위한 ‘국가청렴위원회’ 설치 검토
국민 주도의 열린 정부혁신 추진과 정책혁신
• 국민 주도형 열린 정부혁신 체계 구축 및 법제도 정비
• 디지털 가상정부(메타정부) 구축 통한 정부혁신과 정책혁신
기대하는 결과는 200쪽 먼저 읽고 다음 201쪽을 읽는, 페이지 별로 끊어져 읽히는 것인데 결과를 보면 다음과 같이 200p → 201p → 200p → 201p 방식으로 읽히게 된다.
공약21 서비스는 정책 공약의 출처를 이미지로 제공하며 세부 공약의 기준을 "국민과 함께하는 현장 중심의 혁신정부와 ..."와 같이 소제목 을 기준으로 정했기 때문에 두 쪽의 내용이 섞인다면 이후에 공약과 출처의 불일치가 발생하는 등의 정확도에 문제가 발생할 것이라고 생각했다.
이번에는 읽을 수 없는 PDF라고 가정하고 다음의 PDF의 한 페이지를 이미지로 만들어 `Google Vision OCR`을 사용해 텍스트를 추출해보았다.
이번에도 마찬가지로 두 쪽의 내용이 구분되어 추출되지 않고 양쪽을 오가며 내용이 섞인 것을 알 수 있다.
위 페이지는 예시로만 사용되었고 실제 서비스를 개발할 때는 위와 같이 목차 형태의 페이지는 모두 제외했다.
OCR 결과
대상별 공약
5. 여성
임금·채용 등 성차별과 성희롱 없는 공정하고 안전한 일터를 만들겠습니다.
•
고용평등 임금공시제 도입 및 성별임금격차 해소 계획 수립
노동위원회 산하 (가칭)고용공정위원회 설치
.
지방고용청 내 고용평등 전담부서 설치
•
.
고용평등 전담 근로감독관 확충 및 강화
채용 성차별 사업장 신고감독제 및 대국민 공표제 도입
전국 광역단위에 소규모 사업장 성희롱 예방 및 피해자지원 기관 설치 추진
.
직장 성희롱 행위자 제재 강화
Ý 스토킹·데이트폭력 등 젠더폭력 처벌과 피해자 보호를 대폭 강화하겠습니다.
.
데이트폭력 처벌 법제화
•
스토킹 범죄의 반의사불벌죄 폐지
•
스토킹. 데이트폭력 피해자 보호 강화
.
•
「스토킹처벌법」개정, '온라인 스토킹' 등 스토킹 범죄 유형 확대
IT기술을 활용한 스토킹 데이트폭력 범죄자 접근 차단 등 선제 조치 강화
•
젠더폭력 피해자의 자립지원 체계 개선
•
.
성폭력 범죄의 양형 감경 요소 개선 및 성폭력 2차 피해 보호 강화
수사 과정, 민·형사 재판과정 등에서 피해자의 정보 보호 강화
일상을 파괴하는 디지털성범죄를 근절하고 불안을 해소하겠습니다.
경찰청 내 디지털성범죄 전담수사대 설치
'일하는 모든 부모가 자녀를 함께 돌볼 수 있도록 하겠습니다.
.
자동 육아휴직 등록제도 도입
•
•
•
•
•
불안정 일자리노동자 대상 육아휴직 제도 확대
비정규직 여성 출산휴가보장제 도입
육아휴직 급여액 현실화 및 아빠의 육아휴직 참여 강화
맞벌이 부부 영유아 돌봄서비스 세제 지원 추진
남녀 모두 안전하고 건강한 성과 재생산의 권리를 보장하겠습니다.
모든 여성 청소년 대상 '생리대 구입비 지원 및 건강검진에 생식건강 초음파 항목 추가
모든 남녀 청소년 대상 HPV(사람유두종바이러스) 백신 무료접종 지원
•
산부인과 명칭을 '여성건강의학과'로 변경
•
피임, 임신중지에 관한 건강보험 보장성 확대
•
난임시술 건강보험 보장 확대 및 정서적 지원 강화
•
임신노동자 건강권 보호와 위험회피에 따른 대체인력 지원 현실화
•
•성·재생산 건강권 보장기본법 제정
•
공공산후조리원 전국 광역단위 확충 및 시설·서비스 표준화
사회 전반의 동등한 성별 대표성과 균형 있는 참여를 도모하겠습니다.
•
기업의 성평등 경영지원 확대
•
군사관학교 등 제한선발제도 개선
⋅
성별과 연령을 고려한 통합정부 균형내각 구성
.
디지털성범죄로 얻은 범죄수익 환수를 위한 '독립몰수제' 도입
•
.
디지털성범죄 대응 컨트롤타워 및 광역별 '디지털성범죄피해자원스톱지원센터' 설치
•
•
범죄 악용 우려 있는 변형카메라 관리 강화
•
성착취물 선제적 삭제 기술개발 투자
딥페이크 기술로 제작된 음성·영상에 '표시의무제도' 도입
전국민 디지털성범죄 예방교육 실시
30|20대 대통령선거 더불어민주당 정책공약집
삶의터전별 공약
대상별 공약
6. 신경제
7. 공정성장
양성평등정책담당관 설치 부처 확대 및 성주류화 추진체계 강화
정치영역의 성희롱·성폭력 대응을 위한 법제도 마련
역사 왜곡과 전시 성폭력을 근절하고 여성인권과 평화증진에 앞장서겠습니다.
국무총리실 산하 1325위원회 설치
일본군 '위안부' 문제 해결을 위한 독립적 종합적 추진체계 마련
일본군 '위안부' 역사 왜곡 및 피해자 명예훼손에 대한 대책 수립
일본군 '위안부' 기록물 유네스코 세계기록유산 등재 추진
III. 민생안정
IV. 민주사회
앞으로 제대로 나를 위한 맞춤 공약 | 31
Ⅴ. 평화안보
이를 두 쪽으로 분리해 OCR로 텍스트를 추출하면 페이지별로 정상적으로 읽히는 것을 볼 수 있다.
[페이지 30]
대상별 공약
•
th
5. 여성
2 임금·채용 등 성차별과 성희롱 없는 공정하고 안전한 일터를 만들겠습니다.
.
고용평등 임금공시제 도입 및 성별임금격차 해소 계획 수립
노동위원회 산하 (가칭)고용공정위원회 설치
지방고용청 내 고용평등 전담부서 설치
.
고용평등 전담 근로감독관 확충 및 강화
.
•
채용 성차별 사업장 신고감독제 및 대국민 공표제 도입
전국 광역단위에 소규모 사업장 성희롱 예방 및 피해자지원 기관 설치 추진
직장 성희롱 행위자 제재 강화
스토킹 • 데이트폭력 등 젠더폭력 처벌과 피해자 보호를 대폭 강화하겠습니다.
데이트폭력 처벌 법제화
스토킹 범죄의 반의사불벌죄 폐지
스토킹. 데이트폭력 피해자 보호 강화
「스토킹처벌법」 개정, '온라인 스토킹' 등 스토킹 범죄 유형 확대
IT기술을 활용한 스토킹 데이트폭력 범죄자 접근 차단 등 선제 조치 강화
.
젠더폭력 피해자의 자립지원 체계 개선
성폭력 범죄의 양형 감경 요소 개선 및 성폭력 2차 피해 보호 강화
수사 과정, 민·형사 재판과정 등에서 피해자의 정보 보호 강화
'일상을 파괴하는 디지털성범죄를 근절하고 불안을 해소하겠습니다.
•
경찰청 내 디지털성범죄 전담수사대 설치
디지털성범죄로 얻은 범죄수익 환수를 위한 독립몰수제' 도입
디지털성범죄 대응 컨트롤타워 및 광역별 '디지털성범죄피해자원스톱지원센터' 설치
범죄 악용 우려 있는 변형카메라 관리 강화
.
성착취물 선제적 삭제 기술개발 투자
딥페이크 기술로 제작된 음성·영상에 '표시의무제도 도입
전국민 디지털성범죄 예방교육 실시
301 20대 대통령선거 더불어민주당 정책공약집
[페이지 31]
•
일하는 모든 부모가 자녀를 함께 돌볼 수 있도록 하겠습니다.
자동육아휴직 등록제도 도입
불안정 일자리노동자 대상 육아휴직 제도 확대
비정규직 여성 출산휴가보장제 도입
육아휴직 급여액 현실화 및 아빠의 육아휴직 참여 강화
맞벌이 부부 영유아 돌봄서비스 세제 지원 추진
남녀 모두 안전하고 건강한 성과 재생산의 권리를 보장하겠습니다.
모든 여성 청소년 대상 '생리대 구입비 지원 및 건강검진에 생식건강 초음파 항목 추가
모든 남녀 청소년 대상 HPV(사람 유두종바이러스) 백신 무료접종 지원
산부인과 명칭을 '여성건강의학과'로 변경
피임, 임신중지에 관한 건강보험 보장성 확대
•
•
•
•
난임시술 건강보험 보장 확대 및 정서적 지원 강화
•
.
.
임신노동자 건강권 보호와 위험회피에 따른 대체인력 지원 현실화
성·재생산 건강권 보장 기본법 제정
공공산후조리원 전국 광역단위 확충 및 시설·서비스 표준화
사회 전반의 동등한 성별 대표성과 균형 있는 참여를 도모하겠습니다.
기업의 성평등 경영 지원 확대
•
•
군사관학교 등 제한선발제도 개선
•
삶의터전별 공약
대상별 공약
1. 신경제
성별과 연령을 고려한 통합정부 균형내각 구성
양성평등정책담당관 설치 부처 확대 및 성주류화 추진체계 강화
정치영역의 성희롱·성폭력 대응을 위한 법제도 마련
역사 왜곡과 전시 성폭력을 근절하고 여성인권과 평화증진에 앞장서겠습니다.
국무총리실 산하 1325위원회' 설치
일본군 '위안부' 문제 해결을 위한 독립적 종합적 추진체계 마련
일본군 '위안부' 역사 왜곡 및 피해자 명예훼손에 대한 대책 수립
•
•
일본군 '위안부' 기록물 유네스코 세계기록유산 등재 추진
II. 공정성장
III. 민생안정
앞으로 제대로 나를 위한 맞춤 공약 | 31
IV. 민주사회
V. 평화안보
따라서, 공약21은
- 공약 데이터에 대한 정확한 이미지 출처 제공
- 응답 정확도 향상
을 위해 양쪽으로 스캔된 형태의 PDF 전체를 각 한 쪽씩 나누어 PDF와 각 이미지로 저장하는 전처리 과정을 거쳤다.
전처리
텍스트 추출
RAG 전처리를 위해 PDF 혹은 이미지에서 텍스트를 추출해야 한다. 텍스트를 추출하는 방법은 크게 2가지로 나뉜다.
파이썬 패키지(PyMuPDF)로 텍스트 추출
이 방법은 공약 데이터가 텍스트 추출이 가능한 PDF인 경우에만 가능하다. 파이썬에서는 PDF와 관련된 여러 패키지가 존재하기 때문에 이를 활용하면 손쉽게 PDF에서 텍스트를 추출할 수 있게 된다.
OCR을 사용해 텍스트 추출
반대로 이미지로 만들어져 텍스트를 추출할 수 없는 PDF이거나 공약 데이터 자체가 이미지라면 이미지에서 텍스트를 추출하는 기술인 OCR을 사용해 텍스트를 추출해야 한다.
!무조건 OCR을 사용하지 않는 이유
사실, PDF의 텍스트를 추출할 수 있건 없건 모두 OCR을 이용해서 텍스트를 추출할 수 있다.
출처 이미지를 제공하기 때문에 어차피 모두 페이지별로 이미지로 저장하기 때문이다.
하지만 그렇게 하지 않는 이유는 크게 2가지 이다.
- 정확도: PyMuPDF >= OCR
- 비용 절감
아래 이미지는 10대 주요 공약에 포함된 한 페이지이다.
이를 `PyMuPDF`와 `Google Vision OCR`을 사용해 텍스트를 추출한 결과는 다음과 같다.
PyMuPDF
선거명
제21대 대통령선거
후보자명
이재명
기 호
1
소속정당명더불어민주당
정책순위 : 10
미래세대를 위해 기후위기에 적극 대응
하겠습니다
분 야
환경·산업
□목 표
○기후위기 대응 및 산업구조의 탈탄소 전환
□이행방법
○선진국으로서의 책임에 걸맞는 온실가스 감축목표 수립
- 2030년 온실가스 감축 목표 달성 추진과 과학적 근거에 따른 2035년 이후 감축 로드
맵 수립
- 헌법불합치 결정 취지를 감안하여 책임있는 중간목표를 담은 탄소중립기본법 개정
- 2028년 제33차 기후변화협약 당사국총회(COP33) 유치
○재생에너지 중심의 에너지전환 가속화
- 2040년까지 석탄화력발전 폐쇄
- 햇빛ž바람 연금 확대, 농가태양광 설치로 주민소득 증대 및 에너지 자립 실현
- 태양광 이격거리 규제 및 재생에너지 직접구매(PPA) 개선
○경제성장의 대동맥, 에너지고속도로 구축
- 2030년까지 서해안, 2040년까지 한반도 에너지고속도로 건설 추진
- 분산형 재생에너지 발전원을 효율적으로 연결·운영하는 ‘지능형 전력망’ 구축
- ‘에너지산업 육성’ 및 공급망 내재화를 통한 차세대 성장동력 마련
○탄소중립 산업전환으로 경제와 환경의 조화로운 발전 도모
- 태양광·풍력·전기차·배터리·수전해·히트펌프 등 탄소중립산업의 국산화 및 수출경쟁
력 제고
- RE100 산업단지 조성으로 수출기업의 기후통상 대응역량 지원
- 철강·석유화학·시멘트 등 탄소다배출 업종의 저탄소 공정 및 기술혁신 지속 추진,
기업 탈탄소 전환 지원책 마련
- 기후테크 R&D 예산 확대, 탄소중립 신산업·신기술 발굴로 탄소중립 역량 강화
○건축물·열 부문 탈탄소화
- 민간·공공 그린리모델링 지원 확대 및 절차 간소화를 통한 노후건물 에너지효율화
○전기차 보급 확대 및 노후경유차 조기 대·폐차 지원을 통한 수송부문 탈탄소 가속화
Google Vision OCR
선거명
후보자명
제21대 대통령선거
이재명
기 호
1 소속정당명 더불어민주당
정책순위: 10
미래세대를 위해 기후위기에 적극 대응
하겠습니다
분 야 환경·산업
목표
○ 기후위기 대응 및 산업구조의 탈탄소 전환
이행방법
ㅇ 선진국으로서의 책임에 걸맞는 온실가스 감축목표 수립
- 2030년 온실가스 감축 목표 달성 추진과 과학적 근거에 따른 2035년 이후 감축 로드
맵 수립
헌법불합치 결정 취지를 감안하여 책임있는 중간목표를 담은 탄소중립기본법 개정
- 2028년 제33차 기후변화협약 당사국총회(COP33) 유치
○ 재생에너지 중심의 에너지전환 가속화
-
- 2040년까지 석탄화력발전 폐쇄
-
햇빛바람 연금 확대, 농가태양광 설치로 주민소득 증대 및 에너지 자립 실현
태양광 이격거리 규제 및 재생에너지 직접구매(PPA) 개선
○ 경제성장의 대동맥, 에너지고속도로 구축
- 2030년까지 서해안, 2040년까지 한반도 에너지고속도로 건설 추진
- 분산형 재생에너지 발전원을 효율적으로 연결·운영하는 '지능형 전력망 구축
- '에너지산업 육성' 및 공급망 내재화를 통한 차세대 성장동력 마련
○ 탄소중립 산업전환으로 경제와 환경의 조화로운 발전 도모
-
태양광·풍력·전기차·배터리·수전해·히트펌프 등 탄소중립산업의 국산화 및 수출경쟁
력 제고
RE100 산업단지 조성으로 수출기업의 기후통상 대응역량 지원
•철강·석유화학·시멘트 등 탄소다배출 업종의 저탄소 공정 및 기술혁신 지속 추진,
기업 탈탄소 전환 지원책 마련
- 기후테크 R&D 예산 확대, 탄소중립 신산업·신기술 발굴로 탄소중립 역량 강화
○ 건축물·열 부문 탈탄소화
-
민간·공공 그린리모델링 지원 확대 및 절차 간소화를 통한 노후건물 에너지효율화
ㅇ 전기차 보급 확대 및 노후경유차 조기 대·폐차 지원을 통한 수송부문 탈탄소 가속화
- 19 -
정확도 차이면에서 `PyMuPDF`와 `Google Vision OCR`의 결과에서 거의 차이가 없었다. 오히려 `PyMuPDF`는 전체적인 구조로도 `Google Vision OCR`보다 깔끔하게 만들어주었다. 더욱이 `Google Vision OCR`은 API 비용이 발생하는 반면 `PyMuPDF`는 파이썬 패키지를 설치해 무료로 사용할 수 있다. 두 방식간의 정확도 차이가 거의 없다면 무료로 사용할 수 있는 방식으로 하는 것이 옳은 선택일 것으로 생각해 가능하면 `PyMuPDF`로 텍스트를 추출하려 했다. 추출한 텍스트는 이후에 다시 임베딩할 경우를 생각해 재사용하기 위해 텍스트 파일로 모두 저장했다.
하지만 실제 21대 대통령 후보 정당에서 발표된 정책 공약집은 모두 텍스트 추출이 불가능한 PDF로 Google Vision OCR로 텍스트를 추출하게 되었다.
OCR 또한 무료로 사용할 수 있는 파이썬 패키지(`pytesseract` 등)가 존재한다. 하지만 `pytesseract`로 이미지에서 한글 텍스트를 추출해봤을 때 한글보다 이상한 특수문자가 더 많이 포함되는 정상적인 원하는 결과를 얻을 수 없었다.
텍스트 임베딩 및 저장
마지막으로 추출한 텍스트를 임베딩하고 벡터저장소에 저장하기만 하면 전처리의 모든 과정은 끝이 난다.
임베딩 모델에 대한 정보가 거의 없었기 때문에 임베딩을 위한 모델 선택은 ChatGPT와 Grok3의 추천을 받아 선택했다. 추천된 모델 중에서 고려한 모델은
- intfloat/multilingual-e5-base
- dragonkue/BGE-m3-ko
이었다. `intfloat/multilingual-e5-base`은 ChatGPT가 추천을 했고 `dragonkue/BGE-m3-ko`은 Grok3가 추천해주었다. 결론적으로 두 모델 중에서 선택한 모델은 `dragonkue/BGE-m3-ko`이었다. 해당 모델을 선택하게 된 이유는
- 768차원인 `intfloat/multilingual-e5-base` 보다 더 고차원인 1024차원
- 한국어에 특화
일반적으로 차원이 높을 수록 정확도가 올라가는 경향이 있으며 `intfloat/multilingual-e5-base`은 다국어 환경으로 범용적으로 설계되었고 `dragonkue/BGE-m3-ko`은 BGE-m3를 기반으로 한국어 최적화가 이루어져 있다. 공약집은 거의 대부분이 한글로 작성되어져 있기 때문에 `dragonkue/BGE-m3-ko` 모델을 사용하는 것이 정확도를 조금 더 올릴 수 있을 것이라고 생각해 선택하게 되었다.
벡터저장소는 Faiss를 사용했으며 이 저장소는 임베딩 벡터를 효율적으로 저장하고 검색(예: 유사도 검색)을 수행하는 데 초점을 맞춘 라이브러리로 벡터와 함께 원본 텍스트를 저장하는 기능은 제공하지 않는다. 때문에 원본 텍스트를 pkl 파일로 저장했으며 이때, 해당 데이터의 출처 이미지를 참고할 수 있도록 메타데이터에 출처 이미지를 포함해 함께 저장했다.
전처리 결과 업로드
이렇게 전처리 과정을 모두 거치고 나면 후보별로 `*.index` 파일과 `*.pkl` 파일이 생성되게 된다. 이 파일을 전부 구글 클라우드 스토리지에 업로드해 후에 문서 검색을 위한 Flask 서버를 실행할 때, 클라우드 스토리지에서 `*.index` 파일과 `*.pkl`을 다운로드 받아 벡터 인덱스를 로드해 사용하도록 구성했다.
'프로젝트 > 공약21' 카테고리의 다른 글
Re-rank (1) | 2025.06.18 |
---|---|
RAG 시스템 (0) | 2025.06.16 |
21대 대선 후보자 공약 비교 서비스 "공약21" (1) | 2025.05.24 |