STOP THE DAB!!!!!!!!! DABBING PROMOTES DRUG USE!!!!!!!!!!!!!!! Check out my other dabbing promotes drug use projects!!! ㅕ키ㅔ츄ㅑㅋ응아 ㅝㄴㅇ 쿄ㅛㅍㄹㅎ튜허ㅓㅎㅠㅅㄴ마 한국어로 랜덤 텍스트를 생성해봅시다. 어떻게 할 수 있을까요? 가장 간단하게는 고양이 한 마리가 키보드를 밟고 지나가게 할 수 있습니다. 그렇게 하면 이와 유사한 결과가 나오겠죠: ㅕ키ㅔ츄ㅑㅋ응아 ㅝㄴㅇ 쿄ㅛㅍㄹㅎ튜허ㅓㅎㅠㅅㄴ마 하지만 이렇게 글자를 무작위로 나열하는 것은 아무런 의미를 가지지 않습니다. 일반적으로 한국어 텍스트는 초성, 중성, 종성으로 구성된 낱개의 음절들이 모여 단어를 이루고 [1] 이 단어들이 다시 모여 문장을 이루는데, 글자들을 랜덤으로 타이핑해서는 음절이나 단어를 이룰 수 있는 확률은 극히 희박하겠죠. 그래서 이번에는 고양이에게 음절을 타이핑하는 방법을 (어떻게든) 가르쳐봅니다: 로켘불됴약 니앙굷 췡바이꿻노기 이렇게 하고 보니, 한국어에서 일반적으로 보기 힘든 음절들이 자주 등장했다는 사실을 알게 됩니다. 보통 한국어에서는 ‘이’가 ‘앙’보다는, 특히 ‘꿻’이나 ‘굷’ 같은 음절보다 훨씬 빈번하게 등장하죠. 이번에는 일반적인 사용 빈도가 높은 음절들을 더 자주 등장시키도록 고양이를 다시 교육시킵니다: 다이는가 고다하에지 요그이데습 그렇게 해도 얻은 문자열이 온전한 문장이 되지는 않습니다. 그렇다면 각의 음절을 독립적으로(independently) 생성하지 말고, 선행하는 음절이 무엇이냐에 따라 현재의 음절을 생성해보면 어떨까요? 그러면 ‘하’ 다음에는 ‘다’가 자주 등장할 것이고, ‘그’ 다음에는 ‘리’와 ‘고’가 연속적으로 등장할 가능성이 높아질테니 우리가 실제로 쓰는 단어도 나올 수 있지 않을까요? 이런 과정을 수학적 용어로는 마코프 체인 이라고 합니다: 국의의하되고인정부가는 요구한 대통령은 2조 사면 기밀과 헌법률로 위하의 위하며 직전의 음절 하나가 무엇이냐에 따라 현재의 음절을 생성한 위의 “문장”은 “bigram” 또는 “2-그램”으로 생성된 것이지만, 만일 더 말이 되는 문장을 만들고 싶다면 직전 음절 여러개를 보는 “3-그램” 또는 “4-그램”을 시도해볼 수도 있습니다. 또는, 음절 단위보다 한 단계 높은 형태소 단위에서 문장을 생성해보는 것도 가능합니다. 실제 코드로 한 번 해보죠.