特徴量の抽出
コーパスの準備ができたら、次のステップはモデル学習用の特徴量を抽出することです。
コマンド
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"]
Extractorがコーパスの各行を読み込む- 各文に対して、文字配列・文字種配列・タグ配列を持つ
Segmenterコンテキストを作成する - 各文字位置(先頭を除く)について特徴量を抽出し、正しいラベルとともに書き込む。二段構成の 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個の単語テンプレート | 最も高精度、最も低速 |
balanced | full のサブセット | 中間的な構成 |
fast(既定) | 最小のサブセット | 最速、それでいて競争力のある品質 |
この既定値の背後にある品質・スループットの実測比較については、 stage-2 特徴量セットの選び方を参照してください。
litsea extract --pos --stage2-features balanced -l chinese ./pos_corpus.txt ./pos_features
ファイルサイズの目安
特徴量ファイルは、各文字位置が38-42個の特徴量文字列を生成するため、コーパスよりも大幅に大きくなります。1 MB のコーパスに対して、特徴量ファイルはおよそ 50-100 MB になることが見込まれます。