コマンド

Lindera CLI は6つのメインコマンドを提供します:

  • list - 形態素解析辞書の一覧と状態を表示
  • tokenize - テキストに対して形態素解析を実行
  • build - ソースCSVファイルから辞書をビルド
  • download - GitHub リリースページから学習済み辞書をダウンロード
  • train - 注釈付きコーパスデータからCRFモデルを学習
  • export - 学習済みモデルを辞書フォーマットにエクスポート

警告とログメッセージ

どのコマンドも、結果を標準出力に、Lindera のライブラリが出す警告を標準エラー出力に書きます。たとえば tokenize は、文の区切り文字のないテキストが 32 KiB を超えると、そこで文を区切り(文分割を参照)、警告を出します:

% head -c 40000 /dev/zero | tr '\0' a | lindera tokenize --dict embedded://ipadic -o wakati > /dev/null
[WARN  lindera_segmenter::segmenter] no sentence delimiter (\n, \t, 。, 、) found within 32768 bytes from offset 0; forcing a sentence boundary to bound lattice size (see https://github.com/lindera/lindera/issues/871)

環境変数 RUST_LOG で、出すメッセージを選べます。書式は env_logger のものです:

  • 指定なし: 警告とエラー
  • RUST_LOG=error: エラーだけ。警告は出しません。RUST_LOG=off はログメッセージを一切出しません
  • RUST_LOG=debug: デバッグ用のメッセージも出します。たとえば lindera build が読み書きするファイル

この設定で標準出力は変わりません。また、失敗したコマンドのエラーは設定にかかわらず出します。標準エラー出力が端末のときはメッセージに色を付けます。RUST_LOG_STYLE=never で色を消せます。

list

既知の形態素解析辞書の一覧を表示し、各辞書について(embed-* feature フラグ経由で)バイナリに埋め込まれているか、および lindera download で学習済み辞書がローカルにダウンロード済みかを表示します。

list パラメータ

このコマンドは引数を取りません。環境変数 LINDERA_DATA_DIR を設定すると、ダウンロード済み辞書を探すアプリケーションデータディレクトリを上書きできます(lindera download と同じ挙動です)。

list の使用方法

% lindera list
NAME            EMBEDDED  DOWNLOADED  PATH
ipadic          yes       yes         /home/user/.local/share/lindera/dictionaries/5.1.0/lindera-ipadic
ipadic-neologd  no        no          -
unidic          no        incomplete  /home/user/.local/share/lindera/dictionaries/5.1.0/lindera-unidic
sudachidict     no        no          -
ko-dic          no        no          -
cc-cedict       no        no          -
jieba           no        no          -

出力は1行につき1辞書です:

  • EMBEDDED は、ビルド時に辞書が埋め込まれている場合(例: --features=embed-ipadic)に yes になります。
  • DOWNLOADED は、実行中の CLI バージョンに対応する lindera download でインストールされた完全な辞書が存在する場合に yes、インストールディレクトリは存在するが必要なファイルが欠けている場合に incomplete になります(lindera download <name> --force で再ダウンロードしてください)。
  • PATH は、インストールディレクトリが存在する場合はそのパス、存在しない場合は - を表示します。

tokenize

様々な辞書を使用して、日本語、中国語、または韓国語のテキストに対して形態素解析(トークナイズ)を行います。

パラメータ

  • --dict / -d: 辞書のパス、URI、またはダウンロード済み辞書名(必須)
    • ファイルパス: /path/to/dictionary
    • 埋め込み: embedded://ipadic, embedded://unidic, etc.
    • ダウンロード済み辞書名: ipadic, unidic など。lindera download でインストールした辞書に解決されます。同名のファイルパスが実在する場合はパスが優先されます。
  • --output / -o: 出力形式 (デフォルト: mecab)
    • mecab: 品詞情報を含むMeCab互換形式
    • wakati: スペース区切りのトークンのみ。入力 1 行につき 1 行(トークンのない行は空行)
    • json: すべてのトークン情報を含む詳細なJSON形式
  • --user-dict / -u: ユーザー辞書のパス(オプション)。文脈 ID がシステム辞書の接続コスト行列の範囲外にある見出し語はエラーになります(文脈 ID を参照)。
  • --mode / -m: トークナイズモード (デフォルト: normal)
    • normal: 標準的なトークナイズ
    • decompose: 複合語を分解する
  • --char-filter / -c: 文字フィルタ設定 (JSON)
  • --token-filter / -t: トークンフィルタ設定 (JSON)
  • --keep-whitespace: 空白文字のトークンを出力に含める。このとき空白はラティスにも残るため、他のトークンもデフォルトの出力と変わることがある(デフォルトでは空白は出力から除去され、辞書の metadata.json で無効にしていない限り(SudachiDict は無効)、MeCab と同様にラティス上で読み飛ばされる)
  • --disable-skip-whitespace: 空白を読み飛ばさず、独立したノード(空白の見出し語か SPACE の未知語)としてラティスに残す(出力からは引き続き除去する。v7 より前の動作)。そのノードの連接コストがすべて 0 の ko-dic では、空白のたびに連接の文脈が途切れる。読み飛ばしは、metadata.json で無効にしていない辞書(SudachiDict は無効)ではデフォルトで有効。--keep-whitespace と併用した場合は効果がない。Segmenter のドキュメントを参照
  • --max-grouping-len: 未知語グルーピングの上限(先頭を除いた文字数。MeCab の max-grouping-size に相当し、MeCab のデフォルトは 24)。上限は各位置で判定され、ラン(MeCab と同じく、どの文字も直前の文字と char.def の文字種を共有する連続)が上限を超える位置ではグルーピング候補を出さず、1 文字候補(および候補ラダーと辞書語)が残ります。残りの末尾は上限に収まった時点で再びグルーピングされるため、未知語トークンは最長で上限 + 1 文字になります。0 または省略: 無制限。例は Segmenter のドキュメントを参照
  • --disable-unknown-word-ladder: MeCab/Vibrato 由来の未知語候補ラダー(char.def の LENGTH フィールド)を無効化する。デフォルトで有効。無効にすると、v6 より前と同じくこれらの候補を作らない。ただし、グルーピングした未知語の内側から始まる未知語など、その後の変更による出力の違いは残る。Segmenter のドキュメントを参照
  • --disable-space-penalty: 辞書の metadata.json に同梱されたルールでデフォルト有効になる左側空白ペナルティ(mecab-ko の left-space-penalty-factor。ko-dic は mecab-ko-dic のルールを同梱)を無効にする。直前に空白があり、先頭品詞タグが一覧にある候補にコストを加算する機能で、--disable-skip-whitespace と併せて無効にすると、空白まわりの韓国語の解析について v6.0 以降に入った 2 つの変更(このペナルティと空白の読み飛ばし)がどちらもオフになる。ただし、." のような記号の連続が分かれるなど、それ以外の出力の変化は残る。Segmenter のドキュメントを参照
  • --space-penalty-rules: 辞書のルールの代わりに、明示的な左側空白ペナルティのルールを JSON で指定する。例: '{"rules":[{"pos":["JKS","JX"],"cost":6000}]}'。--disable-space-penalty とは同時に指定できない
  • --mmap: 辞書ディレクトリの単語リストにメモリマップドファイル読み込みを使用する。embedded:// 辞書、および mmap feature が無効な場合は無視される。プロセスがマップを保持している間に辞書ディレクトリを再ビルド・切り詰めると、次回のルックアップで SIGBUS を引き起こす可能性がある。
  • --nbest / -N: 返す N-best 結果の数(デフォルト: 1)。2以上に設定すると N-best 出力が有効になります。
  • --nbest-unique: 同じ分割を生成するパスの重複を排除します。各結果は、その単語境界のパスのうち最もコストの低いものです。
  • --nbest-cost-threshold: 最良の結果からの最大コスト差。best_cost + threshold 以内のコストを持つ結果のみが返されます。どちらのコストも入力行全体の合計です。
  • 入力ファイル: オプションのファイルパス (デフォルト: 標準入力)。入力は 1 行ずつ読み込まれ、行ごとに解析されます。取り除くのは行末の改行コード(\n または \r\n)だけで、行頭・行末の空白も行の途中と同じに扱います(SPACE の文字である半角空白とタブは読み飛ばして出力から除き、U+3000 は IPADIC・IPADIC-NEologd・UniDic ではトークンになります)。JSON 出力のバイトオフセットは入力行の中の位置を指します。MeCab は CRLF の行の \r も未知語として出力しますが、Lindera は取り除きます

基本的な使用方法

# 辞書ディレクトリを指定してトークナイズ
echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict /path/to/dictionary

# 埋め込み辞書を指定してトークナイズ
echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict embedded://ipadic

# 出力形式を指定してトークナイズ
echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict embedded://ipadic \
  --output json

# ファイルからテキストを読み込んでトークナイズ
lindera tokenize \
  --dict /path/to/dictionary \
  --output wakati \
  input.txt

外部辞書を使用した例

外部IPADIC(日本語辞書)を使用したトークナイズ

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict /tmp/lindera-ipadic-2.7.0-20250920
日本語  名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
形態素  名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析    名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行う    動詞,自立,*,*,五段・ワ行促音便,基本形,行う,オコナウ,オコナウ
こと    名詞,非自立,一般,*,*,*,こと,コト,コト
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
でき    動詞,自立,*,*,一段,連用形,できる,デキ,デキ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。
EOS

外部IPADIC NEologd(日本語辞書)を使用したトークナイズ

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict /tmp/lindera-ipadic-neologd-0.0.7-20200820
日本語  名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
形態素解析      名詞,固有名詞,一般,*,*,*,形態素解析,ケイタイソカイセキ,ケイタイソカイセキ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行う    動詞,自立,*,*,五段・ワ行促音便,基本形,行う,オコナウ,オコナウ
こと    名詞,非自立,一般,*,*,*,こと,コト,コト
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
でき    動詞,自立,*,*,一段,連用形,できる,デキ,デキ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。
EOS

外部UniDic(日本語辞書)を使用したトークナイズ

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict /tmp/lindera-unidic-2.1.2
日本    名詞,固有名詞,地名,国,*,*,ニッポン,日本,日本,ニッポン,日本,ニッポン,固,*,*,*,*
語      名詞,普通名詞,一般,*,*,*,ゴ,語,語,ゴ,語,ゴ,漢,*,*,*,*
の      助詞,格助詞,*,*,*,*,ノ,の,の,ノ,の,ノ,和,*,*,*,*
形態    名詞,普通名詞,一般,*,*,*,ケイタイ,形態,形態,ケータイ,形態,ケータイ,漢,*,*,*,*
素      接尾辞,名詞的,一般,*,*,*,ソ,素,素,ソ,素,ソ,漢,*,*,*,*
解析    名詞,普通名詞,サ変可能,*,*,*,カイセキ,解析,解析,カイセキ,解析,カイセキ,漢,*,*,*,*
を      助詞,格助詞,*,*,*,*,ヲ,を,を,オ,を,オ,和,*,*,*,*
行う    動詞,一般,*,*,五段-ワア行,連体形-一般,オコナウ,行う,行う,オコナウ,行う,オコナウ,和,*,*,*,*
こと    名詞,普通名詞,一般,*,*,*,コト,事,こと,コト,こと,コト,和,コ濁,基本形,*,*
が      助詞,格助詞,*,*,*,*,ガ,が,が,ガ,が,ガ,和,*,*,*,*
でき    動詞,非自立可能,*,*,上一段-カ行,連用形-一般,デキル,出来る,でき,デキ,できる,デキル,和,*,*,*,*
ます    助動詞,*,*,*,助動詞-マス,終止形-一般,マス,ます,ます,マス,ます,マス,和,*,*,*,*
。      補助記号,句点,*,*,*,*,,。,。,,。,,記号,*,*,*,*
EOS

外部ko-dic(韓国語辞書)を使用したトークナイズ

% echo "한국어의형태해석을실시할수있습니다." | lindera tokenize \
  --dict /tmp/lindera-ko-dic-2.1.1-20180720
한국어  NNG,*,F,한국어,Compound,*,*,한국/NNG/*+어/NNG/*
의      JKG,*,F,의,*,*,*,*
형태    NNG,*,F,형태,*,*,*,*
해석    NNG,행위,T,해석,*,*,*,*
을      JKO,*,T,을,*,*,*,*
실시    NNG,행위,F,실시,*,*,*,*
할      XSV+ETM,*,T,할,Inflect,XSV,ETM,하/XSV/*+ᆯ/ETM/*
수      NNB,*,F,수,*,*,*,*
있      VV,*,T,있,*,*,*,*
습니다  EF,*,F,습니다,*,*,*,*
.       SF,*,*,*,*,*,*,*
EOS

外部CC-CEDICT(中国語辞書)を使用したトークナイズ

% echo "可以进行中文形态学分析。" | lindera tokenize \
  --dict /tmp/lindera-cc-cedict-0.1.0-20200409
可以    *,*,*,*,ke3 yi3,可以,可以,can/may/possible/able to/not bad/pretty good/
进行    *,*,*,*,jin4 xing2,進行,进行,to advance/to conduct/underway/in progress/to do/to carry out/to carry on/to execute/
中文    *,*,*,*,Zhong1 wen2,中文,中文,Chinese language/
形态学  *,*,*,*,xing2 tai4 xue2,形態學,形态学,morphology (in biology or linguistics)/
分析    *,*,*,*,fen1 xi1,分析,分析,to analyze/analysis/CL:個|个[ge4]/
。      *,*,*,*,*,*,*,*
EOS

外部Jieba(中国語辞書)を使用したトークナイズ

% echo "可以进行中文形态学分析。" | lindera tokenize \
  --dict /tmp/lindera-jieba-0.1.1

埋め込み辞書を使用した例

Linderaは、特定の機能フラグを指定してビルドすることで、バイナリに辞書を直接含めることができます。これにより、外部辞書ファイルなしでトークナイズが可能になります。

埋め込みIPADIC(日本語辞書)を使用したトークナイズ

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict embedded://ipadic
日本語  名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
形態素  名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ
解析    名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行う    動詞,自立,*,*,五段・ワ行促音便,基本形,行う,オコナウ,オコナウ
こと    名詞,非自立,一般,*,*,*,こと,コト,コト
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
でき    動詞,自立,*,*,一段,連用形,できる,デキ,デキ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。
EOS

注意: IPADIC辞書をバイナリに含めるには、--features=embed-ipadic オプションを使用してビルドする必要があります。

埋め込みUniDic(日本語辞書)を使用したトークナイズ

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict embedded://unidic
日本    名詞,固有名詞,地名,国,*,*,ニッポン,日本,日本,ニッポン,日本,ニッポン,固,*,*,*,*
語      名詞,普通名詞,一般,*,*,*,ゴ,語,語,ゴ,語,ゴ,漢,*,*,*,*
の      助詞,格助詞,*,*,*,*,ノ,の,の,ノ,の,ノ,和,*,*,*,*
形態    名詞,普通名詞,一般,*,*,*,ケイタイ,形態,形態,ケータイ,形態,ケータイ,漢,*,*,*,*
素      接尾辞,名詞的,一般,*,*,*,ソ,素,素,ソ,素,ソ,漢,*,*,*,*
解析    名詞,普通名詞,サ変可能,*,*,*,カイセキ,解析,解析,カイセキ,解析,カイセキ,漢,*,*,*,*
を      助詞,格助詞,*,*,*,*,ヲ,を,を,オ,を,オ,和,*,*,*,*
行う    動詞,一般,*,*,五段-ワア行,連体形-一般,オコナウ,行う,行う,オコナウ,行う,オコナウ,和,*,*,*,*
こと    名詞,普通名詞,一般,*,*,*,コト,事,こと,コト,こと,コト,和,コ濁,基本形,*,*
が      助詞,格助詞,*,*,*,*,ガ,が,が,ガ,が,ガ,和,*,*,*,*
でき    動詞,非自立可能,*,*,上一段-カ行,連用形-一般,デキル,出来る,でき,デキ,できる,デキル,和,*,*,*,*
ます    助動詞,*,*,*,助動詞-マス,終止形-一般,マス,ます,ます,マス,ます,マス,和,*,*,*,*
。      補助記号,句点,*,*,*,*,,。,。,,。,,記号,*,*,*,*
EOS

注意: UniDic辞書をバイナリに含めるには、--features=embed-unidic オプションを使用してビルドする必要があります。

埋め込みIPADIC NEologd(日本語辞書)を使用したトークナイズ

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize \
  --dict embedded://ipadic-neologd
日本語  名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
形態素解析      名詞,固有名詞,一般,*,*,*,形態素解析,ケイタイソカイセキ,ケイタイソカイセキ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
行う    動詞,自立,*,*,五段・ワ行促音便,基本形,行う,オコナウ,オコナウ
こと    名詞,非自立,一般,*,*,*,こと,コト,コト
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
でき    動詞,自立,*,*,一段,連用形,できる,デキ,デキ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。      記号,句点,*,*,*,*,。,。,。
EOS

注意: IPADIC NEologd辞書をバイナリに含めるには、--features=embed-ipadic-neologd オプションを使用してビルドする必要があります。

埋め込みko-dic(韓国語辞書)を使用したトークナイズ

% echo "한국어의형태해석을실시할수있습니다." | lindera tokenize \
  --dict embedded://ko-dic
한국어  NNG,*,F,한국어,Compound,*,*,한국/NNG/*+어/NNG/*
의      JKG,*,F,의,*,*,*,*
형태    NNG,*,F,형태,*,*,*,*
해석    NNG,행위,T,해석,*,*,*,*
을      JKO,*,T,을,*,*,*,*
실시    NNG,행위,F,실시,*,*,*,*
할      XSV+ETM,*,T,할,Inflect,XSV,ETM,하/XSV/*+ᆯ/ETM/*
수      NNB,*,F,수,*,*,*,*
있      VV,*,T,있,*,*,*,*
습니다  EF,*,F,습니다,*,*,*,*
.       SF,*,*,*,*,*,*,*
EOS

注意: ko-dic辞書をバイナリに含めるには、--features=embed-ko-dic オプションを使用してビルドする必要があります。

埋め込みCC-CEDICT(中国語辞書)を使用したトークナイズ

% echo "可以进行中文形态学分析。" | lindera tokenize \
  --dict embedded://cc-cedict
可以    *,*,*,*,ke3 yi3,可以,可以,can/may/possible/able to/not bad/pretty good/
进行    *,*,*,*,jin4 xing2,進行,进行,to advance/to conduct/underway/in progress/to do/to carry out/to carry on/to execute/
中文    *,*,*,*,Zhong1 wen2,中文,中文,Chinese language/
形态学  *,*,*,*,xing2 tai4 xue2,形態學,形态学,morphology (in biology or linguistics)/
分析    *,*,*,*,fen1 xi1,分析,分析,to analyze/analysis/CL:個|个[ge4]/
。      *,*,*,*,*,*,*,*
EOS

注意: CC-CEDICT辞書をバイナリに含めるには、--features=embed-cc-cedict オプションを使用してビルドする必要があります。

埋め込みJieba(中国語辞書)を使用したトークナイズ

% echo "可以进行中文形态学分析。" | lindera tokenize \
  --dict embedded://jieba

注意: Jieba辞書をバイナリに含めるには、--features=embed-jieba オプションを使用してビルドする必要があります。

ユーザー辞書の例

Linderaは、システム辞書と一緒にカスタム単語を追加するためのユーザー辞書をサポートしています。ユーザー辞書はCSVまたはバイナリ形式にすることができます。

ユーザー辞書の使用(CSV形式)

% echo "東京スカイツリーの最寄り駅はとうきょうスカイツリー駅です" | lindera tokenize \
  --dict embedded://ipadic \
  --user-dict ./resources/user_dict/ipadic_simple_userdic.csv
東京スカイツリー        カスタム名詞,*,*,*,*,*,東京スカイツリー,トウキョウスカイツリー,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
最寄り駅        名詞,一般,*,*,*,*,最寄り駅,モヨリエキ,モヨリエキ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
とうきょうスカイツリー駅        カスタム名詞,*,*,*,*,*,とうきょうスカイツリー駅,トウキョウスカイツリーエキ,*
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS

ユーザー辞書の使用(バイナリ形式)

% echo "東京スカイツリーの最寄り駅はとうきょうスカイツリー駅です" | lindera tokenize \
  --dict /tmp/lindera-ipadic-2.7.0-20250920 \
  --user-dict ./resources/user_dict/ipadic_simple_userdic.bin
東京スカイツリー        カスタム名詞,*,*,*,*,*,東京スカイツリー,トウキョウスカイツリー,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
最寄り駅        名詞,一般,*,*,*,*,最寄り駅,モヨリエキ,モヨリエキ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
とうきょうスカイツリー駅        カスタム名詞,*,*,*,*,*,とうきょうスカイツリー駅,トウキョウスカイツリーエキ,*
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS

トークナイズモード

Linderaは2つのトークナイズモードを提供します:normal と decompose です。

Normal モード(デフォルト)

辞書に登録された単語に基づいて忠実にトークナイズします:

% echo "関西国際空港限定トートバッグ" | lindera tokenize \
  --dict embedded://ipadic \
  --mode normal
関西国際空港    名詞,固有名詞,組織,*,*,*,関西国際空港,カンサイコクサイクウコウ,カンサイコクサイクーコー
限定    名詞,サ変接続,*,*,*,*,限定,ゲンテイ,ゲンテイ
トートバッグ    名詞,一般,*,*,*,*,*,*,*
EOS

Decompose モード

複合語をさらに分解してトークナイズします:

% echo "関西国際空港限定トートバッグ" | lindera tokenize \
  --dict embedded://ipadic \
  --mode decompose
関西    名詞,固有名詞,地域,一般,*,*,関西,カンサイ,カンサイ
国際    名詞,一般,*,*,*,*,国際,コクサイ,コクサイ
空港    名詞,一般,*,*,*,*,空港,クウコウ,クーコー
限定    名詞,サ変接続,*,*,*,*,限定,ゲンテイ,ゲンテイ
トートバッグ    名詞,一般,*,*,*,*,*,*,*
EOS

出力形式

Linderaは3つの出力形式を提供します:mecab, wakati, json。

MeCab 形式(デフォルト)

品詞情報を含むMeCab互換形式で結果を出力します:

% echo "お待ちしております。" | lindera tokenize \
  --dict embedded://ipadic \
  --output mecab
お待ち  名詞,サ変接続,*,*,*,*,お待ち,オマチ,オマチ
し  動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て  助詞,接続助詞,*,*,*,*,て,テ,テ
おり  動詞,非自立,*,*,五段・ラ行,連用形,おる,オリ,オリ
ます  助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
。  記号,句点,*,*,*,*,。,。,。
EOS

Wakati 形式

トークンテキストのみをスペース区切りで、入力 1 行につき 1 行(-N では結果 1 件につき 1 行)出力します。空行や空白だけの行のようにトークンのない行は、MeCab と同じく空行になります:

% echo "お待ちしております。" | lindera tokenize \
  --dict embedded://ipadic \
  --output wakati
お待ち し て おり ます 。

JSON 形式

すべてのトークン情報を含む詳細なJSON形式で出力します:

% echo "お待ちしております。" | lindera tokenize \
  --dict embedded://ipadic \
  --output json
[
  {
    "base_form": "お待ち",
    "byte_end": 9,
    "byte_start": 0,
    "conjugation_form": "*",
    "conjugation_type": "*",
    "part_of_speech": "名詞",
    "part_of_speech_subcategory_1": "サ変接続",
    "part_of_speech_subcategory_2": "*",
    "part_of_speech_subcategory_3": "*",
    "pronunciation": "オマチ",
    "reading": "オマチ",
    "surface": "お待ち",
    "word_id": 14698
  },
  ...
]

N-Best トークナイズ

Linderaは N-Best トークナイズをサポートしており、コスト順(低コスト=高精度)に上位 N 件のトークナイズ候補を返します。これは MeCab の N-Best 実装と互換性のある Forward-DP Backward-A* アルゴリズムに基づいています。

行は \t・。・、 で文に区切られますが、、 と 。 をまたいで文脈を引き継ぐため、タブを含まない行の候補は、行全体の分割のうちコストの小さい N 件です(わずかな例外は文分割を参照)。タブは区間の終わりになります。タブを含む行は区間ごとに探索され、候補は区間ごとに 1 つのパスを選んだ組み合わせのうちコストの小さい N 件です。どの候補も行全体の分割です。

基本的な N-Best の例

% echo "すもももももももものうち" | lindera tokenize \
  --dict embedded://ipadic \
  -N 3
NBEST 1 (cost=21245)
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
NBEST 2 (cost=24541)
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
NBEST 3 (cost=24541)
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

2 位と 3 位は、分割は異なりますがコストは同じ(24541)です。

ユニーク結果を使用した N-Best

同じ分割が複数のパスに現れる場合(各単語の品詞など、辞書エントリだけが異なる場合)、--nbest-unique を使用して重複を排除します。各結果は、その単語境界のパスのうち最もコストの低いものになります。探索は他のパスをたどりません(短い行でも数百万本になることがあります):

% echo "営業部長谷川です" | lindera tokenize \
  --dict embedded://ipadic \
  -N 5 --nbest-unique -o wakati
NBEST 1 (cost=15760)
営業 部長 谷川 です
NBEST 2 (cost=17747)
営業 部 長谷川 です
NBEST 3 (cost=18365)
営業 部 長谷 川 です
NBEST 4 (cost=21125)
営業 部 長 谷川 です
NBEST 5 (cost=22259)
営業 部長 谷 川 です

コスト閾値を使用した N-Best

--nbest-cost-threshold を使用して、最良パスから一定のコスト範囲内の結果に制限します:

% echo "営業部長谷川です" | lindera tokenize \
  --dict embedded://ipadic \
  -N 10 --nbest-unique --nbest-cost-threshold 5000 -o wakati
NBEST 1 (cost=15760)
営業 部長 谷川 です
NBEST 2 (cost=17747)
営業 部 長谷川 です
NBEST 3 (cost=18365)
営業 部 長谷 川 です

上の例の 4 位のコスト 21125 が 15760 + 5000 = 20760 を超えるため、3 件の結果のみが返されます。

フィルタを使用した高度なトークナイズ

Linderaは、文字フィルタ、トークナイザー、トークンフィルタを組み合わせた分析フレームワークを提供します。フィルタはJSONを使用して構成します。

% echo "すもももももももものうち" | lindera tokenize \
  --dict embedded://ipadic \
  --char-filter 'unicode_normalize:{"kind":"nfkc"}' \
  --token-filter 'japanese_keep_tags:{"tags":["名詞,一般"]}'
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
EOS

build

Linderaで使用するための形態素解析辞書をCSVソースファイルからビルド(コンパイル)します。

ビルドパラメータ

  • --src / -s: 辞書CSVファイルを含むソースディレクトリ(ユーザー辞書の場合は単一CSVファイル)
  • --dest / -d: コンパイルされた辞書の出力先ディレクトリ
  • --metadata / -m: 辞書構造を定義するメタデータ設定ファイル (metadata.json)
  • --user / -u: システム辞書の代わりにユーザー辞書をビルドする(オプションフラグ)
  • --system-dict: ユーザー辞書を組み合わせるシステム辞書。ディレクトリのパス、URI、ダウンロード済みの辞書名のいずれかで、tokenize --dict と同じ形で指定する(オプション。--user のときだけ)。指定すると、各行の文脈 ID をそのシステム辞書の接続コスト行列と照らし合わせて確認します(文脈 ID の確認 を参照)
  • --context-id-freq / -f: 接続コストIDの並び替えに使用するコンテキストID アクセス頻度ファイル(オプション。辞書の metadata.json で connection_id_mapping: true が設定されている場合にのみ意味を持ちます)

辞書の種類

システム辞書 (System dictionary)

以下を含む完全な形態素解析辞書です:

  • 語彙エントリ(単語定義)
  • 接続コスト行列
  • 未知語処理ルール
  • 文字種定義

ユーザー辞書 (User dictionary)

システム辞書と一緒に動作する、カスタム単語のための補助辞書です。

文脈 ID の確認

システム辞書をビルドするとき、lindera build は MeCab の mecab-dict-index と同じく、すべての文脈 ID が接続コスト行列の範囲内にあることを確認します。lex.csv の各行と unk.def の各行で、右文脈 ID は matrix.def のヘッダの 1 つ目の値より小さく、左文脈 ID は 2 つ目の値より小さくなければなりません。これに反する辞書はビルドに失敗し、エラーはファイル・行・ID・行列の大きさを示します。たとえば 2 x 2 の matrix.def で、lex.csv の 2 行目の右文脈 ID が 2 の場合は次のとおりです:

Error: LinderaError { kind: Content, source: ./dict-source/lex.csv: line 2: right context id 2 is out of range for the connection matrix (matrix.def size 2 2; right context ids must be below 2) }
  • 辞書の metadata.json で skip_invalid_cost_or_id が true の場合は、そうした lex.csv の行を取り除き、標準エラー出力に警告を出します(警告とログメッセージを参照)。unk.def の行は常に確認します。
  • ID が軸の範囲外にある matrix.def の行もエラーになり、フィールドが 4 つ未満の unk.def の行もエラーになります。
  • ユーザー辞書(--user)を確認するのは、組み合わせるシステム辞書を --system-dict で指定したときだけです(次の段落を参照)。

--system-dict を指定すると、lindera build --user はユーザー辞書の各行を、そのシステム辞書の接続コスト行列と同じ範囲で照らし合わせて確認します。簡易形式の行は、metadata.json の既定の文脈 ID(default_left_context_id と default_right_context_id)で確認します。行列の範囲外にある最初の行でビルドは失敗し、エラーはその行の CSV の行番号と表層形を示します。.bin ファイルは書き出しません。たとえば IPADIC の 1316 x 1316 の行列に対して、userdic.csv の 2 行目の左文脈 ID が 60000 の場合は次のとおりです:

% lindera build --src ./userdic.csv --dest ./user_dict --metadata ./lindera-ipadic/metadata.json --user --system-dict embedded://ipadic
Error: LinderaError { kind: Content, source: user dictionary line 2 (surface: '東京スカイツリー'): left context id 60000 is out of range for the connection matrix (matrix.def size 1316 1316; left context ids must be below 1316) }

--system-dict を指定しないと、ビルドの時点では組み合わせるシステム辞書が分からないため、ユーザー辞書はそのままビルドされます。その後 lindera tokenize --user-dict がシステム辞書と照らし合わせて確認し、行列の範囲外にある最初の見出し語を単語 ID で示すエラーで失敗します(文脈 ID を参照)。lindera tokenize --user-dict に .csv を渡すと、読み込むときに --dict のシステム辞書に合わせてビルドするため、--system-dict と同じく CSV の行番号と表層形を示すエラーになります。

matrix.def にないセル

matrix.def は、すべてのセルを列挙しなくてもかまいません。lindera build は、matrix.def が列挙していないセルのコストを、MeCab の mecab-dict-index と同じく 0 にします。v6.2.0 までは、そうしたセルのコストは 32767(i16::MAX)で、その接続は非常に高いコストになっていました。たとえば次の matrix.def では、右文脈 ID 1 から左文脈 ID 0 と 1 への接続のコストが 10 と 20 になり、残りの 7 つのセルのコストは 0 になります。

3 3
1 0 10
1 1 20

同梱の辞書と、lindera export が書き出す matrix.def は、すべてのセルを列挙しているため、この規則で変わることはありません。

char.def と unk.def の確認

システム辞書をビルドするとき、lindera build は mecab-dict-index と同じく、char.def と unk.def を互いに照らし合わせて確認します:

  • char.def の範囲行が指すカテゴリは、それより前の行で定義されていること
  • 各カテゴリの定義は 1 回だけであること
  • unk.def の各行が、char.def で定義したカテゴリを指すこと
  • char.def の各カテゴリに、unk.def の行が 1 行以上あること

どれかに反する辞書はビルドに失敗し、エラーはファイルとカテゴリを示します。unk.def の行がないカテゴリ以外では、行も示します。以前はこうした辞書もビルドでき、その後の lindera tokenize は、未定義のカテゴリの文字で panic したり、一部のカテゴリに別のカテゴリの設定を使ったり、どの単語にも未知語にも覆われない文字の手前で出力を打ち切ったり、unk.def の行を無視したりしていました。たとえば、char.def が SPACE カテゴリを定義し、unk.def に SPACE の行がない場合は、次のようになります:

Error: LinderaError { kind: Content, source: ./dict-source/unk.def: no line for category SPACE, which char.def defines; every char.def category needs at least one unk.def line }

lindera train も、学習の前に --char-def と --unk-def を同じように確認します(学習パイプラインを参照)。

例

IPADIC(日本語辞書)のビルド

# IPADICソースファイルのダウンロードと展開
% curl -L -o /tmp/mecab-ipadic-2.7.0-20250920.tar.gz "https://Lindera.dev/mecab-ipadic-2.7.0-20250920.tar.gz"
% tar zxvf /tmp/mecab-ipadic-2.7.0-20250920.tar.gz -C /tmp

# 辞書のビルド
% lindera build \
  --src /tmp/mecab-ipadic-2.7.0-20250920 \
  --dest /tmp/lindera-ipadic-2.7.0-20250920 \
  --metadata ./lindera-ipadic/metadata.json

IPADIC NEologd(日本語辞書)のビルド

% curl -L -o /tmp/mecab-ipadic-neologd-0.0.7-20200820.tar.gz "https://lindera.dev/mecab-ipadic-neologd-0.0.7-20200820.tar.gz"
% tar zxvf /tmp/mecab-ipadic-neologd-0.0.7-20200820.tar.gz -C /tmp

% lindera build \
  --src /tmp/mecab-ipadic-neologd-0.0.7-20200820 \
  --dest /tmp/lindera-ipadic-neologd-0.0.7-20200820 \
  --metadata ./lindera-ipadic-neologd/metadata.json

UniDic(日本語辞書)のビルド

% curl -L -o /tmp/unidic-mecab-2.1.2.tar.gz "https://Lindera.dev/unidic-mecab-2.1.2.tar.gz"
% tar zxvf /tmp/unidic-mecab-2.1.2.tar.gz -C /tmp

% lindera build \
  --src /tmp/unidic-mecab-2.1.2 \
  --dest /tmp/lindera-unidic-2.1.2 \
  --metadata ./lindera-unidic/metadata.json \
  --context-id-freq ./lindera-unidic/context_id_freq.txt

CC-CEDICT(中国語辞書)のビルド

% curl -L -o /tmp/CC-CEDICT-MeCab-0.1.0-20200409.tar.gz "https://lindera.dev/CC-CEDICT-MeCab-0.1.0-20200409.tar.gz"
% tar zxvf /tmp/CC-CEDICT-MeCab-0.1.0-20200409.tar.gz -C /tmp

% lindera build \
  --src /tmp/CC-CEDICT-MeCab-0.1.0-20200409 \
  --dest /tmp/lindera-cc-cedict-0.1.0-20200409 \
  --metadata ./lindera-cc-cedict/metadata.json

Jieba(中国語辞書)のビルド

% curl -L -o /tmp/mecab-jieba-0.1.1.tar.gz "https://lindera.dev/mecab-jieba-0.1.1.tar.gz"
% tar zxvf /tmp/mecab-jieba-0.1.1.tar.gz -C /tmp

% lindera build \
  --src /tmp/mecab-jieba-0.1.1/dict-src \
  --dest /tmp/lindera-jieba-0.1.1 \
  --metadata ./lindera-jieba/metadata.json

ko-dic(韓国語辞書)のビルド

% curl -L -o /tmp/mecab-ko-dic-2.1.1-20180720.tar.gz "https://Lindera.dev/mecab-ko-dic-2.1.1-20180720.tar.gz"
% tar zxvf /tmp/mecab-ko-dic-2.1.1-20180720.tar.gz -C /tmp

% lindera build \
  --src /tmp/mecab-ko-dic-2.1.1-20180720 \
  --dest /tmp/lindera-ko-dic-2.1.1-20180720 \
  --metadata ./lindera-ko-dic/metadata.json \
  --context-id-freq ./lindera-ko-dic/context_id_freq.txt

ユーザー辞書のビルド

IPADICユーザー辞書(日本語)のビルド

ユーザー辞書フォーマットの詳細については、以下のURLを参照してください:

% lindera build \
  --src ./resources/user_dict/ipadic_simple_userdic.csv \
  --dest ./resources/user_dict \
  --metadata ./lindera-ipadic/metadata.json \
  --user

--system-dict embedded://ipadic(またはビルド済みの IPADIC のパス)を加えると、各行の文脈 ID を IPADIC の接続コスト行列と照らし合わせて確認します(文脈 ID の確認 を参照)。

UniDicユーザー辞書(日本語)のビルド

ユーザー辞書フォーマットの詳細については、以下のURLを参照してください:

% lindera build \
  --src ./resources/user_dict/unidic_simple_userdic.csv \
  --dest ./resources/user_dict \
  --metadata ./lindera-unidic/metadata.json \
  --user

SudachiDictユーザー辞書(日本語)のビルド

ユーザー辞書フォーマットの詳細については、以下のURLを参照してください:

% lindera build \
  --src ./resources/user_dict/sudachidict_simple_userdic.csv \
  --dest ./resources/user_dict \
  --metadata ./lindera-sudachidict/metadata.json \
  --user

CC-CEDICTユーザー辞書(中国語)のビルド

ユーザー辞書フォーマットの詳細については、以下のURLを参照してください:

% lindera build \
  --src ./resources/user_dict/cc-cedict_simple_userdic.csv \
  --dest ./resources/user_dict \
  --metadata ./lindera-cc-cedict/metadata.json \
  --user

Jiebaユーザー辞書(中国語)のビルド

ユーザー辞書フォーマットの詳細については、以下のURLを参照してください:

% lindera build \
  --src ./resources/user_dict/jieba_simple_userdic.csv \
  --dest ./resources/user_dict \
  --metadata ./lindera-jieba/metadata.json \
  --user

ko-dicユーザー辞書(韓国語)のビルド

ユーザー辞書フォーマットの詳細については、以下のURLを参照してください:

% lindera build \
  --src ./resources/user_dict/ko-dic_simple_userdic.csv \
  --dest ./resources/user_dict \
  --metadata ./lindera-ko-dic/metadata.json \
  --user

download

CLI と同じバージョンの学習済み辞書アーカイブを GitHub リリースページからダウンロードし、OS 標準のアプリケーションデータディレクトリにインストールします。

download パラメータ

  • 辞書名(必須): ipadic, ipadic-neologd, unidic, sudachidict, ko-dic, cc-cedict, jieba のいずれか
  • --force: 既存の辞書を再ダウンロードして置き換える

保存場所

辞書はバージョン付きレイアウト <データディレクトリ>/dictionaries/<バージョン>/lindera-<辞書名>/ にインストールされます。OS ごとのデフォルトのベースディレクトリ:

OSデフォルトの場所
Linux~/.local/share/lindera
macOS~/Library/Application Support/lindera
Windows%LOCALAPPDATA%\lindera

環境変数 LINDERA_DATA_DIR を設定するとベースディレクトリを上書きできます。この変数はビルド時のソースキャッシュ用変数 LINDERA_BUILD_DICTIONARY_CACHE_DIR とは無関係です。

download の使用方法

% lindera download ipadic
Downloading https://github.com/lindera/lindera/releases/download/v5.1.0/lindera-ipadic-5.1.0.zip
100% (15.1/15.1 MiB)
Downloaded dictionary 'ipadic'
/home/user/.local/share/lindera/dictionaries/5.1.0/lindera-ipadic

インストール先のパスは標準出力に出力されるため(進捗や通知は標準エラー出力)、スクリプトで取得できます:

% DICT_DIR=$(lindera download ipadic)

ダウンロード後は tokenize で辞書名を指定して参照できます:

% echo "日本語の形態素解析を行うことができます。" | lindera tokenize --dict ipadic

注意事項:

  • アーカイブのバージョンは常に CLI のバージョンと一致します。リリースが公開されていない開発版のバージョンで実行すると HTTP 404 で失敗します。
  • 整合性は HTTPS トランスポートと ZIP アーカイブ内蔵のファイルごとの CRC32 チェックサムで検証されます。
  • 最大の辞書(ipadic-neologd)は約 305 MB のダウンロードで、展開時にはその約 2 倍の空きディスク容量が必要です。

train

注釈付きコーパスデータから新しい形態素解析モデルを学習します。この機能を使用するには、train 機能フラグを有効にしてビルドする必要があります。(train 機能フラグはデフォルトで有効になっています。)

学習パラメータ

  • --seed / -s: 重み付けを行うシード語彙ファイル(CSV形式)
  • --corpus / -c: 学習用コーパス(注釈付きテキスト)
  • --char-def / -C: 文字定義ファイル (char.def)
  • --unk-def / -u: 未知語定義ファイル (unk.def) - 重み付けの対象
  • --feature-def / -f: 素性定義ファイル (feature.def)
  • --rewrite-def / -r: 書換えルール定義ファイル (rewrite.def)
  • --output / -o: 出力モデルファイル
  • --lambda / -l: 正則化係数 (0.0-1.0) (デフォルト: 0.01)
  • --regularization / -R: 正則化の種類: l1, l2, または elasticnet (デフォルト: l1)
  • --elastic-net-l1-ratio: Elastic Net 正則化時のL1比率 (0.0-1.0)。--regularization elasticnet を指定した場合のみ使用されます (デフォルト: 0.5)
  • --max-iterations / -i: 学習の最大反復回数 (デフォルト: 100)
  • --max-threads / -t: 最大スレッド数 (デフォルトはCPUコア数。速度のみに影響し、学習結果は変わりません)

基本的なワークフロー

1. 学習用ファイルの準備

シード語彙ファイル (seed.csv):

シード語彙ファイルは、CRFモデルの学習に使用される初期辞書エントリを含みます。各行はカンマ区切りのフィールドを持つ単語エントリを表します:

  • 表層形
  • 左文脈ID
  • 右文脈ID
  • 単語コスト
  • 品詞タグ(複数のフィールド)
  • 原形
  • 読み(カタカナ)
  • 発音

注意: 正確なフィールド定義は辞書フォーマット(IPADIC, UniDic, ko-dic, CC-CEDICT)によって異なります。詳細は各辞書のフォーマット仕様を参照してください。

外国,0,0,0,名詞,一般,*,*,*,*,外国,ガイコク,ガイコク
人,0,0,0,名詞,接尾,一般,*,*,*,人,ジン,ジン

このファイルは、lindera build が lex.csv を読むのと同じく CSV として読みます。フィールドは引用符で囲め(",",0,0,0,...)、# で始まる行はコメントではなくエントリです。詳しくは種辞書を参照してください。

学習用コーパス (corpus.txt):

学習用コーパスファイルは、CRFモデルの学習に使用される注釈付きテキストデータを含みます。各行は以下で構成されます:

  • 表層形(単語)とそれに続くタブ文字
  • カンマ区切りの形態素素性(品詞タグ、原形、読み、発音)
  • 文は "EOS" (End Of Sentence) マーカーで区切られます
外国	名詞,一般,*,*,*,*,外国,ガイコク,ガイコク
人	名詞,接尾,一般,*,*,*,人,ジン,ジン
参政	名詞,サ変接続,*,*,*,*,参政,サンセイ,サンセイ
権	名詞,接尾,一般,*,*,*,権,ケン,ケン
EOS

ファイルフォーマットや高度な機能の詳細については、学習パイプライン を参照してください。

2. モデルの学習

lindera train \
  --seed ./resources/training/seed.csv \
  --corpus ./resources/training/corpus.txt \
  --unk-def ./resources/training/unk.def \
  --char-def ./resources/training/char.def \
  --feature-def ./resources/training/feature.def \
  --rewrite-def ./resources/training/rewrite.def \
  --output /tmp/lindera/training/model.dat \
  --lambda 0.01 \
  --max-iterations 100

3. 学習結果

lindera train はモデルを --output のファイルに書き出します。学習用のラティスを作り終えると、コーパスの正解トークンのラベルの付き方を出力します(学習のしくみを参照)。./resources/training/ のファイルでは次のとおりです:

Lattice statistics: gold_lexicon=14 gold_unknown=0 gold_virtual=0 virtual_labels=0 negative_lexicon=0 negative_unknown=17

学習済みモデルには以下が含まれます:

  • シード辞書の語: シード辞書のすべてのレコード(学習された重みと文脈 ID 付き)
  • 未知語: unk.def のすべてのエントリをファイル順に(学習された重みと文脈 ID 付き)

シード辞書にないコーパスの語は、語として追加されません。それらは unk.def のエントリか、学習されるもののエクスポートされない仮想ラベルを通じて学習されます。

export

学習済みモデルファイルをLindera辞書フォーマットのファイルにエクスポートします。この機能を使用するには、train 機能フラグを有効にしてビルドする必要があります。

エクスポートパラメータ

  • --model / -m: 学習済みモデルファイル(.dat形式)のパス
  • --output / -o: 辞書ファイルの出力先ディレクトリ
  • --metadata: オプションの metadata.json ファイル(学習済みモデル情報で更新されます)
  • --cost-factor: 重みからコストへの変換係数を上書き(デフォルト: 学習済みモデルの値、通常は700)

出力ファイル

エクスポートコマンドは出力ディレクトリに以下の辞書ファイルを作成します:

  • lex.csv: 学習された重みを持つ語彙ファイル(MeCab互換の tocost() によるコスト変換)
  • matrix.def: モデルの文脈 ID と BOS/EOS 用の 0 の全 (right_id, left_id) ペアを網羅する密な接続コスト行列。学習した重みがないペアのコストは、学習中や MeCab と同じく 0
  • unk.def: 未知語定義。学習の入力の unk.def のエントリごとに 1 行を、同じ順序で書き出す
  • char.def: 文字種定義
  • feature.def: 素性テンプレート定義(学習済みモデルからコピー)
  • rewrite.def: 素性リライトルール(学習済みモデルからコピー)
  • left-id.def: 左文脈IDから素性文字列へのマッピング
  • right-id.def: 右文脈IDから素性文字列へのマッピング
  • metadata.json: 更新されたメタデータファイル(--metadata オプションが指定された場合)

モデルの形式バージョン

lindera export が読み込めるのは、現在の形式バージョン(2.0.0)のモデルだけです。それより前のバージョンで書かれた model.dat(7.0.0 より前に書かれたものはすべて該当)は拒否されるため、lindera train で学習し直す必要があります。6.1.0 の CLI で学習したモデルでは次のとおりです:

Error: LinderaError { kind: Deserialize, source: failed to deserialize model: failed without error information; enable debug assertions and the `alloc` feature in rancor for error information. The file is not a legacy JSON model either, so it was most likely written by a different version of lindera-trainer; re-run `lindera train` to regenerate it. }

完全なワークフロー例

1. モデルの学習

lindera train \
  --seed ./resources/training/seed.csv \
  --corpus ./resources/training/corpus.txt \
  --unk-def ./resources/training/unk.def \
  --char-def ./resources/training/char.def \
  --feature-def ./resources/training/feature.def \
  --rewrite-def ./resources/training/rewrite.def \
  --output /tmp/lindera/training/model.dat \
  --lambda 0.01 \
  --max-iterations 100

2. 辞書フォーマットへのエクスポート

lindera export \
  --model /tmp/lindera/training/model.dat \
  --metadata ./resources/training/metadata.json \
  --output /tmp/lindera/training/dictionary

3. 辞書のビルド

lindera build \
  --src /tmp/lindera/training/dictionary \
  --dest /tmp/lindera/training/compiled_dictionary \
  --metadata /tmp/lindera/training/dictionary/metadata.json

4. 学習済み辞書の使用

echo "これは外国人参政権です。" | lindera tokenize -d /tmp/lindera/training/compiled_dictionary
これ	名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
外国	名詞,一般,*,*,*,*,外国,ガイコク,ガイコク
人	名詞,接尾,一般,*,*,*,人,ジン,ジン
参政	名詞,サ変接続,*,*,*,*,参政,サンセイ,サンセイ
権	名詞,接尾,一般,*,*,*,権,ケン,ケン
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。	記号,句点,*,*,*,*,。,。,。
EOS

メタデータ更新機能

--metadata オプションが指定されると、エクスポートコマンドは以下の処理を行います:

  1. ベースとなる metadata.json ファイルを読み込み、既存の設定を保持します
  2. 特定のフィールドを学習済みモデルの値で更新します:
    • default_word_cost: 素性重みの中央値から計算された値
    • model_info: 素性数、ラベル数、行列サイズ(connection_matrix_size。matrix.def の大きさを行数 x 列数で表す)、実際に回った学習の反復回数(training_iterations。--max-iterations 以下)、正則化、モデルの形式バージョンを含む学習統計情報。タイムスタンプは書き込まれないため、同じモデルを 2 回エクスポートすると同一の出力になります
  3. 既存の設定を保持します(辞書名、文字エンコード設定、スキーマ定義、その他のユーザー定義設定など)