요즘 한국어 말뭉치를 수집하고 있다. 예전부터 자연어분석, 형태소분석 이런 것에 관심이 많다보니 한국어 말뭉치에 대해 관심이 많았다. 그러다 개인적으로 GPT 나 LLAMA 같은 LLM 모델들이에 관심을 가지다보니 다시 말뭉치로 내 관심이 돌아오게 되었다. 
 전에 공개된 세종프로젝트도 그랬지만 정부프로젝트로 수집된 말뭉치들이 사용에 제약이 많은 것 같다. 일부 말뭉치들이 소설, 대화글이기 때문에 저자권에 위반된다든지 개인정보 처리에 문제가 될 수는 있어서 제약이 있는 것은 이해 할 수 있다. 그런데 모든 말뭉치가 그렇게 제약을 가져야 하는지는 의문이다.
 특히 신문, 방송사의 경우 정부의 재정이 직접 투입되는 것으로 알고 있는데, 몇년이 지난 기사의 경우 일부라도 공개 할 수 있는 것 아닌가? 이건 해결 할 수 없는지 의문이다.  

 어째든 이런 저런 이유로 여러 말뭉치들이 서약을 한다든지 사용에 제약이 있다. 그래서 이런 제약이 없는 말뭉치를 수집하는 프로젝트를 하고 있다. 이름하여 보따리 프로젝트이다. https://github.com/yiunsr/boddari

 CCL BY, CCL BY-SA 같은 크리에이티브 커먼즈 라이선스와 기부된 글(https://gongu.copyright.or.kr/gongu/main/main.do 이런 곳에서 찾을 수 있다.), 저자권이 소멸된 글, 정부에서 생성하는 "공공누리 라이선스"를 가진글 들을 모우고 있다. 이런 글들은 해당 라이선스만 지키서 사용하면된다(저자권자 표시, 2차 창작된 글도 동일한 라이선스로 공개할 것 같은 조건). 아무래도 상업적사용도 가능할 것 같아 CCL BY-NC 계열은 생각하고 있지 않다. 

이것 저것 다양하게 모은 상태인데, 벌써 글 수집에 한계가 느껴진다. 우리나라의 경우 CCL-BY 나 CCL-BY-SA 글이 많지 않다. 위키피디아나 리브레 위키를 제외하고는 거의 없다시피 하다. 그리고 CCL 에 대한 이해가 부족한 것 같다. 블로그 글의 경우 CCL BY-NC 같은 라이선스를 표시해두고 자바스크립트로 글 복사를 막는 형태의 블로그가 많이 존재한다. CCL 를 붙였다는 것은 공유를 하자는 의미있는데, 글 복사를 막는 것은 뭐하자는 것인지 모르겠다. 

 말뭉치 수집을 위해 따로 wiki 라도 만들어서 사용자들에게 기부라도 받아야 하나 하는 생각이 든다. 

 

 오늘 회사에서 이것과 씨름을 했다. http://openapi.nsdi.go.kr/nsdi/eios/ServiceDetail.do?svcSe=F&svcId=F018&provOrg=NIDO 에 광역시나 도별로 GIS 건물정보를 받을 수 있다. 파일을 다운 받아서 압축을 해제하면 .shp, .dbf, .prj 파일들이 있다. 
 이 파일의 의미를 처음으로 알게되었는데,  .shp 파일은 맵의 위치, 도형정보가 들어있다. 이 파일을 잘 이용하면 실제 위도, 경도를 계산할 수 있다. .dbf 는 DB파일이다. 다운받은파일에서는 건물 주소, 건물명, 사용승인일등이 들어 있다. .shp 에 매핑되는 지점의 정보가 들어 있는 것이다. 그리고 .prj 는 .shp 파일의 맵의 위치정보가 어떤 좌표계를 사용했는지 알려주는 것 같은데 실제 이용되는 데이터인지는 모르겠다. 

 이 작업을 하면서 알게 되었는데, 우리가 흔히 위도 경로라는 것도 좌표계의 하나로 WGS84 경위도: GPS가 사용하는 좌표계를 이용해야 한다. 그리고 해당 파일의 좌표계는 "EPSG:5174" 이다. 

파이썬 코드를 작성해 보면 아래와 같다.

import shapefile
from shapely.geometry import Polygon
from dbfread import DBF
from pyproj import CRS, Transformer

# https://www.osgeo.kr/17
# EPSG:5174
EPSG5174 = """+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1
+x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs
+towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43"""


# Projection 정의
# EPSG:5174
epsg5174_crs = CRS(EPSG5174)
  

# WGS84 경위도: GPS가 사용하는 좌표계 EPSG:4326
epsg4326_crs = CRS('epsg:4326')

transformer = Transformer.from_crs(epsg5174_crs, epsg4326_crs)

fileName = './res/AL_11_D164_20230125'
sf = shapefile.Reader(shp=(fileName + ".shp"))
dbf = DBF(fileName + ".dbf" , encoding="CP949")
# records = sf.records()

index = -1
shapes = sf.shapes()
for record in dbf:
	index += 1
	if index % 10000 != 0:
		continue
	print("index : " + str(index))
	print("n_count : " + str(n_count))

	shape = shapes[index]
	polygon = Polygon(shape.points)
	center = polygon.centroid
	gis = transformer.transform(center.x, center.y)
	# gis = proj.transform(center.x, center.y)
	print("중심좌표 : " + gis)
  

print("======== END ========")


사용한 파이썬 라이브러리는 shapefile, dbfread, pyproj 이다. shapefile은 shp 파일을 불러오는 역할을 한다. 이 라이브러리을 통해 dbf 파일도 같이 읽을 수는 있는데 속도가 느려서 dbfread 라이브러리를 사용했다. pyproj 는 shapefile 라이브러리를 통해 얻어온 좌표를 변환할 때 사용한다. 이 라이브러리를 통해 위도 경도 값을 얻을 수 있다. 
 gis 변수에 위도, 경도 tuple 이 있고, record에는 dbf 파일의 정보가 있다. 서로 같은 순서를 가지기 때문에 이렇게 하면 동일한 건물에 대해 위도,경도와 기타 정보를 같이 획득할 수 있다. 


내 설명이 많이 불친절하긴 한데, 다른 사이트들에 개념은 잘 설명되어 있다. 그런데 파이썬 코드가 없어서 이 글을 올린다.  

 이 때까지 내가 이해하기로는 이것들은 비지도학습이다. 그런데 엄청난 학습을 통해 훈련해서 뭔가 대단한 것이 나오는 것 같다. 그런데, 이게 맞는 방향인지 모르겠다. 이 학습에만 엄청난 전기요금이 든다는데, 이런 식의 방법론이 올바른 방향인지 조금은 의심이든다.

내 뇌피셜로는 이런 비지도 학습이 인간이 이 때까지 구축해둔 지식을 세월을 거슬러 올라가 처음부터 훈련하는 것 아닌지 의심이 든다. 어떻게 보면 사람의 뇌는 엄청나게 좋은 GPU 머신이다. 여러 사람들(많은 GPU들이) 이 오랜세월 동안 구축한 언어 정보(형태소, 언어문법)를 무시하고(무시했다는 표현이 좀 그런데, 그냥 해당 label을 이용하지 않았다는 의미이다.) 그냥 깡으로 학습하는 느낌이다.  그렇다보니 뭔가 비효율적으로 엄청난 에너지를 소모하는 것 아닌가 하는 의구심이 든다.