대학원 논문으로 XMLR을 이용하여 기계학습을 연구 중 입니다. 수치를 조금이라도 올리고 싶어 제공된 Vocab이 아닌 한글 위주의 Vocab을 만들어 학습 결과를 확인하기 위해 KorWiki를 이용해 Vocab을 만들어 보겠습니다. XMLR의 Vocab은 Sentencepiece로 생성됩니다.
Sentencepiece를 Korean wiki data를 Vocab(단어집합)을 만들어 보겠습니다.
1. training data(Corpus) 수집
위키피디아는 정기적으로 덤프 파일로 릴리즈 한다. 다음 사이트에서 다운로드 할 수 있습니다.Korean wiki download site
메인화면: https://ko.wikipedia.org/wiki/%EC%9C%84%ED%82%A4%EB%B0%B1%EA%B3%BC:%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C
다운로드: https://dumps.wikimedia.org/kowiki/
다운로드에 접속하면 날짜별로 리스트되어 있습니다. 안으로 들어가면 여러 파일이 있습니다. 메인화면에 들어가면 파일 용도를 확인할 수 있습니다. 내용은 다음과 같습니다.
- pages-articles.xml.bz2 - 일반 문서의 최신 버전만이 묶여 있고, 전체 편집 역사는 들어있지 않습니다. 대부분의 이용자는 이 파일을 이용하면 됩니다.
- pages-current.xml.bz2 - 모든 문서의 최신 버전이 묶여 있습니다.
- pages-full.xml.bz2/7z - 모든 문서(토론 포함)의 최신 버전이 묶여 있습니다.
- pages-meta-history.xml.bz2 - 모든 문서의 모든 편집 내역이 묶여 있습니다.
- pages-logging.xml.gz - 모든 문서와 사용자에 대한 행위 기록이 묶여 있습니다.
- abstract.xml.gz - 문서 요약이 묶여 있습니다.
- all-titles.gz - 모든 문서 (토론 포함) 의 제목이 묶여 있습니다.
- all-titles-in-ns0.gz - 모든 문서 (본문만) 의 제목이 묶여 있습니다.
- redirect.sql.gz - 넘겨주기 문서의 목록이 묶여 있습니다.
- pagelinks.sql.gz - 위키 문서 간의 링크가 묶여 있습니다.
- externallinks.sql.gz - 위키 외부로의 링크가 묶여 있습니다.
- protected_titles.sql.gz - 위키에서 생성보호된 문서의 제목이 묶여 있습니다.
- user_groups.sql.gz - 사용자의 권한 목록이 묶여 있습니다.
- user_former_groups.sql.gz - 과거의 사용자 권한 기록이 묶여 있습니다.
일반 문서의 최신 버전파일인 pages-articles.xml.bz2를 다운로드 합니다.
비고)
pages-articles.xml.bz2 바로 아래를 보시면 page별로 나눠진 파일이 있습니다(kowiki-latest-pages-articles1.xml-p1p76864.bz2).
테스트에는 작은 파일로 해보시는걸 권해드립니다.
2. Wiki data parsing
다운받은 Wiki 데이터는 xml tag등 여러 정보들이 포함되어 있습니다. 이런 필요 없는 정보 정제가 필요합니다. WikiExtractor는 Wikipedia database dump에서 추출 및 클린징을 수행하는 python script입니다.WikiExtractor 다운로드는 다음 git에서 받을 수 있습니다.
https://github.com/attardi/wikiextractor
수행 방법-1: xml 형태로 추출(default)
- python WikiExtractor.py ..\Kor_Wiki\kowiki-latest-pages-articles.xml.bz2
text\AA 디렉토리 안에 wiki_{num}형식으로 여러 파일이 생성됩니다.
<doc id="5" url="https://ko.wikipedia.org/wiki?curid=5" title="지미 카터">
지미 카터
제임스 얼 "지미" 카터 주니어(, 1924년 10월 1일 ~ )는 민주당 출신 미국 39번째 대통령 (1977년 ~ 1981년)이다.
....
</doc>
수행 방법-2: json 형태로 추출
- python WikiExtractor.py --json ..\Kor_Wiki\kowiki-latest-pages-articles.xml.bz2
{"id": "", "url": "", "title": "", "text": ""}
기타 자세한 옵션은 Git에서 확인 가능합니다.
저는 json형태로 추출하였습니다.
wiki data가 여러개 있으므로 반복문으로 수행했습니다. r_dir은 wiki data가 있는 폴더고, file_name은 파일명 입니다. write_file() 함수는 읽어드린 내용을 새로운 파일에 저장하는 함수입니다. 이 파일로 Sentencepiece에서 학습을 진행합니다.
폴더를 확인하면 다음과 같이 파일이 생성된 것을 확인할 수 있습니다.
3. Sentencepiece를 이용하여 Vocab 만들기
Sentencepiece 설치 및 사용법은 다음 포스티을 참고 바랍니다.URL:
다음 git에서 이번 포스팅 내용에 관련된 소스를 다운로드 받을 수 있습니다.
https://github.com/ynebula/NLP/blob/master/Data/Kor_wiki_data_extract.ipynb
감사합니다.
댓글
댓글 쓰기