개발 이야기
-
NLP
한국어 말뭉치를 통한 사이시옷 사용 실태 조사
헷갈리는 사이시옷사이시옷은 참으로 묘한 녀석입니다. 이름은 분명 사이"시옷"인데 ㅅ소리가 전혀 나지 않거든요. 사이시옷의 역할은 두 개의 명사가 합쳐져서 복합 명사가 되는 과정에서 뒤의 명사가 된소리화(ㄲ/ㄸ/ㅃ/ㅆ/ㅉ)되거나 ㄴ소리가 첨가되는 현상을 반영하기 위해서 명사 사이에 ㅅ을 적기로 약속한 것이기 때문입니다. 그래서 적기는 ㅅ으로 적더라도 실제로는 ㅅ 소리가 절대 나지 않습니다. ('숫자'는 [숫자]로 소리나는 것이 아니라 [수짜]로 소리나고, '깻잎'은 [깨십]으로 소리나는 것이 아니라 [깬닙]으로 소리납니다.)사실 발음보다 더 골이 아픈 문제는 사이시옷을 언제 써야하는지, 언제 쓰지 말아야하는지를 구분하는게 참 어렵다는 겁니다. 잘 모르는 복합명사를 받아적을 일이 생겨서, 그 명사에 사이시옷..
-
NLP
LLM으로 게임 텍스트 번역해보기
게임 텍스트 번역이라는 과제에서 LLM이 가지는 장점바야흐로 LLM(Large Language Model)의 시대가 도래했고, 오픈소스 모델들이 속속들이 등장하면서 누구나 집 컴퓨터에서 딸각(과 코드 몇 백 줄을 작성)하면 텍스트 관련한 귀찮은 일들을 모두 AI한테 맡길수 있는 세상이 왔습니다. 나무가 충분히 자란것 같으니 이제는 슬슬 열매를 따먹어봐야할 시간이 온거지요.그래서 저는 그동안 머릿속으로 상상만하고 여력이 없어서 이루지 못한 일들을 AI발달에 힘입어 하나씩 이뤄나가보려고 하는데요, 첫번째 타겟은 게임 텍스트 자동 번역입니다. 자동 번역은 이미 충분히 발달된 분야가 아닌가 생각하실 수 있겠지만, 게임 텍스트 자동 번역은 생각보다 난이도가 있는 과제입니다.먼저 게임 내 세계관에서만 사용되는 고유..
-
테크닉
[C++11] 인덱스 정보를 유지하면서 효율적으로 정렬하기
정렬은 컴퓨터 알고리즘에서 매우 자주 쓰이는 중요한 알고리즘입니다. 그래서 대부분의 프로그래밍 언어들은 정렬하는 방법을 언어 문법 차원에서든 기본 라이브러리로든 반드시 제공합니다. 언어 차원에서 제공해주는 정렬 함수는 대체로 최적화가 잘 되어 있어 빠르므로, 컴공 과제를 푸는게 아닌 이상은 정렬을 직접 구현해서 쓸 일은 거의 없지요. 그러나 종종 기본적으로 제공되는 정렬 함수만으로는 부족함을 느낄 때가 있습니다. 바로 인덱스 정보를 유지하면서 정렬을 해야하는 경우입니다. 위의 그림에서와 같이 총 5개의 문자열로 이뤄진 배열을 정렬하는데, 정렬 후 배열의 각 요소들이 원래 어느 위치에 있었는지를 함께 파악해야하는 경우가 있습니다. 배열과 관련된 다양한 문제를 해결하다보면 생각보다 자주 필요한 작업인데요, ..
-
NLP
형태소 분석기의 모호성 해소 성능을 평가해보자
문제 상황 한국어 텍스트를 기계를 통해 분석하다 보면 기계가 아직 얼마나 한국어를 모르는지 다시 한 번 느끼게 됩니다. 한국인이 봤을땐 누가봐도 명백하게 모호하지 않은 문장을 헷갈려할 때가 바로 대표적인 예일겁니다. 규칙 활용하는 동사 "묻다"와 불규칙 활용하는 동사 "묻다", 또 규칙활용하는 "물다"는 그 활용형이 서로 겹칩니다. 아래 표로 정리하면 더 명확해지죠: 묻다 2 묻다 3 물다 1 뜻 물건을 특정 장소 속에 넣고 다른 물질로 위를 덮어서 가리다. 대답이나 설명을 요구하며 말하다. 어떤 것을 윗입술과 아랫입술 사이에 또는 윗니와 아랫니 사이에 끼워 넣고 벌어진 두 입술이나 이를 다물어 누르다. 예문 거름을 묻다, 시신을 묻다 견해를 묻다, 근황을 묻다 담배를 물다, 젖병을 물다 활용 묻어, 묻..
-
NLP
[Kiwi] 문장 같은 고유명사 잘 추출해내기
고유명사 처리의 어려움 형태소 분석을 진행할 때 어려운 부분 중 하나는 고유명사(NNP) 처리입니다. 나머지 품사의 경우는 말뭉치를 잘 구축해두면 그 안에서 어지간한 패턴은 다 등장합니다만, 고유명사의 경우 그 특성상 끊임없이 새로 생성되기 때문에 아무리 말뭉치를 잘 구축해둬도 시간이 조금만 흐르면 새로 등장한 고유명사는 다 놓치게 됩니다. 그래서 대부분의 형태소 분석기는 사용자가 직접 사전 내에 새로운 단어를 삽입하여 이런 문제를 완화하고자 하지요. 새로 추가된 고유명사는 해당 문자열이 오분석되는 것을 막기 위해 대개 일반 분석 결과보다 더 높은 우선순위를 가지게 됩니다. 즉, 기존의 분석 결과를 새로 추가된 고유명사가 덮어쓴다고 할까요. 입력 분석결과 도전무한지식 도전/NNG 무한/NNG 지식/NNG..
-
테크닉
이진 탐색은 어디까지 빨라질 수 있을까?
수 많은 값들 속에서 특정 값의 위치를 찾는건 컴퓨터가 수행하는 작업들 중 가장 기본적인 작업이면서도 자주 쓰이는 작업입니다. 특정 이름으로 된 파일을 열거나, 주소를 이용해 특정 사이트에 접속하거나, 검색엔진에 검색어를 입력해 원하는 결과를 찾는 일 등 수많은 작업들이 결국에는 데이터의 위치를 찾는 작업으로 귀결되지요. 그래서 컴퓨터 과학에서는 이런 종류의 작업에 '검색 알고리즘(Search Algorithm)'이라는 이름을 붙여서 심도 있게 연구하고 있습니다. 이번 포스팅에서 다룰 내용은 값 집합이 고정되어 있는 상태에서 특정 값이 해당 집합 내에 존재하는지, 존재하면 어느 위치에 존재하는지를 찾는 것입니다. 따라서 값 집합에 새로운 값이 추가되거나 값 집합에서 특정 값이 제거되는 등 값 집합 자체가..
어원 이야기
-
어원 이야기 63. 세미나(Seminar)가 뭔가요?
세미나라는 단어가 언젠가부터 많이 사용되기 시작했어요! 언제 무슨 세미나를 하니깐 꼭 참여하라거나, 이번 세미나 주제는 ~라거나 하는식으로요. 근데 정작 세미나의 뜻이 뭐냐고 물어보면 다들 우물쭈물해버리고 맙니다. 그런데 보통 다음의 이미지를 떠올리는건 확실한 듯합니다. * 그냥 스터디는 아니다. 뭔가 스터디보다는 고급스러운 공부방법* 일방적인 강의 형식이 아니라 발표나 토론이 가미된 복합적인 수업 이런 정도의 뉘앙스를 가지고 있기에 (또 스터디라고 하면 싸보이지만 세미나라고 하면 뭔가 있어보여서) 여러 곳에 사용되는것일지도 모릅니다. 사전에 의하면 세미나는 교수의 지도 아래 학생들이 모여 연구 발표나 토론 등을 통하여 하는 공동 연구를 가리킨다고 합니다. 그런데! 이 세미나가 위의 사진에 나오는 못자리..
2014.04.12 15:03 -
어원 이야기 62. Z는 제트인가 지인가
알파벳 Z를 소리내어 발음하는 한국인이라면 누구나 한 번쯤 고민해봤을겁니다. 얘를 '제트'라고 읽어야 하나, '지'라고 읽어야 하나. 따지고 보면 별거 아니긴한데, 영어 관련 수업이나 영문과 수업을 듣고 있거나 외국인이 있다면 "영어 잘못 배운놈" 소리 듣진 않을까 걱정하면서 교수님의 발음을 따라가거나 원어민의 발음에 묻어가려고 해본 사람들 많을 것에요.근데 왜 많고 많은 알파벳들 중에서 하필이면 Z만 이렇게 말썽을 부리는 걸까. 갑자기 궁금해져서 그 근본적인 원인을 찾아보았습니다. (알파벳의 역사를 파고 올라가는건 시간이 오래걸리고 글이 장황해질거 같으니까 간단하게 생략하고) 알파벳은 유래가 긴 만큼 이름도 복잡했죠. 아마 그 이름은 셈조어 알파벳으로 추정되는 친구로부터 기원하는 거 같은데, 그 영향을..
2013.07.12 00:56 -
어원 이야기 61. 파마와 덴뿌라의 공통점!
뜬금없이 퀴즈를 던져봅니다. '파마'와 '덴뿌라'라는 단어의 공통점은 뭐가 있을까요? 잘 생각해보세요~ 대부분의 사람들은 두 단어가 다 일본어의 영향을 받았다는 것을 찾아낼 것입니다. 파마는 'permanent'라는 영어단어를 일본인들이 줄여부른것을 그대로 쓰고 있는 것이고, 덴뿌라는 뭔지 모르겠는데 딱 봐도 일본어 같으니까요. 그런데 그걸로 끝날것이면 어원이야기를 쓸 필요가 없겠죠? 그렇다면 두 단어의 다른 공통점은 무엇이 있을까요? 정답은 둘다 라틴어에서 유래했다는 것입니다! 와우! 파마는 라틴어 동사 permaneo에서, 덴뿌라는 라틴어 명사 tempora에서 유래한것 입니다. 먼저 파마의 유래에 대해서 살펴볼게요! 다들 아시겠지만, '파마'라고 부르는 기술은 열처리를 이용해 (반)영구적으로 머릿결..
2013.04.18 22:55 -
어원 이야기 60. 택시(taxi)와 세금(tax)의 관계
어릴적에는 taxi라는 이름이 전혀 이상하게 느껴지지 않았는데, 영어 공부를 하면서 tax가 세금이라는 뜻인걸 알게 되었습니다. 그후로 택시를 볼때마다 '저게 도대체 세금이랑 무슨 상관이 있길래 이름이 taxi인거지?'하면서 갸우뚱거렸죠ㅋ 근데 이제는 갸우뚱거리지 않아도 됩니다! 그 이유를 알았으니깐요~ 현재 사용되는 taxi는 taxicab의 줄임말입니다. 이제는 taxi라는 표현이 더 익숙하지만, 처음에는 taxicab으로 사용되었다는걸 알아둘 필요가 있습니다. (혹은 taxicab을 줄여서 cab이라고 부르기도 합니다. 역시 의미는 택시!) 그러면 taxicab은 어떻게 만들어진 말일까요? taxicab 역시 두 단어가 합쳐지고 줄여져서 만들어진 것입니다. taximeter cabriolet에서 앞..
2012.11.17 23:54 -
어원 이야기 59. lamp와 lantern
남포라는 말을 아시나요? 석유를 넣어서 불을 붙여 주위를 밝히던 등잔불이나 전등을 가리키는 말인데요, 이는 네덜란드어 lamp가 일본어를 거쳐서 우리나라에 유입되었고, ㄹ이 앞에나오는 걸 싫어하는 한국인들이 [ㄹ]을 [ㄴ]으로 바꿔버려서 남포라는 말이 된거죠. 각설하고ㅋ, 램프(lamp)말고도 랜턴(lantern)이라고 부르는 전등들도 있습니다. 뭔가 둘다 빛을 내서 주위를 밝히는 물건을 말하는데, 약간의 느낌 차이는 있지요. lamp는 뭔가 좀더 덩치가 크고 들고다니기보다는 내려두고 사용하는 느낌이라면, lantern은 들고다닐수 있는 크기가 작은 손전등 같은 느낌이랄까? 원인도유럽어에는 '빛을 낸다'는 뜻의 *lap-이라는 어근이 있었습니다. 여기서 나온 헬라어로 λάμπω(lampo, 남포..!와 ..
2012.11.16 17:49
그냥 공부..
-
그냥 공부
어떤 언어 모델이 좋을까 - 언어 모델을 평가해보자
이전 글(https://bab2min.tistory.com/666)에서는 언어 모델의 간략한 역사를 살펴봤는데요, 이번 포스팅에서는 한국어 데이터를 이용해서 이전 글에서 다뤘던 모델들을 학습해보고, 직접 평가를 수행하면서 각 모델들이 얼마나 잘하는지, 무엇을 잘하고 무엇을 못하는지 살펴보고자 합니다. 언어 모델을 어떻게 평가할까 정확도 언어 모델은 이전 단어를 바탕으로 다음 단어를 예측해주는 모델이라고 했습니다. 따라서 언어 모델의 성능을 평가하는 가장 간단한 방법은 모델이 예측한 단어들 중 확률이 제일 높은 것이 실제 단어와 얼마나 동일한지를 따져보는 것이지요. 이를 정확도(Accuracy)라고 합니다. 간단한 예로 4개의 단어로 이뤄진 문장 a, b, c, d가 있다고 할 때, 먼저 시작 문맥에서 예..
-
그냥 공부
어떤 언어 모델이 좋을까 - 언어 모델의 간략한 역사
언어 모델(Language Model)은 특정 문장(=단어의 나열)이 등장할 확률을 계산해주는 모델입니다. 문장에 대해 확률을 계산할 수 있다는 건, 단어(혹은 문장)를 적절하게 선택하거나 생성해야하는 경우 여러 후보 중에서 더 적절한(확률이 높은) 후보를 선택하는 데에 쓰일 수 있다는 뜻이지요. 이 때문에 기계번역, 음성 인식, 철자 교정, OCR 등 언어와 관련된 여러 과제에서 널리 쓰이고 있습니다(이에 대해서는 예전에 몇몇 포스팅에서 간략하게 다룬 적이 있습니다). 게다가 최근 GPT-3와 같은 강력한 언어 모델이 등장하면서 언어모델이 위와 같이 비교적 단순한 과제뿐만 아니라 대화나 긴 글을 통채로 생성하거나, 주어진 예문이나 설명을 바탕으로 새로운 문제를 해결하는 것까지도 가능하다는 것이 밝혀져서..
-
그냥 공부
[토픽 모델링] Generalized DMR 토픽 모델
Dirichlet Multinomial Regression(DMR)이라는 토픽 모델이 있습니다. 예전 포스팅에서 간단하게 다뤘던 적이 있는데요, 간단하게 정리해보자면, 단순 LDA 모델의 경우 문헌별 주제 분포만을 살펴볼 수 있는 반면, DMR은 메타데이터별 주제 분포를 추정할 수 있는 강점이 있습니다. 여기서 메타데이터는 문헌이 가지는 실제 데이터를 제외한 부가적인 변수들을 가리킨다고 생각하시면 쉽습니다. 예를 들어 저자명이나 저널명, 작성 연도 같은 데이터가 있겠습니다. 즉, DMR을 이용하면 작성자별 주제분포나 작성 연도별 주제 분포 등을 계산하는게 가능해진다는 것이지요. 단순하게 문헌별 주제분포를 추정하는것보다 훨씬 유용하게 쓰일 수 있을 것이라고 짐작이 가지요?그런데 DMR 모델에는 치명적인 약..
-
그냥 공부
[토픽 모델링] Dynamic Topic Model
LDA 토픽 모델링이 개발된 뒤 처음 적용된 분야는 학술 문헌 분석과 관련된 곳이었습니다. 수없이 쏟아지는 논문들에서 중요한 주제들을 찾아내서 분류하는 작업에 LDA가 널리 쓰였지요. LDA가 학술 문헌 분석에 성공적으로 쓰이자, 트렌드 분석에도 토픽모델링을 사용하려는 시도가 등장하기 시작했습니다. 대표적인 것이 Topic over Time과 Dynamic Topic Model인데, 본 포스팅에서는 Dynamic Topic Model에 대해서 살펴보도록 하겠습니다.Blei, D. M., & Lafferty, J. D. (2006, June). Dynamic topic models. In Proceedings of the 23rd international conference on Machine learni..
-
그냥 공부
[토픽 모델링] 토픽에 자동으로 이름 붙이기
토픽 모델링을 실시하고 나면 주제별로 단어 분포가 계산되어 나옵니다. 그리고 각 문헌들에 어떤 주제가 얼만큼씩 분포하는지도 알아낼 수 있습니다. 이 때문에 대량의 문헌이 어떤 내용을 다루고 있는지 파악하기 위해서 자주 사용되지요. 근데 문제는 각 주제가 주제 번호 #1, #2 등으로 구분될 뿐, 실제 주제가 다루는 내용을 알기 위해서는 주제별 단어 분포를 확인해야 합니다. 이러면 불편하기 때문에 사람이 직접 주제별 단어 분포를 보고 주제에 이름을 붙여주는 작업을 진행하죠.그래서 주제 개수가 너무 많으면, 주제에 일일히 이름을 붙여주기 고되기 때문에 보통 토픽 모델링의 주제 개수는 10~100 개 정도로 한정합니다. 사실 문헌 집합이 더 크면 주제 개수를 더 키워야하는데, 그러면 현실적으로 그 많은 주제들..
-
그냥 공부
그림으로 깁스샘플링 이해하기
깁스 샘플링에 대해서는 토픽 모델링 공부를 하면서 귀에 피가 나도록 들었었는데요, 사실 그 실체를 정확하게 파악하는데에는 꽤 오랜 시간이 걸렸었습니다. 막연하게만 이해하고 있던 깁스 샘플링을 정확하게 깨닫게 된 건 어떤 2장 짜리 논문에서 본 그림 덕분이었는데, 이번 포스팅에서는 그걸 공유해보고자 합니다.참고한 논문은 다음과 같습니다. Breslaw, J. A. (1994). Random sampling from a truncated multivariate normal distribution. Applied Mathematics Letters, 7(1), 1-6. 다변수 정규 분포다변수 정규 분포(Multivariate Normal Distribution)에 대해서는 상관 토픽 모델 포스팅에서 살짝 설명..