바라바시 교수가 쓴 링크라는 책을 흥미롭게 읽은 기억이 있는데, 그의 최근 논문을 소개하는 블로그를 보고 반가운 마음에 트랙백 걸려고(..;) 씁니다. 그래서 내용 상 큰 관련은 없어요.

Zipf’s Law란, 간단히 말해서 빈도(Frequency)는 지위(Rank)에 반비례한다는 얘기다. 회사에서 직급 별 인원수를 생각해보면 쉽다.

이 Zipf라는 분은 사실 언어학자인데, 문헌에 등장하는 단어의 분포를 연구하다가 이 규칙을 발견한 것으로 보인다. (확실하지 않은 것은 항상 끝을 흐려버림..;;) 즉, 단어들 사이에 지위라는 것이 있다고 할 때, 별로 중요하지 않은 건 자주 많이 등장하고 좀 비중이 있다 싶은 것은 드물게 나타나더라는 (누구나 직관적으로 알고 있는) 사실을 통계적으로 입증하고, 더 나아가 그 사이의 관계를 수식으로 밝힌 것이다.

검색엔진을 얘기할 때 빼놓을 수 없는 TF-IDF에도 이 규칙이 반영되어 있다. TF-IDF란 단어와 문서 사이의 관련도를 측정하는 방식인데, TF (Term Frequency)는 기본적으로 문서에 해당 단어가 몇 번 나오는가를 가리키고, IDF (Inverse Document Frequency)는 그 단어가 나오는 문서가 몇 개나 되는가의 역(inverse)을 뜻한다. 이 둘을 곱하는 것이 TF-IDF다.

TF만 가지고 관련도를 계산하면, 흔하게 쓰이는 단어들 사이에서 희귀한 그래서 상대적으로 검색할 때 의미가 큰 단어가 질식해버릴 수 있다. 그런 위험을 방지하는 한 방법은 각 키워드의 가중치(weight)를 계산해서 TF에다가 반영해주는 것이데, 그게 바로 IDF다. IDF의 정의를 살펴보면 빈도의 역이라는 점에서 Zipf’s Law와 일맥상통하는 것을 알 수 있다. (물론, 등장 문서의 빈도가 아니라 키워드 자체의 빈도를 쓸 수도 있겠지만 실험적으로 IDF가 더 낫다는 것 같다.)

쓰고 보니 예전에 썼던 글의 반복이네요. 게다가.. 금요일 저녁이라 급한 마음에 길게 쓰고 말았습니다.
Posted by 4four
MacPorts라는 OSX 용 패키지 관리자를 이용해서 Common Lisp 개발 환경을 세팅하는 방법을 정리해둔다.

1. Common Lisp 구현 설치하기 (sbcl)

살펴보니까 Common Lisp의 구현에도 참 여러 종류가 있는데, 사람들이 많이 쓴다는 sbcl (Steel Bank Common Lisp, http://www.sbcl.org)을 깔기로 했다. 터미널 프롬프트에 다음과 같이 입력하자.

sudo port install sbcl

시작하려면 터미널 창에 “sbcl” 이라고 치면 된다. 참고로, 끝내는 명령은 “(quit)“이다. 간단하게 Lisp 언어의 맛만 보려면 이것으로도 충분할 것이다. 하지만 자바 프로그래밍이 어디 메모장과 JDK만으로 되던가?

2. 개발 환경 구축하기 (Emacs + Slime)

많은 사람들이 Lisp 개발 도구로 이맥스를 추천하는 것을 보고 나도 대세에 따르기로 했다.

2.1 이맥스 설치


sudo port install emacs

2.2 SLIME 설치

SLIME (Superior Lisp Interaction Mode for Emacs, http://common-lisp.net/project/slime)은 Lisp 개발을 보다 편리하게 해주는 이맥스 모드이다. 자세한 기능은 홈페이지의 설명을 참고하자.

sudo port install slime

설치한 뒤에는 사용자 기본 디렉터리의 .emacs 파일에 (없으면 만들어서) 다음의 코드를 추가해야 한다.

(require 'slime-autoloads)
(setq slime-lisp-implementations
     `((sbcl ("/opt/local/bin/sbcl"))))
(add-hook 'lisp-mode-hook
           (lambda ()
             (cond ((not (featurep 'slime))
                    (require 'slime)
                    (normal-mode)))))

(eval-after-load "slime"
   '(slime-setup '(slime-fancy slime-banner)))

이제 터미널에서 “emacs” 명령으로 이맥스를 실행시켜서, M-x (Alt와 x를 함께 누르거나, ESC와 x를 차례대로 누르기) 한 뒤에 “slime”이라고 치면 반가운 CL-USER> 프롬프트가 나타난다.

Emacs slime

Emacs slime 모드에서 보는 Hello, world


이것으로 터미널 용 환경 세팅은 끝났다. 하지만 터미널에서만 작업하는 것은 아무래도 좀 불편하니까 이번에는 GUI 버전의 이맥스를 깔아보자.

이제까지 했던 것처럼 “sudo port install emacs-app” 명령으로 GNU Emacs를 설치할 수도 있지만 그것보다는 그냥 Aquamacs Emacs (http://aquamacs.org)를 따로 내려받아서 설치하기를 권한다.

Aquamac Emacs

Aquamacs Emacs


그리고 .emacs 파일을 열어서 (require 'slime-autoloads) 위에 (add-to-list 'load-path "/opt/local/share/emacs/site-lisp/slime")를 추가해준다. 추가하지 않으면, 이맥스가 초기 구동할 때 에러 메시지가 뜨고, M-x slime이라고 해도 알아듣지 못한다.

끝.
Posted by 4four
종종 너무 바빠서 혹은 잡일이 많아서 창조적인 아이디어가 나오지 않는다거나 정말로 중요한 일을 못 하겠다는 한탄을 하게 된다. 하지만 어느날 갑자기 산신령이 나타나 “그런 족쇄을 없애줄테니 지금부터는 아무 걱정 말고 하고 싶은 일을 해보게나.” 라고 한다면? 그러면  창조적으로 일하며 높은 성과를 낼 수 있을까?

나의 개인적인 경험이기는 하지만, 지금까지 좋은 아이디어를 떠올리거나 높은 작업 성과를 낸 것은, “적당히” 바쁘면서 잡일도 하고 또 일정의 압박을 받던 때였던 것 같다. 예를 들어, 정말로 하고 싶지 않은 일로 밤을 새며 빈둥(-_-)대다가 문득 좋은 아이디어가 ‘툭’ 떠오르기도 했고, 없는 아이디어를 짜내라는 압박에 미친듯이 관련 문헌을 찾아읽고 그래도 소득이 없어서 새벽 4시까지 멍하니 앉아있던 중에 갑자기 영감을 얻은 적도 있다.

아, 오해하지는 말자. 절대로 ‘쪼아대면 어떻게든 결과는 나온다’는 말을 하려는 게 아니다. 단지 적절한 제약은 건강한 긴장감을 자극하여 효율성과 창의성을 높여주는 것이 아닐까 라는 말이다. 아무튼 요즘들어 부쩍 그런 생각이 늘던 차에 아주 흥미로운 글을 발견했다.

훌륭한 작업이 나오는 환경에 대한 흥미있는 경험담들, 아리송하고 역설적인, 그 알수 없는 양상들. (번역: 이광근)

내용의 일부분만 살짝 가져온다.

먼저 <The Art of Computer Programming>의 저자 크누스(Knuth) 교수의 글이다.

“내 인생에서 제일 창의적이었던 일들을 꼽으려고 회고해 보면, 그것들이 모두 어느 한 시절, 가장 많은 제약조건과 잡무로 치이고 있었던 시기에 일어났다는 것을 알게 된다. 예를 들어 1967년이 되겠는데, 그 해는 내 인생에서 가장 정신없던 시절이었지만 동시에 내 연구중에서 중요하다고 평가받는 많은 결과들이 샘솟았던 행운의 해이기도 하다. (중략) 그 시절을 생각하면 종종 의문이인다, 내가 그 해에 보다 더 안정적이었다면 어땠을까, 내 연구가 과연 더 생산적이었을까 덜 생산적이었을까?“

또 유명한 물리학자 파인만은 이렇게 회고했다.

”고등과학원의 과학자들은 엄청난 두뇌 때문에 특별히 스카웃되어 최대한 자유롭게 연구하고 생각할 수 있는 환경이 주어졌다. 숲속의 멋진 집에 살면서 오직 생각하고 연구만 해도 되는 꿈같은 환경, 강의의 의무도 없이, 어떠한 의무조항도 아무 것이 없는. (중략) 뭔가를 할 수 있는 모든 기회가 주어졌는데 어떤 연구 아이디어도 나오지 않았단 말이다.“

마지막으로는 <장미의 이름>으로 유명한 움베르토 에코의 얘기를 들어보자.

”세계 창조의 작업을 자유롭게 하기 위해서는 제약 조건을 만들어 심어 둘 필요가 있다. 시에서 이러한 제약 조건은 음률, 각운, 율동의 형태로 시 속에 자리를 잡는다.“

자유로운 창조작업을 위해서는 오히려 제약 조건이 필요하다는 말이 참 인상깊다.

물론 이들 중 누구도 제약(이 있는 환경)과 창의성(생산성) 사이의 관계를 명쾌하게 설명한 것은 아니다. 하지만 그래도 각 분야에서 대가로 인정받는 사람들이 털어놓은 경험담이라면 믿어봐도 괜찮지 않을까. 그런 의미에서 내일은  ”~때문에 안되겠어”라는 말 대신 “~지만 그래도 그 덕분에”라고 한 번 스스로를 다독여보자.
Posted by 4four