とある人工知能の雑記帳

人工知能(主に自然言語処理)とかに関する覚え書き

mac に classias をインストールする際に詰まったところ

ブログ見なおしてみたら実に7ヶ月ぶりの記事になる。サボりすぎた・・・

前回の記事から今までの間、無事大学院に進学できてたり、去年のスカスカなスケジュールとは打って変わって授業にハンパない数の勉強会、TAやアルバイトを白目になりながらこなしたり、やっとのことで夏休みになったかと思いきや2ヶ月近くのインターンシップで気づいたら秋になってたりと、それはそれは色々あった。それを書くのも面白いと思うけどまた別の機会にしようと思う。(書くとは言っていない)

実は9月に、研究室の合宿も兼ねた自然言語処理若手の会(YANS)に参加して来た。そこで人生初のハッカソンも経験できた。ちなみに2位だった。やったぜ。

NLP若手の会(YANS) Web Site - YANSサイトへようこそ

そのハッカソンで、同じチームの @true0024 くんが classias という分類のための機械学習ツールを使って大活躍していたので、こりゃいいと思い合宿から帰って早速自分の mac にインストールすることにした。しかしこれが上手くいかない。

Classias - A collection of machine-learning algorithms for classification

ちなみにこれをインストールするためには libLBFGS というライブラリも必要になる。現時点(2014/10/16)の最新バージョンは 1.10 だけど classias のホームページには 1.8 と書いてある。どちらでもいいとは思うが、一応念のため 1.8 をインストールすることにした。最新版は公式サイトで配布されているが、古い 1.8 はダウンロードできない。が、実は classias の公式サイトで 1.8 のダウンロードリンクが残っている。まだ生きてたらこれをダウンロードしよう。

$ wget http://www.chokkan.org/software/dist/liblbfgs-1.8.tar.gz

もしダメだったらどんまい。多分あまり関係ないからなんとかなる。

とまぁ、ここ(ダウンロード)までは良かった。ここから先、make しようとするとエラーの嵐。 libLBFGS もまともに入れられない。なんじゃこりゃ。

すると @true0024 くんからこんなツイートが。

リンク先に飛ぶと、こんな内容が。

Apple released Mavericks today, and MacPorts works great on the new OS (assuming you use trunk/base). However, there is one big change that I want to point out to other MacPorts developers: the C++ runtime. The default C++ runtime is now libc++. libstdc++ is still available for binary compatibility, but newly built applications and frameworks should use libc++. This means that clang++ should be used for all C++ code since g++ does not support libc++.

どうやら Mavericks にアップデートされたことで、デフォルトの C/C++コンパイラが従来の gcc から LLVM のものに変わったようだ。でもここで紛らわしいのは、 LLVM になっていても、名前は gcc のままということ。試しに、

$ which gcc
$ gcc --version

と打ってみればデフォルトでどのコンパイラを使っているかが分かる。自分の環境ではこうだった。

Peinan@Mercury:~
$ which gcc
/usr/bin/gcc
Peinan@Mercury:~
$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

お気づきいただけたのだろうか。そこにはハッキリと Apple LLVM と書いてある。そう、デフォルトの gccgcc の皮を被った LLVM だったのだ!

ということで、自分で本物の gcc を入れて、ビルドする際にそれを参照する必要がある。以下その手順。

まず、MacPortsGNU gcc 4.4 を入れます。

$ sudo port install gcc44

何もいじっていなければ /opt/local/bin に実行ファイルがあるはず。

次に libLBFGS のビルド。

$ CC=/opt/local/bin/gcc-mp-4.4 ./configure
$ make
$ sudo make install
$ hash -r

嵐だったエラーが嘘のようにすんなりと行けた。 GNU gcc SUGEEE!

次にいよいよ classias のビルド。

$ CXX=/opt/local/bin/g++-mp-4.4 ./configure --with-liblbfgs=/usr/local/
$ make
$ sudo make install
$ hash -r

エラーが出なかったら、 classias-train -h など試してみて下のようなヘルプ画面が出たらビルド成功!

Classias 1.1 trainer Copyright (c) 2008,2009 Naoaki Okazaki

USAGE: classias-train [OPTIONS] [DATA1] [DATA2] ...
This utility trains a model from training data set(s).

  DATA    file(s) corresponding to data set(s) for training; if multiple N files
          are specified, this utility assigns a group number (1...N) to the
          instances in each file if no file is specified, the utility reads a
          data set from STDIN; if a file name has an extension '.gz', '.bz2',
          and '.xz', the utility uses 'gzip', 'bzip2', and 'xv' to decompress
          the input file
(略)

ちなみに自分がここで犯した間違いがいくつか。

  • CXX ではなく CC を使ってた:libLBFGS は C コンパイラで実行できたが、classias は C++ コンパイラを必要としていたため、CXX で指定する必要があった。念のため両方指定しておいた方がいいかも?
  • --with-liblbfgs=[DIR] オプションを入れていなかった。正直これがどれくらい効いているかは未知数だったけどとりあえずあった方が安心できる。
  • CCCXX./configure のあとに書いていた。まあ普通に考えて先にパスを通しておくべきだから前に書くべきだよね。./configure したあとにパスを通すのって意味ないよね。

知ってて当たり前な知識かもしれないけど、自分であれこれ調べるのは(多少は勉強になるけど)限界がある。けど知ってる人に聞くと一瞬だったりする。その大切さを実感した。あと自分の知識の無さも痛感した。実は gccLLVM などのコンパイラの仕組みやどういう位置づけなんかなど、まだ良く分かっていない部分が多いので誰か詳しい人がいたら教えて下さい!

ブログを書くまでがYANSとのことなので、これでようやく自分のYANSも終わった、はず・・・長い夏だった。

自然言語処理年次大会@北海道(人間関係について思うところ)

初めての学会に参加した。 専門的な内容は後々書く(かもしれない)として、今感じたことを書いていこうかと。

今日、というか昨日(3/18)に大会の本会議が始まって、いよいよ朝から晩まで研究発表詰めになるかと思うと、朝から若干憂鬱な気分だった。 でも、よくよく考えると悩みの種はそこじゃないことに気づく。というのも、確かに研究は分からないことがまだまだ多いけれど、それらは努力次第で理解できるようになるし、そもそも面白い研究テーマがたくさんあるからよく分からなくてもなんとなくワクワクするものが多かった。では何が引っかかっていたか。人間関係である。 恥ずかしい話、自分はあまり自己表現が上手い類いの人間ではなく、人見知りが割と激しくて最近実はコミュ症なんじゃないかと結構本当に心配になってたりする。(自然言語処理してるのに喋るのが下手というのもどうかと思うけど…)だから人と接することが多くなるこのイベントはちょっとした懸念事項だった。しかも会議が終わったあとに懇親会とかいうラストダンジョンが残ってるじゃん。更にその後に二次会もあるらしい…と考え始めるとテンションだだ下がり不可避。 なんかダラダラと長くなりそうなので途中は割愛して結論を言うと、懇親会は楽しかった。アルコールの力借りてちょっと勇気を振り絞って色んな人に話しかけたり、紹介して頂いたりしてなんとか会話が続くようにはなり、初対面の人と話すのもなんとかなるようにはなった。アルコールの力は偉大なり。

でも気になったのが、一人コミュ力がすごい人がいた。以前に会ったことがあるんだけれど、しばらく会わないうちに交流の輪がとてつもなく広がって、いつの間にか主要な人物たちとほとんど知り合いになり、気がつけばその人たちとやたら親密に話たりしてた。ぶっちゃけものすごく羨ましいのだが、それを実行しようにもどこから始めるのか、なぜそううまくいくのかを理解できない俺には到底無理な相談だった。 そこでまずその人がコミュ力が高い理由を探ろうと思った。そのメソッドを自分のものにできたらと。 見てきた中で行った行動をまとめてみると、

  • 臆することなく色んな人に話しかける
    • プライドを高くせずに親密しやすさを相手に感じさせる
  • 色んなイベントに顔を出す
    • 顔を覚えてもらう努力をする
  • 話が面白い、惹きつけられる
    • こればかりは経験というか才能というか

もっと色々あると思ったら、自分の中でまとめてみるとこの3つに収束した。 結局のところ、

  1. プライドを殴り捨てて色んな人に話しかけて
  2. 本でも経験でも何でもして会話のコツというかパターンみたいなものを掴んで
  3. その繋がりを強固なものにすべくこまめの連絡や会話
  4. 面倒臭がらないこと≒行動力(←これ超重要!)

というのがベースのパターンなのかな。これはあくまで人と接する上での基本的な部分にすぎないと思うし、さらっと書いてるけどいざやってみると結構難しいかったりする。2とか、そう簡単にコツ掴めたら苦労しねぇよ!と書いてて自分に突っ込みたくなったけど、それでもやるしかないんです。やっていくうちに慣れていくんです。あれ、根性論になってしまった…

ここまで書いてなんだけど、こんな努力より、研究とか開発とか真面目にやって国際会議とかに通して知ってもらった方が何もしなくても勝手に知れ渡るし長続きするよね……ま、まぁ最初いきなり国際会議とか通せないから…両方大事だから…(震え声

Macを買った時に入れるアプリとその設定など

卒論がなんとか終わってようやく落ち着いてきた。時間の流れは不思議なもので、やる時は大変でも過ぎてみればいい経験だったと思える。実際のところ、12〜2月の追い込みの期間を通して、プログラミングからTeXの扱い、論文の書き方までと、自分の能力はかなり上がったとはっきり感じることができた。しかしできればもうやりたくないというのが本音である。慣れる時が来るのか分からないけどつらいものはやはりつらい。特に論文執筆。

さて、話が逸れたが、昨日新しくMacBookAirを頂いた。これ以外にも増税前にAppleの学生割引キャンペーンと合わせて個人用にMacBookProを買おうと検討している。買い替えの場合はデータをそのまま移行すればいいが、初めてMacを買う人(特にプログラミング用途で使う人)のために、自分がMacを使う上で必要不可欠なアプリたちを紹介してみる。あくまで現時点でのものなので、これからもっといいものを見つけることがあるかもしれないけどそこはおいおい追加していく。予定。

メインブラウザ。これがないと何もできない。Googleのアカウントがあれば拡張機能やブックマークなどがすべて自動で同期されて手間が省けて非常に便利。拡張機能が色々あるが、それはまたの機会に。

Google日本語入力。これもないと支障が出るレベル。

あるのとないのとはコードを書く速度が段違い。今度ST2で使うパッケージとか設定について書く予定。

画面分割がデフォルトのターミナルよりできる上に、柔軟な設定が魅力的な代替ターミナル。個人的には背景を透過Blurできるのが気に入っている。

タッチパッド使うなら必須。特にブラウジングする際の操作性が圧倒的上がる。

パッケージ管理システム。欲しいツールやライブラリは大抵ここで見つかる。

自分はPythonerなので。このツールはインタプリタ言語の良さをうまく引き出してる。ちょこっと短いスクリプトを試したいときに重宝にする。ちなみにインストールはeasy_installを使ったほうが手っ取り早い。

オンラインストレージ

同期の速さと安定性、復元可能など使いやすさはダントツ。容量が少ないのがネック。でもソースコード、ドキュメントファイルに限定すればわりと余裕。

容量はあるが、自分の場合なぜか同期が上手くいかないことがたまにある。同期の速度もDropboxに劣るように感じる。主に大きいPDFや画像、動画を管理するのに使用している。

ちょっとしたアイディアや、気になったウェブページを保存するのに最適。

連絡ツール、SNSなど
  • LINE

Windowsに入れたことがあるけど、その時は使いづらくて一瞬でアンインストールした。だからMacに入れるのを躊躇っていたが、使ってみると意外と使いやすくてビックリしたのを覚えている。

LINEにチャットツールの座を奪われつつもグループ音声会話やデスクトップ共有できるからまだまだ現役。

  • Janetter

Twitterクライアント。自分は全画面ではなく端の方に置いてたまに眺める感じで使いたいからこのアプリを選んだ。通知などの機能面、デザイン面ともに割りと満足している。TLに新しいツイートを表示するときの滑らかさが結構好き。

その他ツール

使いこなせるようになればマウスとおさらばできるほどの強力なツール。検索もできてこれを入れることでかなり使い勝手が良くなる。

Xcode

Xcode

  • Apple
  • 開発ツール
  • 無料

アプリ開発には欠かせないIDE

論文を書くときに大変お世話になった。でもTeXはまだ使いこなせていない。

  • Wunderlist

Wunderlist – To-Do & Task List

Wunderlist – To-Do & Task List

  • 6 Wunderkinder
  • 仕事効率化
  • 無料

タスク管理をこれで行っている。欲しい機能はほとんど揃っていて文句なしのアプリ。唯一希望を挙げるとするならば、Google Taskと連携できたら最高だと思う。


とまあ、ざっとこんな感じ。あくまで必要最低限のものだけを挙げた。
機会があればいくつかのツールの設定や拡張機能・パッケージなどについて書いていきたい。

追記

あまり関係ないけど、先日、以前から非常にリスペクトしていたパズルゲームの続編が出た。ハードはiOSだけどこれは買っておいて損はしない。
一応謎解き脱出ゲームに分類されると思うけど、iOSの性能をフルに使った3Dグラフィックが美麗な上に、謎・パズルもよく考えられており、溶けた時の快感は凄まじいものだった。

The Room

The Room

  • Fireproof Games
  • ゲーム
  • ¥100

The Room Two

The Room Two

  • Fireproof Games
  • ゲーム
  • ¥300

SublimeText2とターミナルの相互起動など

SublimeText2(以下ST2)は非常に便利かつ多機能なテキストエディタで自分も愛用しているけど、まだいくつか痒いところがある。

  • コードを実行する時に一々ターミナルでcdを打つのも面倒くさい。
  • 加えてターミナルからファイルをopenする時もプログラムも指定したい。以前に.bashrcにaliasを記述する方法を見つけたが、どうも上手く行かなかった。

ということでST2とターミナルとの相互起動ができたら結構捗るんじゃないかと思って、メモ書きといった意味も込めてここに残しておく。

ターミナル→ST2

ターミナルで

sudo ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/subl

を実行。

Make Links

ちなみに、lnはファイルやディレクトリにリンクを貼るというコマンド。また、lnのオプションでシンボリック・リンク[-s, --symbolic]とハード・リンク[-d, -F, --directory]を作ることができる。この2つのリンクの違いとして、

  • シンボリック・リンク: あるファイルやディレクトリを別のパスで参照できるようにする仕組み。
  • ハード・リンク:あるファイルやディレクトリに別の名前を与え、ユーザやアプリケーションがその名前をファイル本体と同様に扱えるようにする仕組み。
  • シンボリックリンクはデバイスやファイルシステムにまたがって自由にリンクを張ることができるが、ハードリンクではファイルシステムを管理するファイルエントリに複数の名前を登録するため、異なるファイルシステムへリンクできないなどの制限がある。ハードリンクでは実体ファイルの削除ができるが、シンボリックリンクを通じて実体を削除することはできない。

また、ファイルやディレクトリに仮想的な別の名前を与えるという点ではWindowsの「ショートカット」やMac OSの「エイリアス」に近いが、これらはリンク先のファイルを実体と同じようには扱えないため、実装や機能の面では大きく異なる。*1

話が逸れたが、上記のコマンドを実行した後、

subl --help

を実行して、

Usage: subl [arguments] [files]         edit the given files

   or: subl [arguments] [directories]   open the given directories

   or: subl [arguments] -               edit stdin

 

Arguments:

  --project <project>: Load the given project

  --command <command>: Run the given command

  -n or --new-window:  Open a new window

  -a or --add:         Add folders to the current window

  -w or --wait:        Wait for the files to be closed before returning

  -b or --background:  Don't activate the application

  -s or --stay:        Keep the application activated after closing the file

  -h or --help:        Show help (this message) and exit

  -v or --version:     Show version and exit

 

--wait is implied if reading from stdin. Use --stay to not switch back

to the terminal when a file is closed (only relevant if waiting for a file).

 

Filenames may be given a :line or :line:column suffix to open at a specific

location.

といった画面が出てくればひとまずターミナル→ST2は成功。 

ST2→ターミナル

ここではST2にパッケージ「Sublime Terminal」を入れる方法を使う。

ST2にパッケージを入れることに関してはPackageControl(以下PC)なるパッケージ管理のアドオンを利用する。PCはいわばMacPortsのようなものであると中々便利。詳しい入れ方については省略するが、もっと知りたければ記事末尾の参考リンクを見てもらえば。

またしても話が逸れたが、入れ方としては

  1. 「Command+Shift+P」でCommandPaletteを呼び出して
  2. 「Package Control: Install Package」と入力
  3. 「Terminal」と入力してインストール

といった感じ。インストールが終われば

Open Terminal at File

Press ctrl+shift+t on Windows and Linux, or cmd+shift+t on OS X

Open Terminal at Project Folder

Press ctrl+alt+shift+t on Windows and Linux, or cmd+alt+shift+t on OS X

 が実行可能となる。

TerminalのデフォルトエディタをST2に設定

ついでに。以下のコマンドを入力。

export EDITOR='subl -w'

そしてエディタの環境変数をいじる。

~/.bashrcなどに上のコマンドを追加する。

 .bashrcや.bash_profileの具体的な初期設定についても参考リンク参照。

 

これで当初の目標は達成できた。

参考リンク

 

*1:IT用語辞典 e-Words