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 は、各単語境界候補の周辺の局所的なコンテキストを捉えるために文字 n-gram 特徴量を使用します。本章では、AdaBoost・二段構成 stage-1 パイプラインが共有する文字レベルの境界テンプレートと、二段構成の stage-2 タガーが使用する単語レベルのテンプレートの両方を含む、すべての特徴量タイプをカタログ化します。

特徴量カテゴリ

入力の各文字位置 i について、セグメンタは文字、その種別コード、および前回の境界判定からなるスライディングウィンドウから特徴量を抽出します。

基本特徴量(38 個)

CategoryIDs説明Window
UW (Unary Word)UW1–UW6位置 i-3 から i+2 の個々の文字6
BW (Bigram Word)BW1–BW3隣接する文字ペア3
UC (Unary Char-type)UC1–UC6位置 i-3 から i+2 の文字種コード6
BC (Bigram Char-type)BC1–BC3隣接する種別コードペア3
TC (Trigram Char-type)TC1–TC4種別コードのトリプル4
UP (Unary Previous-tag)UP1–UP3直前 3 つの境界判定3
BP (Bigram Previous-tag)BP1–BP2境界判定のペア2
UQ (Unary tag+type)UQ1–UQ3境界判定と種別コードの組み合わせ3
BQ (Bigram tag+type)BQ1–BQ4判定と種別コードのバイグラム組み合わせ4
TQ (Trigram tag+type)TQ1–TQ4判定と種別コードのトライグラム組み合わせ4

言語固有の特徴量(4 個、日本語と中国語のみ)

CategoryIDs説明Count
WC (Word+Char-type)WC1–WC4文字と種別コードの混合特徴量4
  • WC1: 位置 i-1 の文字 + 位置 i の種別コード
  • WC2: 位置 i-1 の種別コード + 位置 i の文字
  • WC3: 位置 i-1 の文字 + 位置 i-1 の種別コード
  • WC4: 位置 i の文字 + 位置 i の種別コード

韓国語と英語に WC がない理由: 韓国語のハングル音節は 2 種類(SN と SF)にのみ分類されるため、WC 特徴量は有用な信号ではなくノイズを追加してしまいます。英語でも同じ結果が直接計測されています: dev split での比較では、38 個のベーステンプレートで単語 F1 98.68%、WC を含む全 42 個で 98.65% でした – 詳細は English を参照してください。

特徴量の総数

LanguageBaseWCTotal
Japanese38442
Chinese38442
Korean38038
English38038

単一の真実の源

上記のテンプレート全体は、宣言的なテーブル(packed_model::TEMPLATES – プレフィックスと、タグ/文字/文字種スロットの順序付きリスト、固定の出力順)として 一度だけ定義されます。両方の特徴量表現がここから導出されます:

  • 後述の文字列形式 – 学習データ抽出、コーパス処理、モデルファイルで使用
  • segment()segment_with_pos() の 2 パススコアラーが使用する 整数インデックスのスコアリングテーブル群 – モデルファイルはロード時に この形式へコンパイルされる (予測パイプラインを参照)

したがって、テンプレートの追加や並び替えはすべての消費者を一貫して変更します。 テーブルの順序は文字列ライターの出力順を定義しており、モデルファイルと学習データが これに依存しています。

特徴量の形式

各特徴量は PREFIX:VALUE の形式の文字列として表現されます:

UW4:は        ← The character at position i is "は"
UC4:I         ← The type code at position i is "I" (Hiragana)
BW2:はテ      ← The bigram at position i-1..i is "はテ"
BC2:IK        ← The type bigram is Hiragana + Katakana
UP3:B         ← The previous boundary decision was "B" (boundary)
WC1:はK       ← Character "は" combined with type "K"

スライディングウィンドウの配置

セグメンタは入力をセンチネル文字でパディングします:

Index:   0    1    2    3    4    5    ...  n+2  n+3  n+4  n+5
Chars:   B3   B2   B1   c1   c2   c3  ...  cn   E1   E2   E3
Types:   O    O    O    t1   t2   t3  ...  tn   O    O    O
Tags:    U    U    U    U    ?    ?   ...  ?
  • B3, B2, B1 – 開始センチネル(パディング)
  • E1, E2, E3 – 終了センチネル(パディング)
  • O – パディング位置の「Other」種別
  • U – 初期位置の「Unknown」タグ
  • B – 「Boundary」タグ(単語の開始)
  • O – 「Other」タグ(継続)

境界(AdaBoost)パイプラインでは、特徴量は位置 4 から len-4 まで(両端を含む)抽出されます。POS パイプラインでは、segment_with_pos が最初の単語の品詞を導出するために位置 3(最初の実際の文字)でも予測を行うため、位置 3 でも特徴量が出力されます(#100)。 位置は 4(または 3)から len-4 まで(両端を含む)実行され、i-3 から i+2 の完全なウィンドウが利用可能です。

学習データの形式

extract コマンドは以下の形式で特徴量をファイルに書き出します(コーパス行 これ は テスト です 。 に対する実際の出力です):

-1	BC1:OI	BC2:II	BC3:II	BP1:UU	BP2:UU	BQ1:UOI	BQ2:UII	BQ3:UOI	BQ4:UII	BW1:B1こ	...
1	BC1:II	BC2:II	BC3:IK	BP1:UU	BP2:UO	BQ1:UII	BQ2:UII	BQ3:OII	BQ4:OII	BW1:これ	...

各行には以下が含まれます:

  1. ラベル(境界の場合 1、非境界の場合 -1
  2. タブ区切りの特徴量文字列。アルファベット順にソートされた順序(テンプレートの出力順ではない)で書き出されるため、各行は BC1: 特徴量から始まる

単語単位の特徴量テンプレート(二段構成)

ここまでは、各境界判定ごとに採点される文字レベルのテンプレート集合です。二段構成の品詞タグ付けの stage-2 単語タガーは、これとは別の無関係なテンプレート集合を採点します。これは litsea::word_featuresN_WORD_TEMPLATES = 23)で定義されており、文字位置ごとではなく、すでに分割済みの単語ごとに1行の特徴量を生成します。上記の packed_model::TEMPLATES とは別の宣言的テーブルであり、専用のランタイム packed_two_stage::PackedTwoStageModel へコンパイルされます(予測パイプラインを参照)。

文中の [start, end) の範囲にまたがる単語(w = 表層、n = end - start)について:

プレフィックス表現
WS単語の表層そのものハッシュ化文字列
WLmin(n, 4)密配列(単語長)
FC / LC先頭 / 末尾の文字ハッシュ化文字
ft / lt先頭 / 末尾の文字の文字種コード密配列(文字種)
TS先頭最大8文字の文字種コード列ハッシュ化文字列
L1-L3 / R1-R3左/右に距離1-3の文脈文字ハッシュ化文字
cl1-cl3 / cr1-cr3距離1-3の文脈文字種密配列(文字種)
LB / RB文脈バイグラム(左は距離2+1、右は距離1+2)ハッシュ化ペア
P2 / S2先頭 / 末尾の2文字(n >= 2 の単語のみ)ハッシュ化ペア

合計23個のテンプレートです。文の範囲外の文脈位置には、文字レベルパイプラインの B1-B3 / E1-E3 パディング(上記参照)と同様に、開始/終了センチネル文字が使用されます。

すべてのテンプレートが毎回の抽出で書き出されるわけではありません。.stage2 特徴量ファイルにどのサブセットが含まれるかは、抽出時の TwoStageFeatureSetfull / balanced / fast)によって制御されます – CLI フラグと各バリアントに含まれるテンプレートについては特徴量の抽出を参照してください。