Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

特徴量の抽出

コーパスの準備ができたら、次のステップはモデル学習用の特徴量を抽出することです。

コマンド

litsea extract -l <LANGUAGE> <CORPUS_FILE> <FEATURES_FILE>

使用例

litsea extract -l japanese ./corpus.txt ./features.txt

出力:

Feature extraction completed successfully.

内部処理の仕組み

flowchart TD
    A["Read corpus line by line"] --> B["Split line into words"]
    B --> C["Build chars, types, and tags arrays"]
    C --> D["For each character position"]
    D --> E["Extract 38-42 features"]
    E --> F["Write label + features to file"]
  1. Extractor がコーパスの各行を読み込む
  2. 各文に対して、文字配列・文字種配列・タグ配列を持つ Segmenter コンテキストを作成する
  3. 各文字位置(先頭を除く)について特徴量を抽出し、正しいラベルとともに書き込む。二段構成の stage-1 パイプラインでは先頭位置も出力され、最初の単語の境界判定が学習データに含まれるようになっている

特徴量ファイルの形式

各行は1つの文字位置を表します。コーパス行 これ は テスト です 。 に対する最初の2行は次のとおりです:

-1	BC1:OI	BC2:II	BC3:II	BP1:UU	BP2:UU	BQ1:UOI	BQ2:UII	BQ3:UOI	BQ4:UII	...
1	BC1:II	BC2:II	BC3:IK	BP1:UU	BP2:UO	BQ1:UII	BQ2:UII	BQ3:OII	BQ4:OII	...
  • 最初の列: ラベル(1 = 境界、-1 = 非境界)
  • 残りの列: 特徴量。アルファベット順にソートされてタブ区切りで書き出される(そのため各行は BC1: 特徴量から始まる)

空白保持(TSV)コーパス形式

文の元の空白を保持したコーパス — 韓国語モデルおよび英語モデルの学習に使用 (単語間の空白がこれらの言語における最も強力な境界シグナルであるため。詳細は 韓国語 および 英語 を参照) — から抽出するには、既定のスペース区切り形式の代わりに --format tsv を 指定します:

litsea extract --format tsv -l korean ./ko_corpus.tsv ./ko_features.txt
litsea extract --format tsv --tag-free -l english ./en_corpus.tsv ./en_features.txt

入力はタブ区切りのコーパス(1行1文、トークンをタブで区切る)で、トークンとして 空白文字そのもの(" ")を含められます。出力される特徴量ファイルの形式は既定の extract と同一で、コーパスの解析方法のみが異なります。--format tsv--pos とも併用できます(issue #198。後述の二段構成の特徴量抽出を参照)。

二段構成の特徴量抽出

二段構成の品詞タグ付け(issue #147)用には、 --pos を使用します:

litsea extract --pos [--stage2-features full|balanced|fast] <CORPUS_FILE> <FEATURES_PREFIX>

使用例

litsea extract --pos -l japanese ./pos_corpus.txt ./pos_features

--pos は POS タグ付きコーパス(word/POS word/POS ...)を 読み込み、コーパスを1パスで処理し、<FEATURES_PREFIX> から1ファイルではなく 3ファイルを書き出します:

ファイル内容
<FEATURES_PREFIX>.stage1境界特徴量(ラベルは B または O)。通常の抽出と同じ文字レベルテンプレートを、先頭を含む全位置で出力
<FEATURES_PREFIX>.stage2単語単位の特徴量(ラベルは UPOS タグ)。--stage2-features で選択したテンプレート
<FEATURES_PREFIX>.lexicon候補タグ語彙表(surface\tTAG:count[,TAG:count...]、出現頻度の高い順)

litsea train --pos は同じプレフィックスから3ファイルすべてを読み込みます。 コーパスが corpus_udtreebank.sh -p -s の出力する空白保持の word/POS TSV である場合は --format tsv を併用してください(issue #198)– 同梱の韓国語・英語の二段構成モデルが学習に使っているプロトコルです。

--stage2-features の選び方

--stage2-features<FEATURES_PREFIX>.stage2 に書き出す stage-2 の単語単位 テンプレート(単語単位の特徴量テンプレート(二段構成)を参照)を選択し、 タグ付け品質とスループットをトレードオフします:

テンプレートトレードオフ
full全23個の単語テンプレート最も高精度、最も低速
balancedfull のサブセット中間的な構成
fast(既定)最小のサブセット最速、それでいて競争力のある品質

この既定値の背後にある品質・スループットの実測比較については、 stage-2 特徴量セットの選び方を参照してください。

litsea extract --pos --stage2-features balanced -l chinese ./pos_corpus.txt ./pos_features

ファイルサイズの目安

特徴量ファイルは、各文字位置が38-42個の特徴量文字列を生成するため、コーパスよりも大幅に大きくなります。1 MB のコーパスに対して、特徴量ファイルはおよそ 50-100 MB になることが見込まれます。