본문 바로가기

머신러닝(Machine Learning)/실무

문장의 해당 언어 판별하기




이 포스팅은 서적 '머신러닝, 딥러닝 실전개발 입문'을 참고한 포스팅입니다.





고대 바빌로니아 인들의 신에 대한 도전(?)으로 인한 바벨탑이 무너지게 되었고,


21세기는 수많은 사람들이 수많은 민족과 국가라는 프레임의 나뉘어 서로 다른 언어를 사용하고 있다.


이러한 소통의 문제는 생각보다 인류의 발전에 큰 걸림돌이 되고 있다.



만약 컴퓨터 소프트웨어를 이용해서 어떤 언어이든지 내가 이해할 수 있는 언어로 번역하여주는 완벽한 번역기를 개발한다면


인류의 발전에 크게 도모할 것으로 예상된다.



만약 스마트 글래스의 동적 문장 번역 기능을 추가한다고 하면 


특정 문장을 보고 내가 해당하는 국가의 언어로 동적으로 번역하여 준다는 가정하에



문장을 번역하기전에


어떤 언어에서 어떤 언어로 번역할 것인지를 정해주어야 하는 데 (예를들어 영어 -> 한국어  영어 -> 일본어)


먼저 번역할 문장이 어떤 언어에 해당하는 문장인지 판별해야한다.


그렇다면 가장 먼저 해야할 것은 해당 문장이 어떤 언어에 해당하는 문장인지 판별하도록 하는 프로그램을 작성해보겠다.





먼저 트레이닝 데이터(학습 데이터)


책에서 제공한 무작위로 추출한 각 나라별 기사를 기반으로 구하였다.


영어(en), 프랑스어(fr), 인도네시아어(id), 타갈로그어(tl)






아이디어


이제 해당 나라별 기사 데이터를 활용해야 하지만


글자 데이터를 학습기에 곧바로 집어넣을 수 없기 때문에,


글자데이터를 나타내는 벡터로 변경해서 사용해야한다.


어떤 특징을 추출하여 벡터로 나타내면 될까?



각 언어에 해당하는 차이를 기반으로 학습을 시켜야하기 때문에 고려해본 결과


언어학적으로 알려진 사실인 언어가 다르면 알파벳의 출현 빈도가 다르다는 것을 기반으로 학습시키도록 해보겠다.

 


아이디어는 간단하다.




총 26개의 알파벳('a'~'z')가 해당 기사에 얼마나 나오는 지 체크하여 계산하여 준 뒤,


전체 나온 알파벳의 개수로 나눠 준다면


해당 알파벳이 얼마나 빈번히 출현하는지(frequency)에 관한 리스트를 얻을 수 있다.



단순히 알파벳의 개수로 하지 않는 이유


만약에 기사가 특정 기사보다 2배로 길다면, 그만큼 많은 글이 쓰여있을 것이고, 그에 해당하는 알파벳 또한 2배정도로 더 많이 출현할 것이므로


텍스트 파일에 있는 문자 수가 다르므로 출현 횟수를 비교하면 동일한 규칙이 적용되지 않기 때문이다.


이를 정규화(normalize)라고 부르며, 해당 이유로 정규화(normalize)라는 기법을 이용해야 한다.





이제 scikit-learn라이브러리를 이용하여


서포트 벡터 머신 알고리즘으로 학습시켜 보자.





라인 43에서 앞서 얘기했던 정규화 과정을 확인해볼 수 있다.





해당 코드를 실행하여 학습결과를 확인해보자.







총 20개의 데이터만을 학습하였는데 


테스트 데이터의 예측결과와 실제정답을 비교하여 본 결과


정답률 0.875로 생각보다 높은 정확도를 보이고 있으며,



하나 인도네시아어(id)만 오판한 것을 확인할 수 있다.



그 이유를 생각해보자.





해당 기사는 영어(en)로 오판한 인도네시아어(id)


테스트 데이터의 5번째 데이터이다.



해당 문서를 확인해보면 IT와 관련된 내용인데,


"Windows", "OS", "Microsoft" 등의 해당하는 특정 고유명사에 해당하는 영어이름이 굉장히 많이 등장하는 것을 확인할 수 있다.



그렇기 때문에 인도네시아어를 영어로 오판한 것으로 확인된다.




고찰


이론적으로만 머신러닝을 배우다가 실질적으로 간단한 프로그램이지만


구현하여 보니, 라이브러리가 잘되어있어서 그런지 이론만큼 어렵진 않았다.


허나 그만큼 부실한 점이 많은 프로그램이였다.


조금 생각을 해본 결과


고유명사에 해당하는 영어 이름의 경우는 웹에서 수집하여 하나의 사전 처럼 리스트를 만들어 놓은후 고유 명사에 해당하는 문자열을 제외한 뒤,


문장을 분석한다면 위의 사례처럼 오판이 나는 경우가 다소 줄어들 것으로 보인다.


한가지더 


해당 프로그램은 영어권의 영향을 받은(영어 문화의 영향을 받은) 나라에만 적용가능 할 것같다는 생각이 든다.


왜냐하면


고유명사를 제외한


한국이나, 일본, 중국의 경우는 자국의 문자인 한국어, 일어, 중국어로만 기사가 작성되어 있는 경우가 많으며


그만큼 알파벳 문자의 비율이 아예 또는 거의 나타나지 않을 것으로 판단된다.


이러한 미묘한 차이는 엄청나게 수많은 데이터 학습이 없는 경우에는 


알파벳의 출현빈도 차를 기반으로한 알고리즘에서


동양 문화의 국가에 대해서는 서로 다름을 비교해낼 수 없을 것으로 판단된다.


하지만 이는 내가 언어학에 대한 지식이 부족할 뿐 또 다른 특성을 추가한다면 분류해낼 수 있을 것으로 한편으로도 생각된다.



간단하게 알파벳의 출현빈도를 기반으로 학습하여 해당 언어를 판별하는 프로그램이지만,


똑같은 논리를 적용하여 응용 한다면


해당 일기를 읽고 그날의 감정이 어떠한 감정인지 판별하는 프로그램 또한 만들 수 있을 것이며,


당 포스팅의 글의 내용을 읽고 자동으로 어떠한 카테고리의 글인지 분류를 해주는 프로그램 또한 만들 수 있을것으로 생각되며


이외에도 수없이 많은 응용이 가능하여 보인다.