2022年2月26日土曜日

机の上の小さな緑:ミントの水耕栽培

  まだまだ寒い日が続いています。こんな時期、机の上にちょっとした緑の植物が成長してくれると、どこか心が安まります。ネット通販で、500円ほどのミントの水耕栽培キットを購入しました。砂つぶほどの小さな種と、セラミック培養土、粉末肥料、簡易容器がセットになっていました。取説通り、栽培してみました。発芽率65%と書いてありましたが、100粒以上はあったので大丈夫だろうと思っていましたら、期待通り、見事に育っています。

14日後、小さな双葉が出始めた
27日後、こんなに密集して伸びてきた。間引きも必要。
45日後、葉もかなり大きく育った。これまでに数度間引いた。

 小学生の理科観察みたいですが、植物の不思議を垣間見ることになりました。まず、葉の出方ですが、双葉が出て、その中心からまた双葉が出ることをくり返して成長しています。その際、次の段の双葉は、前段と重ならないように90度回転した位置で伸びます。これは、「十字対生」と呼ばれるようです。

 これ以外に気づいたことですが、茎はある時期から容器の縁まで這うように伸び、縁に達するあたりで垂直方向に伸びて行きます。まるで、自分の生きる世界の境界を知っており、互いに重ならないように遠くで成長しようとしているように見えます。


2022年2月22日火曜日

MIT App Inventorの公式ガイドブックが出版されました

 スマホアプリ開発環境の一つとして有名なMIT AppInventorの新たな公式テキスト(ガイドブック)が、このほどMITeen Pressから出版され、本日(2022-02-22)、Kindle版も発行されたのでタブレット端末で読むことができました。

 MIT App Inventorは、世界195の国々の教育研究機関などで広く利用され、現時点のユーザ登録者数は1,400万人を超えているそうです。App Inventorのシステム開発、運営保守、教育/普及のためのチームは30名ほど(専任11名 + 非常勤9名 + 修士/博士学生スタッフ11名)で構成されているようです。そのチームのトップである、Prof. Abelsonが以下のブログで、この本について書いています:

●MIT Professor Hal Abelsonによるこの書籍の紹介
https://appinventor.mit.edu/blogs/hal/2021/11/17/BecomeAnAppInventor

 MIT App Inventorは、中学高校生から大学生、あるいは技術者に広く利用されていますが、今回の書籍は、初級者向けに書かれています。非常に洗練されたデザイン、構成、例題が光ります。楽しく、ワクワク感が引き立てられるように感じました。初級とはいえ、TinyDBやCloudDB、AI等も有効に利用した、Navigation、Chatアプリ、翻訳アプリの作成など、高度な機能も使いこなそうとしています。大勢の人々に受け入れられると思います。

(補足)ちょっと宣伝になってしまいますが...
 小生は私的ブログに、MIT App Inventorに関する記事をこれまで多数書いてきました。よろしければ、下記のまとめ(こちら)をご覧下さい。また、小生がかって、MITのワークショップで発表した拙論(こちら)も、大学における応用例としてご参考までに。


2022年2月21日月曜日

「で」の利用10例の係り受け解析とその利用

【what is this】先の記事では、「... で ...」の「で」が、どこに係るかを話題にしました。人間は違和感なく使っている場合でも、SuPar-UniDic [1]などの係り受け解析ではあまり適切な結果が得られない場合がありました。それをまとめて、係り受け解析を利用するアプリケーションでは、どのように対応するのかも、簡単に述べます。

「で」の利用10例の係り受け解析
 
以下に「で」の使い方10例を検討します。いずれも、日本人にとっては、恐らくほとんど違和感はないと思います。SuPar-UniDic[1]による係り受け解析結果を示します。「...で」の係り先は、(0)〜(6)は「咲く。」でしたが、(7)〜(9)は「丸い」という結果となりました。

(0)場所1:庭先で丸い花がまばらに咲く
(1)場所2:温室で丸い花がまばらに咲く。
(2)状況1:室温で丸い花がまばらに咲く。
(3)状況2:日陰で丸い花がまばらに咲く。
(4)理由1:暖気で丸い花がまばらに咲く。
(5)理由2:遮光で丸い花がまばらに咲く。
(6)時間1:7日で丸い花がまばらに咲く。
(7)特徴1:巨大で丸い花がまばらに咲く。
(8)特徴2:濃紺で丸い花がまばらに咲く。
(9)特徴3:黄色で丸い花がまばらに咲く。

 まず、場所、状況、理由、期間などを意味する「で」の使い方(0)〜(6)に対しては適切な結果です。そして、特徴を表す(7)〜(9)も一見妥当のように見えますが、先の記事に書いた通り、安岡孝一教授によると、以下のような係り受け解析の方が適切だろうとのことです。

(7')特徴1:巨大で丸いがまばらに咲く。
(8')特徴2:濃紺で丸いがまばらに咲く。
(9')特徴3:黄色で丸いがまばらに咲く。

 なぜなら、これらの「...で」が修飾するのは本来「花」だからです。しかし、この場合の「で」は解析上、曲者のようです。確かに、見た目にも、「巨大で花」「濃紺で花」「黄色で花」は違和感があります。

アプリケーション側での「で」の係り受け解析の利用
 
では、前報のアプリケーション等ではどのように利用したのでしようか。いくつか検討しましたが、結論として、上記の解析結果を素直に受け入れることにしました。すなわち、「巨大で丸い」「濃紺で丸い」「黄色で丸い」のように、複合語と考え、それが「花」に係るとして扱えば特に問題がないようです。

 一方、人間側がちょっと妥協して、コンピュータと共存するということであれば、次のように、(7)〜(9)にある「で」を「な」(単語によっては「の」)に変更するのが良いかもしれません。その場合は、以下のように、係り受け解析として適切な結果が得られ、アプリケーション側もハッピーではあります。

(7'')特徴1:巨大丸いがまばらに咲く。
(8'')特徴2:濃紺丸いがまばらに咲く。
(9'')特徴3:黄色丸いがまばらに咲く。

上記以外に「で」の用法をご存知でしたら教えて下さい
 ただし、「丸い花がまばらに咲く。」の先頭となり得るものをお願いします。

現代の英訳ソフトはどうだろう
 今回取り上げた10例文に対して、現代の英訳ソフトはどうでしょうか。英訳結果を見ただけの判断ですが、真面目に?係り受け解析はやっていなくて、別のこと(seq2seqやAttentions)で処理しているように見えます。(これについては、後日、また述べてみたいのですが...)

Google翻訳
(0) Round flowers bloom sparsely in the garden.
(1) Round flowers bloom sparsely in the greenhouse.
(2) Round flowers bloom sparsely at room temperature.
(3) Round flowers bloom sparsely in the shade.
(4) Warm and round flowers bloom sparsely.
(5) Round flowers bloom sparsely in the shade.
(6) Round flowers bloom sparsely in 7 days.
(7) Huge, round flowers bloom sparsely.
(8) Navy blue and round flowers bloom sparsely.
(9) Yellow, round flowers bloom sparsely.

 (4)はおかしいです。「暖気で」が正しく認識されていない。(8)は微妙?

DeepL翻訳
(0) Round flowers bloom sparsely in the garden.
(1) Round flowers bloom sparsely in the greenhouse.
(2) Round flowers bloom sparsely at room temperature.
(3) Round flowers bloom sparsely in shade.
(4) Round flowers bloom sparsely in warm air.
(5) Round flowers bloom sparsely in shade.
(6) Sparse round flowers in 7 days.
(7) Huge round flowers sparsely bloom.
(8) Dark blue, round flowers sparsely bloom.
(9) Yellow with sparse round flowers.

 (6)は少し、(9)は完全におかしい。「黄色で」がうまく扱えていない。また、(6) (9)とも「咲く」が訳ぬけしている。これがこの英訳方式の本質というか特徴でもある!?

参考資料
[1] yasuokaの日記: BERTモデルを用いた日本語係り受け解析ツールSuPar-UniDicリリースhttps://srad.jp/~yasuoka/journal/645402/

2022年2月20日日曜日

植物の記述文から、花、葉、果実の特徴を抽出するアプリ

【what is this】これまでの続きです。SuPar-UniDic [1]の係り受け解析を利用して、植物に関する記述文から、葉と花と果実に関して、特徴を取り出し、その記述文を(ある意味で)構造化して表現するアプリを作成しました。まだまだ不完全ですが、ある程度複雑な文章について、期待通りの結果が得られる場合が出てきましたので、以下に示します。

植物の記述文から「花」「葉」「果実」の特徴を抽出する
 
以下の例文について検討します。この植物ZZは、架空のものですが、参考資料に[2]記載されている植物の記述を参考にして、当方が尤もらしく特徴を記述したものです。

植物ZZ:春先に小さな楕円形の葉が出て、低温でも紅の丸い花がまばらに咲き、明るく輝く。晩秋に小粒の堅い果実が無数につく。

 これを以下のように変形したいのです。すなわち、葉と花と果実に関して、「どのような色や形や大きさ」で「どのように」出現するかが、より明確になるようにしたいのです。

   [楕円形の, 小さな] 葉が  [春先に]出て、
   [丸い, 紅の] 花が  [低温でも, まばらに]咲き、[明るく]輝く。
   [小粒の, 堅い] 果実が  [晩秋に, 無数に]つく。

 このアプリの実行結果は図1に示すように、上記と完全に合致しました。まずはめでたし。実際、葉と花と果実を修飾する単語は正しく抽出されています。また、「出て、」「咲き、輝く、」「つく。」に係る単語も適切に得られています。

図1 作成したアプリの実行結果(文字の彩色は人手による)

SuPar-UniDic [1]による係り受け解析結果
 
この例文に対するSuPar-UniDic [1]による係り受け解析結果を図2に示します。右欄の英小文字は係り受けの種類、左側の英大文字は品詞です。白線矢印は単語間の係り受けを示し、赤枠は文節を意味します。

図2 SuPar-UniDic [1]による単語間係り受け解析結果

 このように適切な係り受け解析結果が得られていれば、今回のアプリ作成は簡単なように思えます。しかし、実際には、適宜解釈、考慮すべき点が色々あります。例えば、「花」の述語としては「咲き、」だけではなく、「輝く。」も入れ、それぞれの修飾語も付加する必要があります。また、本例以外に、多様な言い回しが数多く存在するので、例外的な処理も随時発生するはずです。

なぜこんなアプリを作りたいのか?
 
参考資料[2]などには、数千件の植物記述文が掲載されています。その植物空間の全貌を自然言語処理の観点から覗いてみたい、掴んでみたい。そのための布石と考えています。改訂を重ねて行きます。

参考資料

[1] yasuokaの日記: BERTモデルを用いた日本語係り受け解析ツールSuPar-UniDicリリース
https://srad.jp/~yasuoka/journal/645402/

[2] 渡辺坦:植物の名前を探しやすい デジタル植物写真集
http://plantidentifier.ec-net.jp/

2022年2月16日水曜日

例文 "紫色で細長い唇形花が総状に咲く" の係り受け解析

【what is this】植物に関する記述文から、「どのような形や色の」花が「どのような位置や向きや時期に」咲くかに関する情報の自動抽出を行っています。そのために重要なのが、係り受け解析なのですが、その解析結果が想定通りにならない場合があります。これに関して、安岡孝一教授の解説記事([1][2][3])でご教示いただきたことを、忘れないようにここに纏めます。

例文「紫色で細長い唇形花が総状に咲く。」の係り受け解析
 
まず、図1は、SuPar-UniDic [1]によるこの例文の係り受け解析結果です。白線矢印は単語間係り受けです。英小文字は係り受けの種類、英大文字は品詞です。赤枠は、それをもとに算出された文節を表しています。これらから、白線矢印の逆方向の、文節間係り受け「紫色で → 細長い」が得られます。この係り受けは、一見妥当のように思えますが、実はあまり適切ではありません。なぜなら、この文での「紫色」は、「唇形花」を修飾しているはずですから。このことは、参考資料[3]のコメント欄で説明されています。

図1 SuPar-UniDicによる単語間係り受け

 次の図2は、esuparbert-base-japanese-unidic-luw-uposモデル[2]による係り受け解析結果です。この解析では、(複合語を分割しない)国語研長単位の単語係り受けがなされています。実際、図1にあった「唇形、花」は「唇形花」と一つに纏まっています。
 そして、単語間係り受けは、図1とは異なっています。結論として、文節間係り受け「紫色で → 咲く。」が得られます。しかし、これも図1で示した理由により、適切とはいえません。

図2 esuparbert-base-japanese-unidic-luw-uposモデルによる単語間係り受け

 このように、図1でも図2でも、その係り受け解析結果があまり適切ではない。これに対して、[3]のコメント欄には、図3のようになるのが適切であろうと述べられています。文節間係り受けは「紫色で → 唇形花が」となっています。上にも述べた通り、「紫色」は「唇形花」を修飾しているのですから、これが自然だと思います。しかし、一方では、「」がこのような解析を妨げることにも言及されています。

図3適切と思われる単語間係り受け([3])

ユーザ側のアプリケーションの立場
 
これ以降は、小生独自の見解です。小生のアプリケーションは、与えられた例文から、「どんな」花が「どのように」咲くかに関する単語を求めます。「どのように」については、「花」の述語に係る単語のうちから採用します。そのため、例えば、図2の係り受け解析結果を利用すると、「紫色で」は、「どのように」に属してしまいます。そうではなく、「紫色で」は、「どんな」に入れたいのです。もしも、図3のような解析結果が使えるのならばそれが可能になります。

 さて、上記例文を少し変えた「温室で細長い唇形花が総状に咲く。」を考えます。「紫色で」を「温室で」に変更しただけです。esuparによる解析結果は図4のとおり、適切です。矢印の関係は、図2と全く同一ですが、「で」についての係り受けの種類と品詞が図2とは異なります。

図4 「温室で」に変更した例文に対するesuparによる係り受け

 この結果を見ると、ユーザアプリケーション側では、図1や図2の解析結果が得られた場合、係り受けの種類と係先の品詞を調べることで、それを適切に利用できそうに思いました。今後、さらに検討したいと思います。

謝辞
 小生のコメント(質問)に丁寧にご回答下さった安岡孝一教授に感謝申し上げます。また、取り上げた例文は渡辺坦氏のwebサイト[4]にある植物の説明文を参考にさせていただき、設定したものです。

参考資料

[1] yasuokaの日記: BERTモデルを用いた日本語係り受け解析ツールSuPar-UniDicリリース
https://srad.jp/~yasuoka/journal/645402/

[2] yasuokaの日記: esuparの国語研長単位向け係り受け解析モデルbert-base-japanese-unidic-luw-uposリリース
https://srad.jp/~yasuoka/journal/652806/

[3] yasuokaの日記: Universal DependenciesのCoNLL-Uデータを直接spaCyに読み込むには
https://srad.jp/~yasuoka/journal/652825/

[4] 渡辺坦:植物の名前を探しやすい デジタル植物写真集
http://plantidentifier.ec-net.jp/

2022年2月11日金曜日

BERTモデルを用いたSuPar-UniDic(日本語係り受け解析)の試用

 【what is this】前報の(こちら)と(こちら)は、GiNZA係り受け解析の利用でしたが、今回は、安岡孝一教授が公開している、BERTモデルを用いたSuPar-UniDic [1]に着目しました。これを利用して、植物に関する記述文から、「どのような形や色の」花が「どのような位置や向き時期に」咲くか、に関する情報を自動抽出するプログラムを作成しました。参考資料[2]から引用した例文8件に関して、妥当な結果を得ることができました。

植物の記述文から「どんな」花が「どのように」咲くかの抽出
 
やりたいことは前報と同じですが、単語間/文節間の係り受け解析に関して、安岡孝一教授が公開しているSuPar-UniDic [1]が、従来のものよりも非常に高精度になっていることを知り、試用させていただきました。
 その係り受け解析を利用して、植物に関する記述文から、「どのような形や色の」花が、「どのような位置や向き時期に」咲くかに関する情報を抽出するプログラムを作成しました。以下の例文8件にこれを適用しました。

--------- 以下、参考資料[2]から引用した例文8件(原文のまま)------------
[p1]ミチバタガラシ:葉は長楕円状で、淡黄の花を総状に咲かせ、直線状の長角果をつける。
[p2]スズランズイセン:高い花茎に壺形の白い花を数個うつむきに咲かせ、先は6裂する。
[p3]リキュウバイ:葉は楕円形で枝先に白い花が円錐状に咲き、蒴果がつく。
[p4]ホンコンドウダン:常緑で、早春に紅色の釣鐘形の花が下向きに咲く。
[p5]ヤマラッキョウ:鱗茎は狭卵形、葉は3角柱状で、茎先に紅紫色の花が散形状に咲く。
[p6]イヌホオズキ:葉は広卵形で、白い花を散形状につけ、液果が黒い。
[p7]シナアブラギリ:葉は広卵形で、白い花が円錐状につき丸い堅果が褐色に熟す。
[p8]アカメガシワ:葉は葉柄の長い卵形で、淡黄色の花が円錐状につく。
----------------------------------------------------------------------------------------------------

 これらの例文は、葉や花や果実に関する情報を含みますが、今回は、そのうちの「花」に着目します。「花」の前後に、花の形や色、花のつきかたに関する情報があります。花に対する述部は「咲かせ、咲き、咲く、つけ、つき、つく」などがあります。それらは、見出し語に揃えて(レンマ可して)扱えば良いです。また、「... 花......咲く(付く)」のパタンは、spaCyのルールベースマッチング(係り受けの種類のタグを利用)で見つけられます。作成したプログラムの実行結果を示します。

--------- 以下、「どんな」花が「どのように」咲くかの抽出結果------------
[p1]ミチバタガラシ -> [淡黄の] 花を [総状に] 咲かせ、
[p2]スズランズイセン -> [壺形の, 白い] 花を [高い, 花茎に, 数個, うつむきに] 咲かせ、
[p3]リキュウバイ -> [白い] 花が [枝先に, 円錐状に] 咲き、
[p4]ホンコンドウダン -> [釣鐘形の, 紅色の] 花が [早春に, 下向きに] 咲く。
[p5]ヤマラッキョウ -> [紅紫色の] 花が [茎先に, 散形状に] 咲く。
[p6]イヌホオズキ -> [白い] 花を [散形状に] つけ、
[p7]シナアブラギリ -> [白い] 花が [円錐状に] つき
[p8]アカメガシワ -> [淡黄色の] 花が [円錐状に] つく。
---------------------------------------------------------------------------------------------------
 いずれも、満足できる結果ではないでしょうか!

SuPar-UniDicによる係り受け解析結果の詳細
 
こんなに上手くいったのは、もちろん、上述の高精度なSuPar-UniDicによる文節化と係り受け解析のおかげです。上記例文のうちで最も複雑そうな例文 [p2]について、その係り受け解析結果を示します。画像になっていますが、その理由があります。実行結果はテキストなのに、グラフィックスみたいな綺麗な係受け矢印を示すためです!(クリックして拡大してください。)


 小生の作成したプログラムは、上図の係り受け関係の矢印と、係り受けの種類(acl, obl, advcl,  nummod, 等々)を適切に判断して、以下のような結果を得ています。

[p2]スズランズイセン :
高い花茎に壺形の白い花を数個うつむきに咲かせ、先は6裂する。
 -> [壺形の, 白い] 花を [高い, 花茎に, 数個, うつむきに] 咲かせ、

参考資料

[1] yasuokaの日記: BERTモデルを用いた日本語係り受け解析ツールSuPar-UniDicリリース
https://srad.jp/~yasuoka/journal/645402/

[2] 渡辺坦:植物の名前を探しやすい デジタル植物写真集
http://plantidentifier.ec-net.jp/

2022年2月4日金曜日

GiNZAによる係り受け解析とルールベースマッチングの活用

【what is this】前報は、GiNZA係り受け解析の利用でしたが、今回はさらに、「ルールベースマッチング」を試してみました。例題として、植物の花に関する簡単な記述から、その花についてのwhat flower?(どんな色や形なのか)とhow does it bloom?(どのように、どんな位置に、いつ咲く)という質問に自動応答できるよう、必要情報(単語)を抽出してみました。今回の例文では、概ね成功でしたが、多様な表現を含む自然言語処理の難しさも改めて感じました。

花の記述文からの"what flower?", "how does it bloom?"の抽出方法
 
解析対象例文は以下の8件 (p1)(p8) としましたが、これらは、参考資料[1]に掲載されている植物の記述文を参考に作成しました。各文に含まれる、花に関するwhat flower?と、how does it bloom?とに対応する単語を抽出したいのです。

 その方法として、まず、その文に、「'花'を右端に含む単語が存在し、その後方のどこかに述語が来る」というパタンを見つけます。そのために、以下のように指定して、GiNZAのルールベースマッチングを用います。

    #パタンの定義とMatcherへの追加 ==================
    matcher = Matcher(nlp.vocab, validate=True)
    pat_flw =[{'TEXT':{'REGEX' : '.*花$'}},{'OP':'*'},{'DEP':'ROOT'},]
    matcher.add('flw', None, pat_flw)

 パターンにマッチした単語を元に、その係り受け(子供と親)の種類と、係り先の単語の品詞に応じて、whathowへの帰属を決める必要があります。述語(ROOT)としては、今回は"咲く"にマッチするか否か調べるのですが、正規化(レンマ化)表現を利用することで、"咲かせる""咲けば"などもマッチするようにしています。(具体的なPythonプログラムは、この記事の末尾に示します。)

"what flower?", "how does it bloom?"の答えとなる単語の抽出結果
 
結論を以下に示します。特徴的なこととして、上述のとおり、述語として、"咲かせる", "咲く", "咲けば"が、全てマッチしていて適切に処理されています。また、"花"の前方(左側)の単語が必ずしもwhatではなく、howに属する場合があることにもご注目下さい。例えば、(P1)では、"枝先に" は、"花" の前方にあるのですが、これは当然ながら、howに属する結果となっています。

 なお、(p1)での "濃紫色で" は、whatではなくhowに属する結果となりました。これは、係り受け解析が、"濃紫色で→咲か" という、微妙ですがちょっと不自然と感じられる結果を示したことに起因します。希望としては、 "濃紫色で筒状の" は、  "濃紫色の筒状の" の意味として解釈して欲しかったです。

(P1) 枝先に濃紫色で筒状のを次々咲かせる。
     -> what [筒状の, を]
     -> how  [枝先に, 濃紫色で, 次々, 咲かせる。]

(P2) 紅色等の唇形花を穂状に咲かせる。
     -> what [紅色等の, 唇形花を]
     -> how  [穂状に, 咲かせる。]

(P3) 暗紫色の壺形のを冬咲かせる。
     -> what [暗紫色の, 壺形の, を]
     -> how  [冬咲かせる。]

(P4) 葉腋に青紫色の唇形花が2つ咲く
     -> what [青紫色の, 唇形花が]
     -> how  [葉腋に, 2つ, 咲く。]

(P5) 紅紫色の蝶形花が総状に咲く
     -> what [紅紫色の, 蝶形花が]
     -> how  [総状に, 咲く。]

(P6) 数年すると肉質の咲く
     -> what [肉質の, が]
     -> how  [数年すると, 咲く。]

(P7) 淡紅色のが10月ごろ咲く
     -> what [淡紅色の, が]
     -> how  [10月ごろ, 咲く。]

(P8) 初冬に小さな咲けば良い。
     -> what [小さな, が]
     -> how  [初冬に, 咲けば良い。]

上記例文のGiNZAによる単語間の係り受け
 上記例文のうち、(p2), (p4), (p8) に対する、GiNZAの単語間係り受け解析結果を図示します。下記の抽出プログラムは、ここに示されている係り受けの種類(acl:名詞の節修飾子,  compound:複合名詞,  mark:接続詞,  aux:助動詞,  等々)と品詞の種類に対応して動作するようになっています。

 なお、"唇形花"、"蝶形花"、"4弁花"などはユーザ辞書に登録してあるので、ひとつの単語として認識されています。

"what flower?", "how does it bloom?"の抽出プログラム
 最後に、ご参考までに、今回の抽出プログラム(Python)主要部を以下に示します。このなかで、テキストファイルHanaNoSakikata.txtに、上記の花の記述文が入っているとします。

感想
 花に関する短い例文8件については、概ね想定どおりの結果が得られました。もちろん、上記の方法でうまく行かない例文は多数存在します。人間が話し、理解できる自然言語の世界はとらえきれない多様性を呈するように感じます。しかし、今回の結果には勇気付けられた気がしました。

[1] 渡辺坦:植物の名前を探しやすい デジタル植物写真集
http://plantidentifier.ec-net.jp/

2022年2月1日火曜日

GiNZAによる係り受け解析とユーザ辞書の活用

【what is this】自然言語処理の応用として、以前、係り受け解析器CaboChaを用いた記事(論文)を書きました。その後しばらく間があったのですが、今回は、GiNZAの係り受け解析を調べました。そのなかで、解析対象文章の種類によっては、GiNZAに含まれる解析器spaCyのSudachiPyユーザ辞書機能が非常に有効であることも確認しました。

続編はこちらです

GiNZAによる単語間/文節間係り受け解析
 CaboChaは、文節間係り受けを与えますが、GiNZA4.05に含まれるspaCy2.3はそうではなく、単語間係り受けを提供します。しかし、GiNZAには、ginza.bunsetu_spansという関数があって、spaCyのSpanとして文節を取り出せます。そして、文節bに対するb.leftsを利用すると、文節間係り受け解析が可能になります。このb.leftsですが、京都大学の安岡孝一教授の解説[1]には、以下のように書かれていました。

b.leftsは、文節bから左向き(文頭方向)に出ている単語係り受けのうち、文節の外に出ていくものの一覧だが、これを逆向きに解釈すれば、文節間の係り受けとして扱える。」

 最初にこれを読んだ時、これって何を意味するのか分からず困りました!そこで、簡単な例文について、図1のように、ステップを踏んでトレースした結果、「なるほど!」と納得できました。

(図はクリックすると拡大されます)
 図1は、例文「葉は虎柄の長い卵形である。」の解析結果です。黒矢印は単語間係り受けで、青枠は関数ginza.bunsetu_spansから得られる文節です。そして、赤矢印が、上記の「文節bから左向き(文頭方向)に出ている単語係り受けのうち、文節の外に出ていくものの一覧」となっていることが分かります。この後は、赤矢印の先の単語を含む文節を、関数 ginza.bunsetu_span (末尾にsが付かない) で得て、赤矢印と逆方向に青矢印を付ければ、文節間係り受けとなります。その結果は以下のとおりです。
 葉は→ 卵形である。
 虎柄の→ 卵形である。
 長い→ 卵形である。

別の文章も文節間係り受け解析(with ユーザ辞書)
 他のいくつかの例文に対しても行ってみたいと思います。ここで、参考文献[2]にある以下の記述が気になりました:
「GiNZAの係り受け解析の深層学習モデルは、UD Japanese BCCW v.2.6から新聞系文書を除外したもので学習しています。」

 ということは、一般の話し言葉などには強いが、新聞記事や専門用語を含む学術文書などの「堅い文章」にはあまり強くないということでしょうか?そこで、「堅い文章」に属すと思われる、渡辺坦氏の「デジタル植物写真集」[3]から引用した以下の2つの文章について検討します。
 [例文2] 根生葉は倒被針形で、濃紫色の唇形花が葉腋に咲く。
 [例文3] 2回3出複葉をつけ、花弁状萼が白い花を十字形に開く。

[例文2]の係り受け解析
 上記例文2の解析結果を以下に示します。この文には、植物の専門用語「倒披針形」が含まれています。GiNZA(spaCy)の標準辞書のまま解析すると、下図のとおり、形態素解析でこの用語がバラバラにしか認識されません。それが原因で、文節に対するleftsの集合に不具合(誤り)が生じ、その結果として文節間係り受け解析がうまく行きません。

 次に、この「倒披針形」をユーザ辞書に登録して解析した結果が以下の図です。形態素解析でこの単語が認識され、最終的に妥当な文節間係り受けが得られました。


[例文3]の係り受け解析

 例文3につても同様です。この文には、植物の専門用語「2回3出複葉」が含まれています。標準辞書のままでは、例文2の場合と同じく、うまく行きません。


 そこで、この「2回3出複葉」もユーザ辞書に登録して解析した結果が以下の図です。形態素解析でこの用語が認識され、最終的に妥当な文節間係り受けが得られました。素晴らしい!

SudachiPyユーザ辞書の活用
 上記のとおり、ユーザ辞書登録の効果は絶大です。GiNZAでは、SudachiPyの辞書が使われています。高品質で大規模な辞書のようですが、今回のような特定の専門用語などは載っていない場合も当然あるでしょう。それを補うためのユーザ辞書登録は比較的容易です。今回は試行のため、登録したのは以下3件に過ぎませんが。

2回3出複葉,4786,4786,5000,2回3出複葉,名詞,普通名詞,一般,*,*,*,ニカイサンシュツフクヨウ,2回3出複葉,*,*,*,*,*
2回3出複葉,4786,4786,5000,2回3出複葉,名詞,普通名詞,一般,*,*,*,ニカイサンシュツフクヨウ,2回3出複葉,*,*,*,*,*
倒被針形,4786,4786,5000,倒被針形,名詞,普通名詞,形状詞可能,*,*,*,トウヒシンケイ,倒被針形,*,*,*,*,*

 最初の2件は同じ内容ですが、用語のなかの数字(2と3)が半角でも全角でもOKとするためです。第2項〜第4項の数値は、接続IDやコストですが、標準的な値であり、最適値かどうかは分かりません。

 例文を引用した参考資料[3]には、植物の葉や花の形状や付き方に関する専門用語約160件が説明されています。それら全てをユーザ辞書登録することはさほど困難ではありません。それができれば、この資料にある解説文の係り受け解析の精度は格段に向上するはずです。それを利用したアプリケーションも色々考えられます。

補足
 
当方がこれまでに書いた、「自然言語処理」に関するブログ記事は参考資料[4]に纏めてあります。素人の拙文ですが、ご参考にしていただければ幸いです。

参考資料

[1] yasuokaの日記: 単語間・文節間の係り受け解析システムとしてのGiNZA v4.0.0
https://srad.jp/~yasuoka/journal/641184/

[2] 布留川英一:BERT/GPT-3/DALL-E 自然言語処理・画像処理・音声処理 人工知能プログラミング実線入門、ボーンデジタル、2021年8月

[3] 渡辺坦:植物の名前を探しやすい デジタル植物写真集
http://plantidentifier.ec-net.jp/

[4] 山本富士男:https://www.foyo.pro/自然言語処理