目次
背景
- MeCabの仕組み・G2Pライブラリを作る時に調査した先行文献などのメモで、MeCabの辞書として触れたUniDicについて、仕組みを詳しく整理する
UniDicとは
- 国立国語研究所(NINJAL)が開発している、日本語の形態素解析用の辞書
- MeCab・fugashi・Sudachiなどの形態素解析器から利用できる
- 1つの辞書ではなく、対象とするテキストの種類ごとに別々の辞書として配布されている
| 辞書 | 対応コーパス | 対象 |
|---|---|---|
| 現代書き言葉UniDic | BCCWJ(現代日本語書き言葉均衡コーパス) | 一般的な現代日本語の文章 |
| 現代話し言葉UniDic | CSJ(日本語話し言葉コーパス) | 話し言葉特有の表現 |
| 古文用UniDic | CHJ(日本語歴史コーパス) | 古典文献や歴史的テキスト(和歌用など、さらに細かく分かれた版もある) |
- これら以外にも、関西方言用など、方言に対応した辞書も別途配布されている
- pip経由でよく使われる
unidicパッケージは、このうち現代書き言葉UniDicにあたる
形態素解析の基本用語
- UniDic特有の仕組みの前に、形態素解析一般で使われる基本用語を整理する
表層形・基本形・読み
| 用語 | 意味 | 例 |
|---|---|---|
| 表層形(Surface Form) | テキスト中に実際に現れている形 | 食べた |
| 基本形(Base Form) | 活用していない、辞書の見出しにあたる形 | 食べる |
| 読み(Reading) | その表層形・基本形の発音 | - |
品詞タグ(POS Tag)
- 品詞タグは、各単語がどの文法的なカテゴリに属するかを表すラベルで、UniDicのpos1(大分類)には以下のような種類がある(実際に
fugashiで解析して確認したもの)
| 品詞(pos1) | 意味 | 例 |
|---|---|---|
| 名詞(Noun) | 物事・概念を表す。普通名詞・固有名詞(Proper Noun、人名・地名など)・数詞などに細分化される | 犬、東京、三 |
| 代名詞(Pronoun) | 名詞の代わりに使われる語 | これ、彼 |
| 動詞(Verb) | 動作・状態を表す、活用する語 | 走る、ある |
| 形容詞(i-Adjective) | 性質・状態を表す、活用する語(い形容詞) | 美しい |
| 形状詞(Adjectival Noun) | 性質・状態を表すが、動詞・形容詞とは別の活用をする語(な形容詞) | 静か |
| 副詞(Adverb) | 動詞・形容詞などを修飾する語 | とても |
| 連体詞(Adnominal) | 名詞だけを修飾する、活用しない語 | その、大きな |
| 接続詞(Conjunction) | 文・句をつなぐ語 | しかし |
| 助詞(Particle) | 語と語の関係を示す付属語。格助詞・係助詞・接続助詞・終助詞などに細分化される | は、が、ので |
| 助動詞(Auxiliary Verb) | 動詞などに付いて意味を補う付属語 | です、ます |
| 接頭辞(Prefix) | 語の前につく要素 | お(お住まい) |
| 接尾辞(Suffix) | 語の後につく要素 | 的、さ |
| 感動詞(Interjection) | 感情の表出や、フィラー(言葉につまった時の「えっと」など)を含む | ああ、えっと |
| 補助記号(Auxiliary Symbol) | 句点・読点などの記号 | 。、, |
| 空白(Whitespace) | 空白文字 | (スペース) |
動詞の活用形
- 日本語の動詞は、文中での役割によって語尾が変化する、活用という仕組みを持つ
- 伝統的な学校文法では、未然形・連用形・終止形・連体形・仮定形(已然形)・命令形という6つの活用形に分類される
| 活用形 | 意味 | 例(書く) |
|---|---|---|
| 未然形 | まだ実現していないことを表す形 | 書か+ない |
| 連用形 | 用言・助動詞に連なる形 | 書き+ます |
| 終止形 | 文を終える、辞書の見出しにあたる形 | 書く |
| 連体形 | 体言(名詞)を修飾する形 | 書く人 |
| 仮定形 | 条件を表す形 | 書け+ば |
| 命令形 | 命令を表す形 | 書け |
ヘテロニム・モノフォン・ポリフォン
- G2Pライブラリを作る時に調査した先行文献などのメモで整理した用語を、UniDicの文脈でも使い分ける
| 用語 | 位置づけ | 意味 | 例 |
|---|---|---|---|
| ホモグラフ(Homograph) | 上位概念 | 表記が同じ語同士を指す | - |
| ヘテロニム(Heteronym) | ホモグラフの部分集合 | 表記は同じだが発音が異なる。日本語の「多音字」、中国語研究の「Polyphone」にあたる | 辛い(からい/つらい) |
| モノフォン(Monophone) | ポリフォンの対義語 | 単一の読みしか持たない文字・語。大多数の漢字がこちら | 猫(ネコ) |
| ポリフォン(Polyphone) | ヘテロニムと同義 | 複数の発音を持つ、特別な一群の文字・語 | 辛い |
- Polyphone BERTの論文(arXiv:2207.12089)では、「大多数の漢字はMonophonic(1つの発音しか持たない)で、複数の発音を持つ特別な一群がPolyphonic」と定義されている
ヘテロニムの2つの振る舞い
- ヘテロニムの定義(表記は同じだが発音が異なる)そのものには、意味が変わることは必須条件として含まれていない。そのため、ヘテロニムは「なぜ複数の読みが生じるか」という観点で、さらに2つの振る舞いに分けられる。日本語のG2P研究でこの名称が完全に統一されているわけではないが、英語では次のように呼ばれることが多い
| 種類 | 英語での呼び方 | 特徴 | 例 |
|---|---|---|---|
| 文脈依存型 | Context-dependent pronunciation | 文脈・意味によって正しい読みが1つに決まる | 人気(この店は人気がある→ニンキ/夜の公園には人気がない→ヒトケ) |
| 複数読み許容型 | Free-variation pronunciations(Pronunciation variants) | 意味は変わらないまま、複数の読みがどちらも等しく正しい | 日本(にほん/にっぽん) |
- 前者は文脈を使って1つに絞り込むべき問題、後者はそもそも1つに絞り込む必要のない問題という違いがある
- 実際に「人気」を含む2つの文をUniDicで解析すると、どちらも「ニンキ」と判定され、「夜の公園には人気がない」が本来「ヒトケ」であるべき読みを取り違えてしまう。これは「辛い」の実験と同じ、文脈依存型の判定の難しさを示す実例になっている
熟字訓と当て字
- 複数の漢字からなる語全体に、1つの読みを割り当てる現象を熟字訓(じゅくじくん)と呼ぶ。個々の漢字の読みを足し合わせても出てこない読み方になる
- 「蕎麦(そば)」が実例になる。実際にUniDicで確認すると、「蕎麦」は1つの短単位として扱われ、蕎+麦に分割されない。読みは「ソバ」が割り当てられている
- 「蕎」単体はUniDicに読みの登録がなく(単独では使われない漢字)、「麦」単体は「ムギ」と読む。つまり「ソバ」という読みは、蕎・麦それぞれの読みを組み合わせても出てこない
| 分類 | 漢字の意味との関係 | 音との関係 | 例 |
|---|---|---|---|
| 熟字訓 | 漢字の意味は語の意味に対応する | 読みは個々の漢字の音とは対応しない | 蕎麦(そば)、今日(きょう)、煙草(たばこ) |
| 当て字 | 漢字の意味は語の意味を無視する | 漢字の音(オンヨミ)を借りて当てはめる | 目出度い(めでたい) |
- 熟字訓は、意味の対応は保ったまま読みだけが独立しているのに対し、当て字は意味を無視して音だけを借りる、という違いがある
音韻変化(Phonological Variation)
- 複合語を作るときに、単語の境界で発音が変化することがある
| 現象 | 意味 | 例 |
|---|---|---|
| 連濁(Rendaku) | 後ろの語の語頭の無声音が有声音に変わる現象 | 「て」+「かみ」→「てがみ」(kがgに変わる) |
| 促音化 | 語の境界で音が詰まる(促音「っ」が入る)現象 | 「がく」+「こう」→「がっこう」 |
- UniDicのiType・iForm(語頭変化型・語頭変化形)、fType・fForm(語末変化型・語末変化形)というフィールドは、まさにこの単語境界での音韻変化を記録するために用意されている
UniDicの辞書構造
短単位(Short Unit Word)という基準
- UniDicは、短単位(Short Unit Word, SUW)という基準で単語を区切る
- 短単位は、UniDicにおける最小の形態素単位で、複合語や固有表現などをまとめて扱う長単位(Long Unit Word, LUW)とは別に定義されている
- 短単位を採用することで、辞書の見出し語を小さく保ちながら、どんな複合語・未知語にも組み合わせで対応しやすくなる
- 実際に、
fugashi(UniDicを使うPythonラッパー)で「国立国語研究所」を解析すると、短単位では以下のように4つの形態素に分割される
| |
- 「国立国語研究所」という1つの固有表現を長単位として扱う代わりに、より小さい「国立」「国語」「研究」「所」という短単位の組み合わせとして表現することで、未知の固有表現が出てきても、既知の短単位の組み合わせとして対応しやすくなる
語彙素・語形・書字形・発音形という階層構造
- UniDicのエントリは、語彙素(Lexeme)→語形(Word Form)→書字形(Orthographic Form)→発音形(Pronunciation Form)という階層構造を持つ
- 語彙素: 単語の基本形(辞書の見出しにあたる)
- 語形: 同じ語彙素の活用形などのバリエーション
- 書字形: テキスト中での実際の表記(漢字・かな・異表記など)
- 発音形: その表記が実際にどう発音されるか
- 例えば「彷徨った」を実際に解析すると、「彷徨っ」という表層形に対して、以下のような値が得られる
| フィールド | 値 | 意味 |
|---|---|---|
| surface(表層形) | 彷徨っ | テキスト中の実際の形 |
| lemma(語彙素) | さ迷う | 辞書の見出しにあたる、別表記も含めてまとめた基本形 |
| orth(書字形出現形) | 彷徨っ | 表層形と同じ、文中での表記 |
| orthBase(書字形基本形) | 彷徨う | 今の表記(彷徨)を基準にした、非活用の基本形 |
| pron(発音形出現形) | サマヨッ | 表層形の発音 |
| pronBase(発音形基本形) | サマヨウ | 基本形の発音 |
| cType(活用型) | 五段-ワア行 | 活用の種類 |
| cForm(活用形) | 連用形-促音便 | 活用形 |
- ここで重要なのが、lemma(さ迷う)とorthBase(彷徨う)が一致しない点。「さまよう」には「彷徨う」「さ迷う」などの表記ゆれがあり、lemmaはそれら全ての表記をまとめる語彙素としての見出し、orthBaseは今回実際に使われた表記(彷徨)を基準にした基本形という違いがある
- つまり、「同じ語彙素でも書字形が複数ある」という表記のゆれは、lemmaとorthBaseの関係として表現されている
- この階層構造のおかげで、表記のゆれ(同じ語彙素なのに書字形が複数ある)と、活用のゆれ(同じ書字形なのに発音形が複数ある、多音字の問題)を、別々のレイヤーで扱える
収録されているフィールド
- UniDicのエントリは、品詞・活用・読み・語種・アクセントなど、29のフィールドを持つ(カラム数は配布形式によって多少異なる)
- 主なフィールドを分類すると以下の通り
| カテゴリ | フィールド | 説明 |
|---|---|---|
| 品詞 | pos1〜pos4 | 階層的な品詞分類。前の方が大分類、後の方が細分類 |
| 活用 | cType、cForm | 活用型(例: 五段-ラ行)、活用形(例: 連用形-促音便) |
| 語彙素 | lemma、lForm | 辞書の見出しにあたる非活用形、その語彙素読み(カタカナ) |
| 表記 | orth、orthBase | 文中での表記そのまま、その非活用の基本表記 |
| 発音 | pron、pronBase | 文中での発音(長音は「ー」表記)、その基本形の発音 |
| 語種 | goshu | 語の由来(和・固・漢・外・混・記号・不明) |
| 読みがな | kana、kanaBase | 一般的なカタカナ表記、その語彙素の基本形 |
| 語形 | form、formBase | 表記の違いをまとめた語形、その基本形 |
| アクセント | aType、aConType、aModType | アクセント型(標準語で高くなるモーラ番号)など |
| ID | lid、lemma_id | 語彙表ID(長い一意なID)、語彙素ID(短い連番) |
- このうち発音形・アクセント型は、MeCabの仕組みで触れたG2P(Grapheme-to-Phoneme)やTTS(音声合成)のタスクで直接利用できる情報になる
実際のエントリを見てみる
fugashiで「明日は晴れる」を解析すると、「明日」は以下のようなエントリになる
| フィールド | 値 |
|---|---|
| pos1〜pos4 | 名詞、普通名詞、副詞可能、* |
| lemma | 明日 |
| orth | 明日 |
| pron | アス |
| lForm | アス |
| goshu | 和 |
| aType | 2,0 |
- 書字形「明日」に対して、発音形は「アス」が割り当てられている。これはMeCabでのラティス+CRFスコアリングで触れた、多音字の読みを辞書エントリの発音フィールドから直接採用する仕組みそのものにあたる
- 注意: 「明日」は辞書上はミョーニチ・アス・アシタの3つの読みを持つ多音字だが、通常の解析ではラティス上の全候補からコストが最小の1つだけが選ばれて出力される。ここでアスが出力されたのはそのため。辞書に登録されている全ての候補を見るには、
-a(all)オプションを使って、ラティス上の候補を絞り込まずに出力する必要がある
多音字の限界: 「辛い」の実験
- 「辛い」は「からい(辛味がある)」「つらい(苦しい)」という2つの読みを持つ多音字
- 実際にUniDicで「辛い料理」「辛い経験」を解析すると、どちらも発音形が「ツライ」になり、「辛い料理」が本来「カライ」であるべき読みを取り違えてしまう
- これは、MeCabの仕組み・G2Pライブラリを作る時に調査した先行文献などのメモで扱った、辞書に複数の読みが登録されていても、文脈次第で正しく選び取れるとは限らないという、多音字判定の限界を示す実例になっている
- CRFスコアリングやg2pWのような、より広い文脈を使ったモデルが必要になる理由がここにある
まとめ
- 形態素解析は、表層形・基本形・読み、品詞タグ、動詞の活用形、ヘテロニム・モノフォン・ポリフォン、複数の等しく正しい読み、熟字訓・当て字、連濁・促音化のような音韻変化といった基本用語の上に成り立っている
- UniDicは、国立国語研究所が開発する、短単位という基準で単語を区切る日本語の形態素解析辞書で、対象テキストの種類ごとに現代書き言葉用・現代話し言葉用・古文用などの別々の辞書として配布されている
- 語彙素・語形・書字形・発音形という階層構造を持ち、表記のゆれと発音のゆれを別々のレイヤーで扱える
- 品詞・活用・読み・アクセント型など29のフィールドを持ち、形態素解析だけでなくG2P・TTSのタスクにも直接活用できる
- 辞書に複数の読みが登録されていても、文脈次第で正しく選び取れるとは限らず(「辛い」の実験)、多音字判定にはCRFスコアリングなどのより広い文脈を使ったモデルが必要になる
