Mac OS

この投稿は5年半前の記事です。 情報が古くなっている可能性があるので、その点ご了承ください。
2012 年 4 月 5 日 1,905日前)
5,023文字 (読了時間12分)

SPONSORED LINK

現在、文学機械を作るという使命感の元、自然言語処理を勉強するべく『入門 自然言語処理』を紐といています。

入門 自然言語処理

入門 自然言語処理 [書籍]

著者Steven Bird, Ewan Klein, Edward Loper

クリエーター萩原 正人, 中山 敬広, 水野 貴明

出版社オライリージャパン

出版日2010 年 11 月 11 日

商品カテゴリー大型本

ページ数592

ISBN4873114705

Supported by amazon Product Advertising API

基本的にはPythonのNLTK(Natural Language Tool Kit)を使いながらお勉強していくのですが、この本の第七章でつまづいたので、シェアしておきます。ちなみに僕の環境はMac OS X 10.7.3でPythonはMacportsで入れた2.6、NLTKも同じくMacportsで入れました。

MegaMとか言われる

自然言語処理にまつわるアルゴリスムの紹介を読んで感心しつつひたすら写経していくのがこの本の読み方なのですが、普通に進めていると、第七章 7.3.3でエラーが発生。MegaMが入ってねーぞとか言われます。

===========================================================================
  NLTK was unable to find the megam executable!  Use config_megam() or
  set the MEGAM environment variable.

    >>> config_megam('/path/to/megam')

  For more information, on megam, see:
    <http://www.cs.utah.edu/~hal/megam/>
===========================================================================

MegaMってなんやねんと思って調べると、NLTKのページに小さく書いてあります。エントロピーを計算するときのライブラリのようですね。

MegaM: http://hal3.name/megam/megam_src.tgz (requires ocaml; edit Makefile to set WITHCLIBS to point to location of ocaml .h files; locate these using macports with port contents ocaml, install megam binary, e.g. to /usr/local/bin and set MEGAMHOME to point to this directory).

え、こんどはocaml(…おかむら?)が必要らしいです。言われるがまま、macportsでインストールします。

sudo port install ocaml
which ocaml
# /opt/local/bin/ocaml

ちょっと調べてみたところ、ocamlは「オーキャメル」と読むらしいです。

さて、言われるがままMakefileを編集します。./configureじゃない時点で僕はもうなにがなんだかわからないのですが、唯々諾々と従います。

cd ~/Applications
wget http://hal3.name/megam/megam_src.tgz
tar xzvf megam_src
cd megam_0.92
vim Makefile

NLTKのサイトに書いてある通り、WITHCLIBSをocamlのヘッダーファイルが入っているフォルダに直します。macportsで入れたやつは普通のUnix系とは変わってしまうので、変えた方が良さそうな奴を片っ端から変えます。

--- Makefile
-CAMLC = ocamlc -g
+CAMLC = /opt/local/bin/ocamlc -g
-CAMLOPT = ocamlopt -unsafe -ccopt -O4 -ccopt -ffast-math -inline 99999
+CAMLOPT = /opt/local/bin/ocamlopt -unsafe -ccopt -O4 -ccopt -ffast-math -inline 99999
-CAMLDEP = ocamldep
+CAMLDEP = /opt/local/bin/ocamldep
-CAMLLEX = ocamllex
+CAMLLEX = /opt/local/bin/ocamllex
-CAMLYACC = ocamlyacc
+CAMLYACC = /opt/local/bin/ocamlyacc
-WITHCLIBS =-I /usr/lib/ocaml/caml
+WITHCLIBS =-I /opt/local/lib/ocaml/caml

これでmakeします。

make
# clang: warning: argument unused during compilation: '-fno-defer-pop'
# clang: warning: argument unused during compilation: '-no-cpp-precomp'
# ld: library not found for -lstr
# clang: error: linker command failed with exit code 1 (use -v to see invocation)
# File "fastdot_c.c", line 1, characters 0-1:
# Error: Error while building custom runtime system
# make: *** [megam] Error 2

エラーが起きました。-lstrがないよと怒られています。Makefileの指定がおかしいのかと思ってWITHSTRの項目を直してみましたが、意味なし。

-WITHSTR = str.cma -cclib -lstr
+WITHSTR = /opt/local/lib/ocaml/str.cma --cclib -lstr

さんざんググった挙げ句、こんな記事に行き当たりました。最近、stackoverflowの問題解決率高いですねー。

The problem appears to be that this Makefile specifies which C compiler and libraries the OCaml compiler should use as its back-end, using the -cc and -cclib options. On most systems, it will work OK to just specify the standard C compiler as the back-end for OCaml. On Mac OS X, there are 32-bit/64-bit architectural complications. Since you can compile OCaml successfully without this Makefile, I’d suggest that the OCaml compiler already knows how to compile and link OCaml programs. So you might try just removing the -cc and -cclib options from the Makefile.

gcc ld: symbol(s) not found for architecture x86_64

要するに、ocamlのコンパイラocamlcは-cclibオプションで使うCライブラリを決めるんだけど、macの場合は32bitと64bit両方あるんで下手にオプション指定しないで、ocamlcに自動で読み込ませた方がいいよってことですね。

それでは、この人の言う通り、Makefile内の-cclibオプションを全部消します。

---Makefile
-WITHGRAPHICS = graphics.cma -cclib -lgraphics -cclib -L/usr/X11R6/lib -cclib -lX11
+WITHGRAPHICS =graphics.cma
-WITHUNIX = unix.cma -cclib  -lunix
+WITHUNIX =unix.cma
-WITHSTR = str.cma -cclib -lstr
+WITHSTR =str.cma
-WITHBIGARRAY = bigarray.cma -cclib -lbigarray
+WITHBIGARRAY =bigarray.cma
-WITHNUMS = nums.cma -cclib -lnums
+WITHNUMS =nums.cma
-WITHTHREADS = threads.cma -cclib -lthreads
+WITHTHREADS =threads.cma
-WITHDBM = dbm.cma -cclib -lmldbm -cclib -lndbm
+WITHDBM =dbm.cma

これでmakeします。

make

通りました。バイナリはどこにあるのかなーと思ったら、ダウンロードしたフォルダにありました。なので、これに対してシンボリックリンクを張ります。

#ユーザー名は自分のに変えてください
ln -s /Users/guy/Applications/megam_0.97/megam /Users/guy/bin/megam
which megam
#/Users/guy/bin/megam

これでmegamはインストールできたっぽいので、NLTKのプログラムに戻り、指示通りPython内で設定を行います。

nltk.config_megam('/Users/guy/bin/megam')

さて、これで動くようになったのですが、トレーニングさせてる間にエラーメッセージを吐き続けるんですよね……

chunker = ConsecutiveNPChunker(train_sents)
#optimizing with lambda = 0...
#optimizing with lambda = 0...
#optimizing with lambda = 0...
#これがずっと続く

ソースを追ってみましたが、わかりませんでした。同じエラーが起きている人はいるのですが、解決はしていないっぽいです。というわけで、大変尻切れトンボですみません。

自然言語処理を学んでいる感想

まだ途中なので一概には言えませんが、基本的には機械学習の一分野なので、統計解析を知っていないとどうしようもないなーという感じがします。なので、これが終わったら統計解析の勉強を本格的にやる必要がありますね。

ナイーブベイズとか、交差検定とか、色んなアルゴリスムが出てくるので、これまでのWebサイトを作るためのプログラミングとは違って骨太な感じがします。基本を知れば具体的にやりたいことも固まってくるんじゃないかなーと気長に構えて終わりにします。

 

フォローしてください

ここで会ったのもなにかの縁。
高橋文樹.comの最新情報を見逃さないためにもフォローをお願いします。
めったに送らないメルマガもあります。

SPONSORED LINK

この記事について

この記事はが2012 年 4 月 5 日にプログラミングの記事として公開しました。

高橋先生の電子書籍

高橋先生の電子書籍

Amazonで電子書籍も買えます。

好きな言葉

世界のみなさん、あなたの生命か詩か、二者択一、どちらかを選びなさい。もし詩に対して真剣な処置を講じなければ、文明は万事休することになる。遅疑逡巡してはならない。明日からは新しい時代が足を踏み出すだろう。詩はもはや存在しないだろう。古びた霊感に対してあまりにも重過ぎる竪琴は破壊されるだろう。詩人たちは虐殺さるべきである。

— アポリネール

高橋先生の処女作

『途中下車』高橋文樹

2001年幻冬舎NET学生文学大賞受賞作です。

Web制作やります

Web制作やります

Web制作のご依頼は株式会社破滅派へ

不定期メルマガ

高橋文樹.comでは、不定期でニュースレターを配信しています。滅多に送らないので是非購読してください。

高橋文樹.comではプライバシーポリシーに準じて登録情報を取り扱います。