2009年09月28日

覚書: anthy の複合語関連

[品詞コード絡み]

「気(き)」や「身(み)」のような読みの短い語は誤変換を起こしやすいので、「みをゆだね #KS 身を委ね」のように、一語で登録してあったりする。

しかし、これだと「この身を委ねて」等の場合に「連体詞(この)+動詞(身を委ねる)」という並びになってうまくない。
※「この」は指示詞の品詞コードがないので連体詞で代用してる。

複合語形式で「みをゆだね #KS #_2身を_3委ね」と分割し、KS は最後尾「委ね」の部分の品詞コードとされれば、連体詞の直後に動詞が来ることにはならなくなる。
(「身を」の部分の品詞が何になるのかは分からない。NONE ?)

「めにつ #K5 目につ」では、「やたら|目につく」は分割しない方が「副詞+動詞」でいいかもしれないが、「#_2目に_1つ」に分割しても、前の文節の品詞が「NONE」とかなら大きな問題にはならないと思われる。


ただ、「きに #SX 気に」はどうしようもない。「その気にさせる」は「連体詞+動詞」になってしまうが、分割しようがない。

【追記】10/3
どうも自分の憶測は大ハズレだったらしい…。
下の G-HAL 氏のコメント及びサイトを参照。

[複合語形式にすべきかどうかの判断]

例えば compound.t に「いちにちじゅう #T35 #_2一_2日_3中」というのがあるが、明らかにこれはこんな風に細切れにする意味はない。
「|一|日|中|つりを|下|」を直す時、「つりを」の部分にフォーカスを移すまでに 3回も文節移動キーを押さなければならなくなる。

しかし、「猛勉強」を一語で「もうべんきょう #T30 猛勉強」と登録すると、「もうべんきょうおわったのか?」が「|猛勉強|終わったのか|?|」になってしまい、「|もう|勉強|終わったのか|?|」に直すために 5回区切り直しのキー押下が必要になる。
「猛反省」とか「猛攻撃」等「猛〜」のものはすべてこの可能性があるので、複合語形式にした方がいい。

でも、「猛」とか「非」とか「超」とかの接頭辞はすべて複合語形式にした方がいいというわけではない。あくまで「猛」は副詞の「もう」とカブるから、というだけ。

結局、誤変換の可能性を考えながら一つ一つ個別に判断していくしかない。

【追記】9/28
「昨シーズン」も「桜の|咲く|シーズン」が「桜の|昨シーズン」になるから複合語形式にしておいた方がいい。

【追記】10/3, 10/5
でも、複合語形式にすると、区切り位置指定変換した場合(「さくらの|さく|しーずん」)でも、「桜の|昨|シーズン」になる気がする。だとすれば、複合語形式にしない方がいい。
「昨シーズン」が複合語形式でなく一語なら、区切り位置指定変換(「さくらの|さく|しーずん」)すれば「桜の|咲く|シーズン」になる。
「猛勉強」も同じ。
複合語形式は全部この可能性がある。

【追記】10/5 補足
・「さくしーずん #T35 昨シーズン」の場合(一語)
 ・区切り位置を指定しない場合
   さくらのさくしーずん → |桜の|昨シーズン|

 ・区切り位置を指定した場合
   さくらの|さく|しーずん → |桜の|咲く|シーズン|

・「さくしーずん #T35 #_2昨_4シーズン」の場合(複合語形式)
 ・区切り位置を指定しない場合
   さくらのさくしーずん → |桜の|昨|シーズン|

 ・区切り位置を指定した場合
   さくらの|さく|しーずん → |桜の|昨|シーズン|(多分)

一語で登録した場合は、区切り位置を指定することで「昨シーズン」と「咲く|シーズン」を使い分けられるが、複合語形式の場合は区切り位置を指定してもしなくても、どっちも「昨|シーズン」になってしまうであろうから、複合語形式にしない方がいいかも、というお話でした。

尤も、区切り位置指定は G-HAL 氏のパッチでないと使えないわけですが、そこはもう気にしない。
posted by vagus at 01:20| 東京 ☁| Comment(10) | TrackBack(0) | cannadic改 - 作業メモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
おぼえがきの、しかも本筋から外れかかったこまかい所ではありますが……。

> (「身を」の部分の品詞が何になるのかは分からない。NONE ?)
複合語の各文節の品詞は、複合語自体の品詞と同じ物になるようです。
「みをゆだね #KS #_2身を_3委ね」の場合だと、「身を」の品詞も #KS (最後尾ではないので付属語は付加されない)、「委ね」の品詞も #KS (最後尾なので付属語が付加される)、とみなされるようです。
それとは別途に gcanna.ctd の「み #T35 身」を使った候補も生成されるので、最終的な品詞は #KS か #T35 か評価の高い方、になる模様です。

用例辞書 udict を使うと、連文節の各文節毎に個別の品詞を指定できる様ですが、今度は付属語が指定できない様です。

この辺りの品詞の違いで影響を受けるのは、コーパスの生成・適用のみだと思われます。
Posted by G-HAL at 2009年10月04日 01:24
http://www.fenix.ne.jp/~G-HAL/whatsnew/20093rd.html#2009930
こちらの方も拝見させて頂きました。詳細で分かりやすい説明ありがとうございました(大変だったのでは…)。
枝葉どころか、まさに主眼、眼目、どストライクです。

初めて知ったことばかりなので、まだ充分理解し切れてませんが、「身を委ねる」は一語で登録しようが、複合語で登録しようが、どっちにしても「この身を委ねて」がコーパス処理時に「連体修飾+動詞」というマズい並びになってしまうようですね…。

> それとは別途に gcanna.ctd の「み #T35 身」を使った候補も生成されるので、最終的な品詞は #KS か #T35 か評価の高い方、になる模様です。
T35 であれば「連体修飾(この)+名詞(み)」となって、期待通りの文法的に正しい並びになりますが、その場合、「実(T35)」ではなくちゃんと「身」を選んでくれるかが問題ですね。
そもそも「身を委ねる」を辞書登録する目的は、「みをゆだねる」という読みの場合は「実を」ではなく「身を」を先に出したいから、ということなので、辞書で「身」よりも「実」の方が頻度が高くても「みをゆだねる」の場合は「身」を優先する、ということにならなければ、登録する意味がなくなる…。

あと、
> 但し、データベース上では、文節の順番や連続した文節か否かは考慮しないらしい(たぶん)。
> # 変換候補「|設定|下|」は、コーパスデータベース上の内容「|下の|様な|設定|ファイル|」に一致すると判定されるらしい。
というのは、かなり驚きました。
「それはちょっと乱暴すぎるんじゃ…」と思いましたが、専門的なことは全然分からないので、何も言えません。
順序や並びを記録するようにすると、データベースが一気に肥大化するからこれで妥協するということかなとも思いましたが。

Posted by vagus at 2009年10月04日 21:32
(続き)
udict はやってみたことはあるんですが、登録しても上手くいかなかったりして諦めました。どうするとダメなのかの条件が分からなくて。
あと、実装はされたものの、途中からもう放ったらかしにされてたような印象があったので、「ここにあまりエネルギーをつぎ込んでもしょうがないかな」とも思ったり。

> この辺りの品詞の違いで影響を受けるのは、コーパスの生成・適用のみだと思われます。
まさにそれを気にしてたりします(^^;
Posted by vagus at 2009年10月04日 22:06
間違っていた部分とごっちゃになっていた部分が見つかったので、先に訂正をば。

> 但し、データベース上では、文節の順番や連続した文節か否かは考慮しないらしい(たぶん)。

コーパスの使われ方は2種類ありました。
コーパスから文節の品詞等がつながる確率を得る時には、前後の順番と連続しているかどうかも、判定していました。
コーパスを用例辞書として用いる時には、同じ自立語ハッシュ値が前後各2文節(計4文節)の範囲内に存在すれば、順番や連続しているかは考慮していませんでした。また、品詞も見ていませんでした。

なので、コーパスに「|下の|様な|設定|ファイル|」がある場合の変換候補「|設定|下|」に関しては、確率を見る時は一致する部分は無いので影響は無く、用例を見る時には一致すると判定されて得点2倍、です。
Posted by G-HAL at 2009年10月08日 22:13
複合語の得点は単語の頻度値の 520〜650 くらいに匹敵するので、
「み #T35*301 身」も「み #T35*301 実」も共に udict や corpus の用例の加点に該当しなければ、得点が高い複合語の #KS が使われると思われます。
「み #T35*301 身」か「み #T35*301 実」に用例の加点が該当すると 3010(udictの用例) か 602(corpusの用例) 相当になるので、どれが使われるかが変わってくる場合があります。
さらには corpus で確率の差が 10倍くらい出る事もありますが、この場合は品詞や付属語が同じなので、同じ確率値になると思います。

特定のつながりだけ得点を大きくしたいが、品詞も気にする、と言う場合、用例辞書を使うしかない様な気がします。現時点でわかった範囲内では。

udict の用例辞書は、
・udict や corpus を使わなかった時の第1候補の自立語が udict で指定した検索対象の自立語と一致した場合のみ発動し、
・評価を変更する文節の udict/corpusを使わなかった時の第1候補の POS_* が udict で指定した評価を変更する自立語の POS_* と一致しなければならない、
と言う条件が有りました。

corpus にも用例辞書の機能が有り、corpus の場合は品詞の一致の条件が無く、それ以外の大枠はだいたい同じでした。なので、もしかしたら udict から corpus に移行したのかもしれません。御本人に聞かないと、どうだか判りませんが。

やたら長くなってしまいましたが、条件を字面で書くだけだと判りにくいので、用例辞書に「咲←桜」を登録した場合を例に挙げますと。

仮の第1候補が「櫻の|割く|シーズン」となった場合、「桜」が第1候補に見つからないので、「咲←桜」の指定は無視されます。

仮の第1候補が「桜の|割く|シーズン」となった場合、「桜」が第1候補に見つかり、前後2文節内にて「割」と「咲」で POS_V と品詞が一致するので、
「咲く」の得点が、udict の場合10倍、corpus の場合2倍、になります。
変更になった得点で並び順を計算しなおすと、「桜の|咲く|シーズン」が第1候補になるでしょう、多分。

仮の第1候補が「桜の|昨|シーズン」となった場合、「昨」が POS_NOUN で「咲」が POS_V と品詞が一致しないので、udict での「咲←桜」の指定は無視されます。corpus の場合は品詞を見ないので、一致とみなされ「咲く」の得点が2倍になります。
#K5*400 の2倍で800相当なので、複合語の 520〜650 くらいより強くなり、たぶん「桜の|咲く|シーズン」が第1候補になるでしょう、コーパスの確率でやたら小さな値を割り振られない限りは。
Posted by G-HAL at 2009年10月08日 23:15
またまた詳しい説明ありがとうございます。
非常に参考になります。

> 複合語の得点は単語の頻度値の 520〜650 くらいに匹敵する
ということは、たとえば、「ほげふが #T35*10 ほげふが」を「ほげふが #T35*10 #_2ほげ_2ふが」と複合語形式に変更した場合、頻度の「10」は無視されて、520〜650 くらいのスコアになる、のかな?
「複合語形式にしただけでもれなく高頻度になる」のだとすると、もしかしたら不味い場合があるかもしれないので、気をつける必要がありそうですね。

また、今の辞書の頻度値も、複合語の得点を基準にして調整し直す必要がありそう。ただ、個別調整はやってられないので、大まかに(ランク毎の値)ですが。

udict は登録の仕方の判断が難しそうですね。
たとえば、「身を委ねる」を登録する場合、「身」の方をキー(?)にして「身→委ねる」にしまうと、udict/corpus 適用前の仮変換(?)時に「実を委ねる」となっていたら、「身」がないので発動せず、「登録しても効かない」ということになってしまう(自分が以前「上手くいかない」と悩んだのはたぶんこれが原因の気がする)。
この場合は「委ねる」の方をキー(?)にすれば多分上手く行く(「ゆだねる」という読みは「委ねる」以外に多分ないので)。
でも、「股を割く」を出したい場合に、仮変換が「またを|さく」となっていたら「股→割く」でも「割く→股」でも発動しないですよね…多分。
他にも色んなケースがありそう。

登録時に「anthy がどう変換してくるか」を予測しながら登録しなければならないとすると、かなり難しいものがあるなぁ。

うーん、頭がこんがらかってきましたが、ともあれ、今までブラックボックスだった部分が判明してきたので、非常に参考になりました m(_ _)m
Posted by vagus at 2009年10月10日 00:29
すみません、またもや訂正。各種のスコア補正を勘定に入れ忘れていました。

> 複合語の得点は単語の頻度値の ×××〜××× くらいに相当する
原作版の場合:
辞書の元データの頻度値はそのままの値では使われず、頻度値から単語の強さ順位を求め、最高順位〜最低順位を 99〜1に変換してから使われます。複合語のスコアは、変換後(99〜1)の約12208に相当します。

拙作パッチ:
辞書の元データの頻度値を、そのまま使う。複合語のスコアは約15626〜17000に相当します。

スコア補正は、コーパスの確率で最大10倍、付属語グラフの WEAK_CONN で0.1倍、用例辞書の補正で10倍(udict)×2倍(corpus)、が有るので、補正が増加方向に最大に効いた単語と、複合語とで比較した場合、61(原作版)、78(拙作パッチ)に相当します。
Posted by G-HAL at 2009年10月12日 01:27
> 「複合語形式にしただけでもれなく高頻度になる」のだとすると
書き忘れてしまいましたが、上げる条件と上げ方は、原作版と拙作パッチで異なっています。

原作版:問答無用でもれなく値を変換後(99〜1)の約12208相当に変更します。元の頻度値は無視。
拙作パッチ版:注目文節より左側の仮確定結果が複合語の内容と一致した場合のみ、元のスコアに約15626〜17000相当(複合語の文節数が多いほど高得点)を加算。

拙作パッチの場合、ユーザが変換候補を変更すると、複合語の加算が行われたり行われなかったり変化します。
補足:用例辞書の場合、ユーザが変換候補を変更しても、用例の加算を行うか否かは変化しません。

udict の振る舞いは、その通りになると思います。
現状の用例辞書は、仰る通り辞書登録の側から見るとかなり困難(無理?)だと思うので、本気で用例辞書を使うなら、いっそ改造してしまった方が良いかもしれません。
あるいは、ひよって品詞を諦め、複合語か1単語にするか……。
Posted by G-HAL at 2009年10月12日 02:01
すみません、コメントに気づくのがちょっと遅れました。
現在 Whats New of G-HAL の方を見させて頂いてます。
少々お待ちを…
Posted by vagus at 2009年10月14日 01:45
はあ…。難しいですねぇ(色んな意味で)。

とりあえず、「身を委ねる」みたいに複合語形式にすると品詞がマズいことになるものは、複合語形式にしない方が良さそうですね。「身を委ねる」はそもそも複合語じゃないですし。
複合語形式にするのは「#_4変換_3候補」とか「#_2猛_5勉強」とか「#_2勝_5海舟」のように、頭とお尻の文節の品詞(辞書の品詞コードではなく、POSの方)が同じものに限る、と(「猛」は正確には接頭辞ですが、名詞でも実害はないので許す)。

「身を委ねる」のようなのは、おっしゃる通り、やるなら udict にすべきだと思いますが、これまたお気づきの通り、udict も付属語を見ないとすると副作用の誤変換がかなり心配です。
特に「委ねる→身」の場合、「身」は読みが一音しかないので、誤変換を起こす可能性が高い気がします。
たとえば、「|現金のみ|委ねた|」が「|現金の|身|委ねた|」になったりとか、「|南の|風に|委ねた|」が「|皆|身の|風に|委ねた|」になったりとか(いい例文を思いつきませんでした…)。

かといって、corpus の用例機能も似たような感じのようですし…。

こういう「賢いこと」をちゃんとやろうとすると、やっぱり「大規模データ使って Nグラム」みたいな話になるんでしょうか。なんて、ここ↓に書いてある程度のことしか知りませんが。
http://ascii.jp/elem/000/000/195/195021/index-2.html

とてもそこまでやってられませんから、やはり「一語で登録」のままでいいかなと思い始めてます。

# 「受光」「営業日」は登録しました。ご指摘ありがとうございます。
Posted by vagus at 2009年10月16日 01:26
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック