Jagger 形態素解析向けにユーザ定義単語を追加するメモ
背景
高速形態素解析 Jagger の Python binding のメモ
人類史上最速の形態素解析 Jagger.
Jagger で, 絵文字や顔文字などの単語をうまく形態素解析で扱いたい.
Jagger のデフォで使っている mecab-jumandic 7.0-2013 辞書では, 一応顔文字はあるが,
!(^^)!,1873,1873,4694,特殊,記号,*,*,!(^^)!,!(^^)!,顔文字
!( ̄∇ ̄ ;),1873,1873,4694,特殊,記号,*,*,!( ̄∇ ̄ ;),!( ̄∇ ̄ ;),顔文字
!(∂▼∂)!,1873,1873,4694,特殊,記号,*,*,!(∂▼∂)!,!(∂▼∂)!,顔文字
!Σ( ̄□ ̄;,1873,1873,4694,特殊,記号,*,*,!Σ( ̄□ ̄;,!Σ( ̄□ ̄;,顔文字
!Σ( ̄□ ̄;),1873,1873,4694,特殊,記号,*,*,!Σ( ̄□ ̄;),!Σ( ̄□ ̄;),顔文字
と, 古臭い顔文字(昭和時代?)しかない...
あと, 顔文字は一緒くたに記号(顔文字)となっていて, 分類がない(文章解析で, 顔文字の分類, たとえば笑い, 悲しみ, etc などほしいときがある)
ʕ •ᴥ• ʔ
みたいな, ナウでヤングな令和時代の若人さまが使うような, UTF-8 顔文字も対応したい...
(最近の iPhone でも結構ナウい顔文字でてくる!)
ユーザ定義単語を辞書に追加して学習します!
kaomoji
いくつか一覧取得できるのありますが,
が分類もあり, とりあえずは楽でしょうか.
emoji
Python emoji module で一覧取得できます.
ユーザ定義単語リスト作成
にスクリプトとデータがあります.
* ^ ω ^),*,*,*,顔文字,楽しい,Joy,Positive Emotion,*,*,(* ^ ω ^),(* ^ ω ^),顔文字
(´ ∀ ` *),*,*,*,顔文字,楽しい,Joy,Positive Emotion,*,*,(´ ∀ ` *),(´ ∀ ` *),顔文字
٩(◕‿◕。)۶,*,*,*,顔文字,楽しい,Joy,Positive Emotion,*,*,٩(◕‿◕。)۶,٩(◕‿◕。)۶,顔文字
☆*:.。.o(≧▽≦)o.。.:*☆,*,*,*,顔文字,楽しい,Joy,Positive Emotion,*,*,☆*:.。.o(≧▽≦)o.。.:*☆,☆*:.。.o(≧▽≦)o.。.:*☆,顔文>字
のようなユーザ定義単語リスト行データをつくればよいです!
quote
いくつかの顔文字は ,
を含んでいるので, ,
を含んでいる顔文字は, CSV のカンマと区別するために "
で quote しておきましょう.
(チェックしたかぎりでは, ,
を使う顔文字は, "
を含んではいなかったので, quote を安全にできる)
jagger_train 側で CSV リード時に '"' を考慮した対応がされています.
train
Jagger には, ユーザー定義単語を既存 Jagger 辞書に追加するみたいな機能はありません.
ユーザー定義単語を追加したい場合, Jagger 辞書を作りなおす必要があります
(作りなおし(train)自体は数秒で終わるので, 学習用データが揃っていれば, あまり手間ではない)
train は jagger オリジナルのサイトを参照ください.
(jagger python でも学習できるようにはしようとしているが, python binding はまだ)
ユーザ定義単語は dict
(辞書(vocab リスト)) にくっつけるだけでよいです.
コーパスは, 今回は jagger デフォの KWDLC を使いました.
コーパス側には, ユーザ定義単語を利用した形態素解析データを追加する必要はありません
(コーパス側で未知の単語になっていてもよい)
結果
我輩は猫であるにゃん🤩
我輩 名詞,普通名詞,*,*,我輩,わがはい,代表表記:我が輩/わがはい カテゴリ:人
は 助詞,副助詞,*,*,は,は,*
猫 名詞,普通名詞,*,*,猫,ねこ,*
である 判定詞,*,判定詞,デアル列基本形,だ,である,*
にゃん 名詞,普通名詞,*,*,にゃん,にゃん,自動獲得:テキスト 意味分類:普通名詞その他:0.512;人:0.488
🤩 絵文字,*,*,*,*,*,🤩,🤩,絵文字
EOS
ฅ(•ㅅ•❀)ฅ
ฅ(•ㅅ•❀)ฅ 顔文字,猫,Cat,Animals,*,*,ฅ(•ㅅ•❀)ฅ,ฅ(•ㅅ•❀)ฅ,顔文字
EOS
ʕ •ᴥ• ʔ
ʕ •ᴥ• ʔ 顔文字,熊,Bear,Animals,*,*,ʕ •ᴥ• ʔ,ʕ •ᴥ• ʔ,顔文字
EOS
我輩はʕ •ᴥ• ʔである
我輩 名詞,普通名詞,*,*,我輩,わがはい,代表表記:我が輩/わがはい カテゴリ:人
は 助詞,副助詞,*,*,は,は,*
ʕ •ᴥ• ʔ 顔文字,熊,Bear,Animals,*,*,ʕ •ᴥ• ʔ,ʕ •ᴥ• ʔ,顔文字
である 判定詞,*,判定詞,デアル列基本形,だ,である,*
EOS
Voila~!
英字記号,数字
元の mecab-juman 辞書にないため, ,
や .
, 2024
などの英字記号(ASCII)はうまくいきません.
, 名詞,普通名詞,*,*,*.*,*
( 名詞,普通名詞,*,*,*.*,*
2024 名詞,普通名詞,*,*,*,*,*
必要に応じて, 全角カッコや全角数字に置き換えたり, 英字の辞書を追加してあげるとよいでしょう.
追記
- https://www.tkl.iis.u-tokyo.ac.jp/~ynaga/jagger/index.ja.html 2024/03/11 リリースで, 絵文字などの未知語対応が改善されました(jagger-python 側では未反映)
TODO
- Emoji の分類情報を付与する(python emoji で分類できたはず...)
Discussion