[mecab-users 93] Re: CRFパラメータ学習について

アーカイブの一覧に戻る

Taku Kudo taku****@chase*****
2006年 4月 27日 (木) 23:45:42 JST


工藤です

operator new で死んでるので、メモリ不足だと思います。

CRFの学習はかなりメモリを食います。

ipadic の場合38,000文(約38MB) の学習コーパスを学習するのに 2~3Gの
メモリがいります。JUMANの辞書は、曖昧性がかなありあるので、
同じぐらいのサイズの京都大学コーパスを使うのに、20GB ぐらい
いります。

On 4/27/06, NOKUBI Takatsugu <knok****@daion*****> wrote:
>   野首です。
>
>   MeCab 0.90ではCRFパラメータを自分で学習できるということで、自作の辞
> 書を処理させてみています。
>
>   仕事ともかかわることなので詳細はちょっとここではかけないのですが、だ
> いたい以下のような規模の辞書を処理させてみたところ、mecab-cost-trainが
> 途中で何もいわずに終了してしまいます。
>
>  - *.defは全てmecab-ipadicと同じ物
>  - dicrcはunk-eval-size = 1にした以外はmecab-ipadicと同じ
>  - dic.csvは約23万エントリ
>  - 学習用コーパスはその10倍ぐらい
>
>   mecab-cost-train自体はperl scriptだったので、本来pipeで食わせる出力
> をいったんファイルに落として、mecab-toolをgdb経由で実行してみたところ、
> 以下のようなバックトレースが得られました。
>
> 引数: --text-only --learn --dicdir=. --cost=1.0 --freq=1 --eta=0.0001
> --input=process.txt --model=model.txt
>
> Program received signal SIGABRT, Aborted.
> 0x4025383b in raise () from /lib/tls/libc.so.6
> (gdb) bt
> #0  0x4025383b in raise () from /lib/tls/libc.so.6
> #1  0x40254fa2 in abort () from /lib/tls/libc.so.6
> #2  0x401d6f57 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.5
> #3  0x401d6f94 in std::terminate () from /usr/lib/libstdc++.so.5
> #4  0x401d7106 in __cxa_throw () from /usr/lib/libstdc++.so.5
> #5  0x401d735f in operator new () from /usr/lib/libstdc++.so.5
> #6  0x401d742f in operator new[] () from /usr/lib/libstdc++.so.5
> #7  0x40064274 in MeCab::LearnerTagger::connect ()
>    from /home/knok/pkg/lib/libmecab.so.1
> #8  0x4006451e in MeCab::LearnerTagger::buildLattice ()
>    from /home/knok/pkg/lib/libmecab.so.1
> #9  0x4006320b in MeCab::EncoderLearnerTagger::read ()
>    from /home/knok/pkg/lib/libmecab.so.1
> #10 0x40065b3e in MeCab::Learner::run () from /home/knok/pkg/lib/libmecab.so.1
> #11 0x40069ad4 in MeCab::Tool::learn () from /home/knok/pkg/lib/libmecab.so.1
> #12 0x40074bc7 in MeCab::Tool::run () from /home/knok/pkg/lib/libmecab.so.1
> #13 0x40068802 in mecab_tool () from /home/knok/pkg/lib/libmecab.so.1
> #14 0x0804855b in main ()
>
>   たぶんメモリが足りないということになるような気がしないでもないのです
> が、どうしたらよいでしょうか。いちおう4GB積んでいて、ulimit -aは以下の
> ような感じなのですけど。
>
> -t: cpu time (seconds)         unlimited
> -f: file size (blocks)         unlimited
> -d: data seg size (kbytes)     unlimited
> -s: stack size (kbytes)        8192
> -c: core file size (blocks)    0
> -m: resident set size (kbytes) unlimited
> -u: processes                  unlimited
> -n: file descriptors           1024
> -l: locked-in-memory size (kb) unlimited
> -v: address space (kb)         unlimited
> -x: file locks                 unlimited
>
>   環境はDebian GNU/Linux 3.1で、gcc 3.3.5にglibc 2.3.2でビルドしたもの
> を使っています。
> --
> 野首 貴嗣
> E-mail: knok****@daion*****
>         knok****@namaz***** / knok****@debia*****
> _______________________________________________
> mecab-users mailing list
> mecab****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/mecab-users
>
>



mecab-users メーリングリストの案内
アーカイブの一覧に戻る