/usr/share/doc/mecab/learn.html is in mecab 0.996-1.2ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MeCab: オリジナル辞書/コーパスからのパラメータ推定</title>
<link type="text/css" rel="stylesheet" href="mecab.css">
</head>
<body>
<h1>オリジナル辞書/コーパスからのパラメータ推定</h1>
<h2>概要</h2>
<p>学習用コーパスからパラメータ(コスト値)を推定することができます.
MeCab 自身は品詞体系に非依存な設計になっているため,
独自の品詞体系, 辞書, コーパスに基づく解析器を作成することができます.
パラメータ推定には Conditinoal Random Fields (<a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a>) を使っています. </p>
<p>
<h2>処理の流れ</h2>
<p>データフロー図は次のようになります. </p>
<img src="flow.png">
<p>パラメータ推定には以下のサブタスクがあります. </p>
<ul>
<li><a href="#seed">Seed辞書の準備</a>
<li><a href="#config">設定ファイルの準備</a>
<ul>
<li>dicrc
<li>char.def
<li>unk.def
<li>rewrite.def
<li>feature.def
</ul>
<li><a href="#corpus">学習用コーパスの準備</a>
<li><a href="#binary">学習用バイナリ辞書の作成</a>
<li><a href="#crf"><a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a> パラメータの学習</a>
<li><a href="#dist">配布用辞書の作成</a>
<li><a href="#test">解析用バイナリ辞書の作成</a>
<li><a href="#eval">評価</a>
<li><a href="#retrain">再学習</a>
</ul>
<p>それぞれ順に説明していきます. </p>
<h2><a name="seed">Seed辞書の準備</a></h2>
<p>MeCabの辞書は CSV で記述されます. Seed 辞書と配布辞書のフォーマッ
トは基本的に同一です. </p>
<p>以下が辞書のエントリの例です. </p>
<pre>
進学校,0,0,0,名詞,一般,*,*,*,*,進学校,シンガクコウ,シンガクコー
梅暦,0,0,0,名詞,一般,*,*,*,*,梅暦,ウメゴヨミ,ウメゴヨミ
気圧,0,0,0,名詞,一般,*,*,*,*,気圧,キアツ,キアツ
水中翼船,0,0,0,名詞,一般,*,*,*,*,水中翼船,スイチュウヨクセン,スイチューヨクセン
</pre>
<p>最初の4カラム目までは, 必須項目で, </p>
<ul>
<li>表層形 (単語そのもの)
<li>左連接状態番号
<li>右連接状態番号
<li>コスト
</ul>
<p>となっています. 左連接状態番号, 右連接状態番号, コストは, Seed 辞書では
使われないので 0 としておきます.</p>
<p>5カラム目以降は「素性」と呼ばれる項目です. MeCab は, システムの汎用性
を高めるために, 「品詞」「活用」「読み」「発音」といった「単語に付与され
る情報」をシステムは区別せず「素性」として扱っています. ユーザは CSV が
許す限り何個でも素性を付与することができます. ただし, 各カラムの素性の
定義はそろえておく必要があります. (5カラム目は品詞, 6カラム目は品詞再分
類等) 通常, 素性番号の若いものから順に一般的な素性を列挙していきます.
(例: 品詞, 品詞細分類, 活用型, 活用形, 原形, 読み, 発音)
</p>
<p>素性は内部的には配列として扱われます. 0番目の素性, 1番目の素性.. と
いう呼び方で素性を参照することがあります. 素性の番号と内部表現(品詞, 読
み等)は, ユーザ自身が管理してください. </p>
<p>上記の例は, ipadic の例です. 素性列として</p>
<ul>
<li>品詞
<li>品詞細分類1
<li>品詞細分類2
<li>品詞細分類3
<li>活用型
<li>活用形
<li>基本形
<li>読み
<li>発音
</ul>
<p>が定義されています. </p>
<p>MeCab は活用処理を行いません. 活用する語の場合は, ユーザが事前に活用
を展開する必要があります.
<pre>
連れ出す,0,0,0,動詞,自立,*,*,五段・サ行,基本形,連れ出す,ツレダス,ツレダス
連れ出さ,0,0,0,動詞,自立,*,*,五段・サ行,未然形,連れ出す,ツレダサ,ツレダサ
連れ出そ,0,0,0,動詞,自立,*,*,五段・サ行,未然ウ接続,連れ出す,ツレダソ,ツレダソ
連れ出し,0,0,0,動詞,自立,*,*,五段・サ行,連用形,連れ出す,ツレダシ,ツレダシ
連れ出せ,0,0,0,動詞,自立,*,*,五段・サ行,仮定形,連れ出す,ツレダセ,ツレダセ
連れ出せ,0,0,0,動詞,自立,*,*,五段・サ行,命令e,連れ出す,ツレダセ,ツレダセ
連れ出しゃ,0,0,0,動詞,自立,*,*,五段・サ行,仮定縮約1,連れ出す,ツレダシャ,ツレダシャ
</pre></p>
<h2><a name="config">設定ファイルの準備</a></h2>
<h3>dicrc</h3>
<p>
辞書のさまざまな動作を指定するファイルです. 以下が最低限の設定です. <p>
<pre>
cost-factor = 800
bos-feature = BOS/EOS,*,*,*,*,*,*,*,*
eval-size = 6
unk-eval-size = 4
config-charset = EUC-JP
</pre>
<ul>
<li>cost-factor: コスト値に変換するときのスケーリングファクターです.
700 から 800 で問題ありません.
<li>bos-feature: 文頭, 文末の素性です. CSV で表現します.
<li>eval-size: 既知語の時, 素性の先頭から何個合致すれば正解と認定するか
を指定します. 通常, 既知語は品詞, 活用といった情報のみが正解すればよいので, 「読み」「発音」といった素性は無
視するようにします. 上記の例では 6 となっているので, IPA品詞体系の
品詞, 品詞細分類1, 2, 3, 活用型, 活用形 の 6つが評価されます.
<li>unk-eval-size: 未知語の時, 素性の先頭から何個合致すれば正解と認定
するかを指定します.
<li>config-charset: dicrc, char.def, unk.def, pos-id.defファイルの文字コードです.
</ul>
<h3>char.def</h3>
<p>
未知語処理の定義ファイルです. 通常日本語の形態素解析では字種に基づく未知
語処理が行われます. MeCab では, どの文字をどの字種として定義するかといった設
定を細かく指定することができます. さらに, 各字種に対し, どのような未知語
処理を行うか細かく指定することができます.
</p>
<p>
ファイルの最初には, カテゴリ名の定義と, 各カテゴリの未知語処理の動作
を定義します.
<pre>
カテゴリ名 動作タイミング(0/1) グルーピング(0/1) 長さ(0,1, 2... n)
</pre>
<ul>
<li>カテゴリ名: カテゴリの名前です. <br>
HIRANA, KATAKANA.. といったカテゴリを定義します.DEFAULT と SPACE は必須のカテゴリです.
<li>動作タイミング: <br>
そのカテゴリにおいて, いつ未知語処理を動かすかを定義します.
<ul>
<li>0: 既知語がある場合は, 未知語処理を動作させません
<li>1: 常に未知語処理を動かします
</ul>
<li>グルーピング: 未知語の候補生成方法です.
<ul>
<li>0: 同じ字種でまとめません.
<li>1: 同じ字種でまとめます.
</ul>
<li>長さ: 未知語の候補生成方法です.
<ul>
<li>1: 1文字までの文字列を未知語とします.
<li>2: 2文字までの文字列を未知語とします. <br>
...
<li>n: n文字までの文字列を未知語とします. <br>
</ul>
グルーピングと長さは同時に指定することができます.
</ul>
<p>例</p>
<pre>
KANJI 0 0 2
SYMBOL 1 1 0
NUMERIC 1 1 0
ALPHA 1 1 0
HIRAGANA 0 1 2 </pre>
</p>
<p>次に, 各カテゴリがUCS2のコードポイントのどこに該当するか定義します. </p>
<pre>
codepoint デフォルトカテゴリ名 互換カテゴリ名1 互換カテゴリ名2 ..
</pre>
<p>もしくは,</p>
<pre>
low_codepoint..high_codepoint デフォルトカテゴリ名 互換カテゴリ名1 互換カテゴリ名2 ..
</pre>
<p>例</p>
<pre>
0x0009 SPACE
0x30A1..0x30FF KATAKANA
0x30FC KATAKANA HIRAGANA # ー
</pre>
<p>コードポイントは UCS2(Unicode)を 0x から始まる16進数で記述します.</p>
<p>
最初のカテゴリは, そのコードポイントのデフォルトカテゴリです.
さらに, 互換カテゴリを列挙することができます. 上記の例では, 長音記号「ー」
は, デフォルトではカタカナですが, 平仮名を互換カテゴリとして持ちます.
グルーピング動作の時に互換カテゴリは同じグループとしてみなされます.
</p>
<p>以下が char.def の具体例です.</p>
<pre>
DEFAULT 0 1 0 # DEFAULT is a mandatory category!
SPACE 0 1 0
KANJI 0 0 2
SYMBOL 1 1 0
NUMERIC 1 1 0
ALPHA 1 1 0
HIRAGANA 0 1 2
KATAKANA 1 1 0
KANJINUMERIC 1 1 0
GREEK 1 1 0
CYRILLIC 1 1 0
# SPACE
0x0020 SPACE # DO NOT REMOVE THIS LINE, 0x0020 is reserved for SPACE
0x00D0 SPACE
0x0009 SPACE
0x000B SPACE
0x000A SPACE
# ASCII
0x0021..0x002F SYMBOL
0x0030..0x0039 NUMERIC
...
# KATAKANA
0x30A1..0x30FF KATAKANA
0x31F0..0x31FF KATAKANA # Small KU .. Small RO
0x30FC KATAKANA HIRAGANA # ー
</pre>
<h3>unk.def</h3>
<p>
未知語用の辞書です. </p>
<pre>
DEFAULT,0,0,0,記号,一般,*,*,*,*,*
SPACE,0,0,0,記号,空白,*,*,*,*,*
KANJI,0,0,0,名詞,一般,*,*,*,*,*
KANJI,0,0,0,名詞,サ変接続,*,*,*,*,*
HIRAGANA,0,0,名詞,一般,*,*,*,*,*
HIRAGANA,0,0,0,名詞,サ変接続,*,*,*,*,*
HIRAGANA,0,0,0,名詞,固有名詞,地域,一般,*,*,*
...
</pre>
<p>
表層の部分を char.def で定義したカテゴリ名とした辞書ファイルです.
各カテゴリに対してどのような素生列を付与するかを定義します.
1つのカテゴリに複数の素性を定義してもかまいません. 学習後, 適切なコスト値が
自動的に与えられます.
</p>
<h3>rewrite.def</h3>
<p>
素性列から内部状態素生列に変換するマッピングを定義します.
</p>
<p>
<a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a>は, unigram, 左文脈 bigram, 右文脈 bigram の3情報を使って統計情報を計
算します. 例えば以下の「美しい川」という以下の例では, 辞書に定義されている素性から unigram素性,
左文脈素性(その形態素を左側から見た時の素性),
右文脈素性(その形態素を左側から見た時の素性)の3つが使われます.
rewrite.def は, 辞書の素性からそれぞれの内部素性へのマッピングを定義します.
<img src="feature.png">
</p>
<p>具体的に以下のようなことがマッピング関数を適切に定義することで実現できます. </p>
<ul>
<li>「来る」「くる」という二つの表記を「来る」にまとめて統計値を計算する.
<li>連接コストの計算の際, 品詞のみを使う/語彙化する.... 等々素性のどの部
分を使うかを細かく定義する.
</ul>
</p>
<p>
rewrite.def には 3 つのセクションがあります.
<ul>
<li>[unigram rewrite]: Unigram 内部状態へのマッピング
<li>[left rewrite]: 左文脈 bigram へのマッピング
<li>[right rewrite]: 右文脈 bigram へのマッピング
</ul>
<p>
それぞれのセクションの後に, 1行に1つのマッピングルールが続きます.
マッピングルールは
<pre>
マッチパターン 変換先
</pre>
という形式で記述します. マッピングルールは先頭から順に走査されて最初に
マッチしたものが使われます.
<p>
マッチパターンでは簡単な正規表現がを使うことができます.
<ul>
<li>*: すべての文字列にマッチ
<li>(AB|CD|EF): AB もしくは CD もしくは EF にマッチ
<li>AB: 文字列 AB のみに完全マッチ
</ul>
</p>
<p>
変換先は $1 $2, $3.. というマクロを使い 素性の各要素 (CSVで記された要素)
の内容を参照することができます.
</p>
<p>
例
<pre>
[unigram rewrite]
# 読み,発音をとりのぞいて, 品詞1,2,3,4,活用形,活用型,原形,よみ を使う
*,*,*,*,*,*,*,* $1,$2,$3,$4,$5,$6,$7,$8
# 読みがない場合は無視
*,*,*,*,*,*,* $1,$2,$3,$4,$5,$6,$7,*
[left rewrite]
(助詞|助動詞),*,*,*,*,*,(ない|無い) $1,$2,$3,$4,$5,$6,無い
(助詞|助動詞),終助詞,*,*,*,*,(よ|ヨ) $1,$2,$3,$4,$5,$6,よ
...
[right rewrite]
(助詞|助動詞),*,*,*,*,*,(ない|無い) $1,$2,$3,$4,$5,$6,無い
(助詞|助動詞),終助詞,*,*,*,*,(よ|ヨ) $1,$2,$3,$4,$5,$6,よ
..
</pre>
</p>
<h3>feature.def</h3>
<p>
内部状態の素生列から <a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a>の素生列を抽出するためのテンプレートを定義したファイルです
</p>
<p>各行が一テンプレートに対応します. UNIGRAM ではじまるものは UNIGRAM 用
のテンプレート, BIGRAM ではじまるものは連接用のテンプレートです. </p>
<p>
各テンプレートでは, 以下のマクロを使うことができます
<ul>
<li>%F[n]: ユニグラムの n番目の素性に展開されます.
<li>%F?[n] :ユニグラムの n番目の素性に展開されます. ただし, 未定義の場合そのテンプレー
トそのものは使われません.
<li>%t: 文字種情報に展開されます. 文字種は char.def で定義された
ものが使われます. (%t は ユニグラム素性の時のみ有効です)
<li>%L[n]: 左文脈の n番目の素性に展開されます.
<li>%L?[n]: 左文脈の n番目の素性に展開されます. ただし, 未定義の場合そのテンプレー
トそのものは使われません.
<li>%R[n]: 右文脈の n番目の素性に展開されます.
<li>%R?[n]: 左文脈の n番目の素性に展開されます. ただし, 未定義の場合そのテンプレー
トそのものは使われません.
</ul>
</p>
<p>
例
<pre>
UNIGRAM W0:%F[6]
UNIGRAM W1:%F[0]/%F[6]
UNIGRAM W2:%F[0],%F?[1]/%F[6]
UNIGRAM W3:%F[0],%F[1],%F?[2]/%F[6]
UNIGRAM W4:%F[0],%F[1],%F[2],%F?[3]/%F[6]
UNIGRAM T0:%t
UNIGRAM T1:%F[0]/%t
UNIGRAM T2:%F[0],%F?[1]/%t
UNIGRAM T3:%F[0],%F[1],%F?[2]/%t
UNIGRAM T4:%F[0],%F[1],%F[2],%F?[3]/%t
BIGRAM B00:%L[0]/%R[0]
BIGRAM B01:%L[0],%L?[1]/%R[0]
BIGRAM B02:%L[0]/%R[0],%R?[1]
BIGRAM B03:%L[0]/%R[0],%R[1],%R?[2]
BIGRAM B04:%L[0],%L?[1]/%R[0],%R[1],%R?[2]
BIGRAM B05:%L[0]/%R[0],%R[1],%R[2],%R?[3]
BIGRAM B06:%L[0],%L?[1]/%R[0],%R[1],%R[2],%R?[3]
...
</pre>
<h2><a name="corpus">学習用コーパスの準備</a></h2>
<p>学習データは, MeCab のデフォルト出力と同一フォーマットで記述します.
</p>
<pre>
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
花子 名詞,固有名詞,人名,名,*,*,花子,ハナコ,ハナコ
が 助詞,格助詞,一般,*,*,*, が,ガ,ガ
好き 名詞,形容動詞語幹,*,*,*,*, 好き,スキ,スキ
だ 助動詞,*,*,*, 特殊・ダ,基本形,だ,ダ,ダ
. 記号,句点,*,*,*,*, . , . , .
EOS
焼酎 名詞,一般,*,*,*,*,焼酎,ショウチュウ,ショーチュー
好き 名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
の 助詞,連体化,*,*,*,*, の,ノ,ノ
親父 名詞,一般,*,*,*,*,親父,オヤジ,オヤジ
. 記号,句点,*,*,*,*, . , . , .
EOS
...
</pre>
<p>
タブで区切られた最初の部分が表層文字です. 次に素性配列を CSVで表現した文
字列が続きます. 文の区切りには EOS のみの行を置きます.</p>
<h2><a name="binary">学習用バイナリ辞書の作成</a></h2>
<p>現在の作業ディレクトリを WORK とします. WORK 以下に seed と final と
いう二つのディレクトリを作ってください. </p>
<pre>
cd $WORK
mkdir seed final
</pre>
<p>seed ディレクトリにさきほど説明した以下のファイルをコピーします.
<ul>
<li>seed 辞書 (CSV のファイル集合)
<li>全設定ファイル (char.def, unk.def, rewrite.def, feature.def)
<li>学習用データ (ファイル名: corpus)
</ul>
<p>
例
<pre>
% cd $WORK/seed
% ls
Adj.csv Interjection.csv Noun.name.csv Noun.verbal.csv Symbol.csv rewrite.def
Adnominal.csv Noun.adjv.csv Noun.number.csv Others.csv Verb.csv unk.def
Adverb.csv Noun.adverbal.csv Noun.org.csv Postp-col.csv char.def
Auxil.csv Noun.csv Noun.others.csv Postp.csv corpus
Conjunction.csv Noun.demonst.csv Noun.place.csv Prefix.csv dicrc
Filler.csv Noun.nai.csv Noun.proper.csv Suffix.csv feature.def
</pre>
</p>
<p>以下のコマンドを実行して, 学習用バイナリ辞書を作成します.
<pre>
% cd $WORK/seed
% /usr/local/libexec/mecab/mecab-dict-index
以下のように -d, -o を使うこともできます.
% /usr/local/libexec/mecab/mecab-dict-index -d $WORK/seed -o $WORK/seed
</pre>
<ul>
<li>-d: seed 辞書, 設定ファイルがあるディレクトリ (デフォルトはカレント)
<li>-o: 学習用バイナリ辞書が出力されるディレクトリ (デフォルトはカレント)
</ul>
</p>
<h2><a name="crf"><a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a> パラメータの学習</a></h2>
<p>
<pre>
% cd $WORK/seed
% /usr/local/libexec/mecab/mecab-cost-train -c 1.0 corpus model
以下のように -d を使って辞書を指定することもできます<
% /usr/local/libexec/mecab/mecab-cost-train -d $WORK/seed -c 1.0 $WORK/seed/corpus $WORK/seed/model
</pre>
</p>
<ul>
<li>-d: 学習用バイナリ辞書があるディレクトリ (デフォルトはカレント)
<li>-c: <a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a>のハイパーパラメータ
<li>-f: 素性頻度の閾値
<li>-p NUM: NUM 並列で学習を実行 (デフォルトは1)
<li>corpus: 学習データのファイル名
<li>model: 出力される<a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a>パラメータのファイル名
</ul>
<p>
ハイパーパラメータCは, 学習の「強さ」を決めます.
C を大きくすると, 学習データにできるだけフィットしようとしますが,
過学習する可能性があります. 小さくすると, 過学習を避けようとしますが, 十分な学習ができない可能性があります.
適切な C は, 交差検定等のモデル選択手法で発見的に見つけるしかありません.
デフォルトの値は 1. 0 となっています. </p>
<p>
-f オプションによって素性頻度の閾値を指定することができます. 例えば, -f
3 とすると, 学習データ中に3回以上出現した素性のみを使います. 適切な
素性閾値は, 交差検定等のモデル選択手法で発見的に見つけるしかありません.
</p>
<p>
学習中, 以下のような情報が出力されます.
<pre>
reading corpus ... adding virtual node: 名詞,固有名詞,地域,一般,*,*,東日,トウニチ,トウニチ
adding virtual node: 副詞,助詞類接続,*,*,*,*,かなり,カナリ,カナリ
Number of sentences: 32
Number of features: 47547
eta: 0.00010
freq: 1
C(sigma^2): 1.00000
iter=0 err=1.00000 F=0.41186 target=1691.68869 diff=1.00000
iter=1 err=1.00000 F=0.68727 target=1077.14848 diff=0.36327
iter=2 err=0.87500 F=0.81904 target=621.20311 diff=0.42329
iter=3 err=0.81250 F=0.86354 target=384.72432 diff=0.38068
iter=4 err=0.68750 F=0.93685 target=233.72722 diff=0.39248
..
</pre>
<ul>
<li>adding virtual node: 未知語処理を行なっても処理できなかった
形態素で, 学習の際便宜的に追加される形態素です.
<li>iter: 学習回数
<li>err: 文レベルのエラー率
<li>F: F値(精度と再現率の調和平均)
<li>target: 目的関数の値. この値が収束すると学習が終了します.
<li>diff: 目的関数の相対的な差分. この値が 0. 0001 になると学習が終了しま
す.
</ul>
</p>
<p>
<h2><a name="dist">配布用辞書の作成</a></h2>
<pre>
% cd $WORK/seed
% /usr/local/libexec/mecab/mecab-dict-gen -o ../final -m model
以下のように -d, -o を使って辞書を指定することもできます
% /usr/local/libexec/mecab/mecab-dict-gen -o $WORK/final -d $WORK/seed -m $WORK/seed/model
</pre>
<ul>
<li>-d: seed 辞書があるディレクトリ (デフォルトはカレント)
<li>-o: 配布用辞書の出力先ディレクトリ
<li>-m: <a href="http://www.cis.upenn.edu/~pereira/papers/crf.pdf">CRF</a> のパラメータファイル
</ul>
<p>配布用辞書は, seed 辞書と別のディレクトリに出力しなければなりません.
通常, 配布辞書ディレクトリ final をアーカイブしてユーザに配布します. </p>
<h2><a name="test">解析用バイナリ辞書の作成</a></h2>
<pre>
% cd $WORK/final
% /usr/local/libexec/mecab/mecab-dict-index
以下のように -d, -o を使うこともできます.
% /usr/local/libexec/mecab/mecab-dict-index -d $WORK/final -o $WORK/final
</pre>
<p>
<ul>
<li>-d: seed 辞書, 設定ファイルがあるディレクトリ (デフォルトはカレント)
<li>-o: 学習用バイナリ辞書が出力されるディレクトリ (デフォルトはカレント)
</ul>
<p>今作った辞書を使って実際に解析してみます. </p>
<pre>
% mecab -d $WORK/final
焼酎好きの親父.
焼酎 名詞,一般,*,*,*,*,焼酎,ショウチュウ,ショーチュー
好き 名詞,形容動詞語幹,*,*,*,*,好き, スキ, スキ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
親父 名詞,一般,*,*,*,*,親父, オヤジ, オヤジ
. 記号,句点,*,*,*,*,.,.,.
EOS
</pre>
</p>
<h2><a name="eval">評価</a></h2>
<p>
テストデータを用意します. テストデータは MeCab の
デフォルト出力と同一フォーマットで記述します.
</p>
<p>
まず, mecab-test-gen を使ってテストコーパス(test)から, 文のみ(test.sen)を抽出します.
<pre>
% /usr/local/libexec/mecab/mecab-test-gen < test > test.sen
</pre>
</p>
<p>test.sen をさきほど作った辞書で解析します. </p>
<pre>
% mecab -d $WORK/final test.sen > test.result
</pre>
</p>
<p>
評価スクリプト mecab-system-eval を実行します.
第一引数がシステムの結果, 第二引数が正解のファイルです.
<pre>
% /usr/local/libexec/mecab/mecab-system-eval test.result test
precision recall F
LEVEL 0: 98.6887(647112/655710) 98.9793(647112/653785) 98.8338
LEVEL 1: 98.2163(644014/655710) 98.5055(644014/653785) 98.3607
LEVEL 2: 97.2230(637501/655710) 97.5093(637501/653785) 97.3659
LEVEL 4: 96.8367(634968/655710) 97.1218(634968/653785) 96.9791
</pre>
</p>
<p>-l オプションによって, どの素性のレベルを使って評価するか指定できます.
<ul>
<li>-l 0: 0 番目の素性のみを使って評価します.
<li>-l 4: 0〜4 番目の素性を使って評価します
<li>-l -1: 全レベルの素性を使って評価します
<li>-l "0 1 2" 0番目, 0〜1番目, 0〜4番目の3つの評価を表示します.
<li>-l "0 1 -1" 0番目, 0〜1番目, 全レベルの3つの評価を表示します.
</ul>
<h2><a name="retrain">再学習</a></h2>
<p>
再学習とは, 現在の学習済みモデルと少量の追加学習データからモデルを再構築する仕組みです.
<b>元の学習データは必要ありません.</b> mecab-ipadic についてはモデルファイルを配布する予定です.
同モデルファイルと, お手元の少量の学習データや追加辞書を用いることで, 簡単なドメイン適応が可能となります.
</p>
<p>
再学習は, 以下のように -M オプションを用いて以前のモデルファイルを指定します.
初期学習時に用いた seed 辞書に新規語彙を追加しても構いません. corpus は再学習用の新規コーパスです.
</p>
<pre>
% cd $WORK/seed
% /usr/local/libexec/mecab/mecab-cost-train -c 1.0 -M old_model corpus model
以下のように -d を使って辞書を指定することもできます<
% /usr/local/libexec/mecab/mecab-cost-train -M old_model -d $WORK/seed -c 1.0 $WORK/seed/corpus $WORK/seed/model
</pre>
<p>
再学習は, 現在のパラメータをできるだけ変更せずに新しい学習データにできるだけ適応するような学習が行われます.
適応先のコーパスの性質が元のコーパスのそれと大きく変わる場合は、元の学習データに対する精度が低下する恐れがあります.
ご了承下さい
</p>
</p>
</body>
</html>
|