韓国語
Litseaは、ハングル文字タイプの特殊な検出機能を備えた韓国語の単語分割をサポートしています。
文字タイプ
| Code | Name | Pattern | Examples |
|---|---|---|---|
| E | 助詞/語尾 | [은는을를의에] | 은, 는, 을, 를, 의, 에 |
| SN | ハングル(받침なし) | コードポイント演算 | 가, 나, 하, 모 |
| SF | ハングル(받침あり) | コードポイント演算 | 한, 글, 각, 붙 |
| J | ハングル字母 | U+1100–U+11FF | 個別の子音/母音 |
| G | 互換字母 | U+3130–U+318F | ㄱ, ㅏ, ㅎ |
| H | 漢字 | U+4E00–U+9FFF | CJK統合漢字 |
| P | 句読点 | CJK記号 + 全角 | 。, , |
| A | ASCII/ラテン文字 | [a-zA-Za-zA-Z] | A, z |
| N | 数字 | [0-90-9] | 0, 5, 5 |
| O | その他 | フォールバック | @, #, $ |
韓国語の助詞(조사)
「E」タイプは、6つの高頻度文法助詞を捉えます。
| Character | Role | Name |
|---|---|---|
| 은/는 | 主題マーカー | 주격 조사 |
| 을/를 | 目的語マーカー | 목적격 조사 |
| 의 | 所有格 | 관형격 조사 |
| 에 | 場所格 | 부사격 조사 |
これらの助詞は語境界に頻繁に出現するため、分割精度を向上させるために独自のタイプコードが割り当てられています。
ハングル音節構造(받침検出)
韓国語では、SNとSFタイプに本体でコードポイント判定を行う範囲アームを使用します。これはUnicodeハングルエンコーディングの体系的な構造を活用しています。
- ハングル音節: U+AC00–U+D7AF(11,172音節)
- 各音節 =
(初声 * 21 + 中声) * 28 + 終声 + 0xAC00 - SN(받침なし):
(codepoint - 0xAC00) % 28 == 0 - SF(받침あり):
(codepoint - 0xAC00) % 28 != 0
받침(終声子音)の有無の区別は言語学的に重要であり、助詞が語にどのように接続するか、また境界がどこに生じるかに影響します。
WC特徴量なし
韓国語ではWC(単語+文字タイプ)特徴量を使用しません。ほとんどのハングル音節はSNとSFの2つのタイプにしか分類されないため、WC特徴量は低エントロピーでノイズの多い組み合わせを生成し、モデルの精度を低下させます。
空白保持学習(Space-Preserving Training)
韓国語は語節(어절)の間に空白を入れて表記され、その空白がほとんどの語境界を示します。そのため韓国語モデルは 空白保持 TSV コーパス で学習しています。トークンをタブで区切り、語節間の各空白を独立したトークンとして保持することで、学習テキストに元の文の空白文字が含まれ、モデルはそれを境界のコンテキストとして利用できます。コーパスは corpus_udtreebank.sh -s(ツリーバンクの SpaceAfter アノテーションから空白を復元)で生成し、特徴量は litsea extract --format tsv で抽出します。推論時に特別な処理は不要です: segment() は空白を含むテキストをそのまま受け取り、各空白を独立したトークンとして出力します。
コーパス内では各空白が独立した1文字トークンになるため、文字単位のラベル付け(AdaBoost 参照)は空白の前後に2つの別々の境界を付与します: 空白自体が新しいトークンの開始(ラベル B)であり、空白の直後の文字も次のトークンの開始(同じく B)です。空白は必ずちょうど1トークンであり、その直後は必ず次のトークンの開始になるため、どちらもコーパスの構成上決定的(モデルがほぼ自明な規則として学習可能)です。held-out の単語 F1 に影響するのはこのうち後者(実単語の開始境界)のみで、純粋な空白トークンはスコアリングから除外されます(評価 参照)。
学習済みモデル
korean.model
- 学習コーパス: UD Korean-GSD(空白保持 TSV コーパス)
- 学習オプション:
--format tsv --tag-free、Averaged Perceptron を 30エポック学習し、AdaBoostのスカラー重みへ畳み込み、剪定なし (3,132特徴量)– 詳しい手順は 学習手順を参照 - 単語 F1(held-out): 99.91%
- 境界 F1(held-out): 99.96%
held-out 指標は、空白トークンをスコアリングから除外した上で、元の空白付きテキストに対して計算しています。
このモデルは 16 個のタグ依存特徴量テンプレートを使わずに学習しています
(--tag-free、issue #183): 空白シグナルがあるため、これらは計測上
何も寄与しておらず、pointwise なモデルにすることで segment() は逐次
スコアリングパスを丸ごとスキップできます。詳細は
タグなし(pointwise)モデル
を参照してください。
korean_pos.model
- アルゴリズム: 二段構成の単語分割+品詞推定(二値境界分類器 + 候補タグ語彙表付き単語単位タガー)
- 単語 F1(held-out): 99.88%
- タグ付き単語 F1(held-out): 93.95%
- 注記: このモデルは
korean.modelと同じ空白保持コーパスで学習して います(issue #198)。そのため単語 F1 はkorean.modelの 99.91% との差が 0.03 ポイントに留まります。#198 以前は二段構成パイプラインが空白非保持のword/POSコーパスで学習しており、実際のスペース付き入力では 94.01% でした。 プロトコルを切り替えたことで、単語 F1 は +5.9 ポイント、タグ付き単語 F1 は +10.8 ポイント向上しています。スペースは独立したトークンとして再出力され、 分類器による推測ではなく候補1つだけの語彙表エントリを通じて決定的にXと タグ付けされます。英語の正書法は空白がないと境界の手がかりがはるかに少ない ため、同じ変更が 20 ポイント以上の効果をもたらしています。詳しくは 英語を参照してください - 詳細: 事前学習済みモデルを参照
使用例
echo "한국어 단어 분할 테스트입니다." | litsea segment -l korean ./models/korean.model