ラベル SuPar-UniDic の投稿を表示しています。 すべての投稿を表示
ラベル SuPar-UniDic の投稿を表示しています。 すべての投稿を表示

2022年3月9日水曜日

植物記述文からのjsonテキスト自動生成の精密化(2)

【what is this】先の記事の続編です。植物に関する記述文からjsonテキストを自動生成する際のさらに難しい例文に出会いました。これを記録しておき、係り受け解析の他にどのような情報(推論の枠組みや辞書類)が必要なのかを検討したい。

散歩で見つけたウメの小枝
 
確実に春めいてきました。近所にあった田んぼや畑は年々消えて行きますが、それでも散歩道の近くには農家が散在しています。道の一角に無人の野菜販売スタンドがあります。小さな貯金箱みたいなのが置いてあり、一包みあたり、百円をそこへ投入して買います。今日は、野菜の他に、梅の小枝3本ほどを束ねたものも置いてありました。これはいい、と思って買いました。図1のように、丸い小さな蕾もたくさんついています。

ウメについての簡潔な記述からのjson自動生成
 
この梅に関する簡潔な記述が、参考資料[1]にあります。

 ウメ:花に柄がなく、葉が出る前に咲き、古枝に棘がある。

 図1の写真からも分かるように、これはウメを的確に表現していると思います。これから、次のような(ウメの"花"についての)jsonテキストを自動生成したい、ということがすぐに想い浮かびました:

 {"花":{"柄":"無い", "時期":"葉が出る前"}}

 しかし、これは難しそうです。図2には、SuPar-UniDic[2]による係り受け解析結果を示しましたが、他にどんな情報(辞書や推定の枠組み)が必要なのでしょうか。

 課題は多そうです。例えば、「葉が」という主語があるのですが、この文は主に「花」について述べており、「葉」は「咲く」ことを修飾しているに過ぎません。また、「出る前に」だけでなく、「出た後に」や「出る前後に」や「出る頃に」などが出現することも多そうですので、これらを全部、「時期」というkey(タグ)に集約できるのでしょうか。難しそうですが、今後の検討材料として記憶しておく価値はあるでしょう。

参考資料

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

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


2022年3月1日火曜日

植物記述文からのjsonテキスト自動生成の精密化(1)

【what is this】先の記事では、植物に関する記述文から、葉や花などに関する特徴を取り出し、構造化して表現するアプリを作成しました。しかしながら、対象とする文の表現は多様であり、まだまだ課題が多いことを改めて知りました。その一部をここで検討します。係り受け解析結果を、アプリ側でどのように解釈し利用するかだけでなく、(アプリに特有の)植物に関する知識も取り入れる方策が必要です。

植物に関する記述文からJsonテキストを生成する
 
実は過去に、(ここにあるように)「植物記述文からJsonテキストを生成」を行いました。その時のJsonのkey(タグ)は、大まかな特性に関する事前に用意された数個に限定していました。今回は、そのkeyをもっと精密なものにしたいと思います。

 何をやりたいのかを、図1で説明します。例文L1〜L5は、ある植物の「葉」の特徴を述べています。表現は違いますが、内容は、以下の通り全く同一と言えます:

  1. 葉に脈と剛毛がある。
  2. 脈は3本あって明瞭である。
  3. 剛毛は両面につく。

 従って、これら5つの文を、いずれも、図中の「json1」のようなJsonテキストに自動変換したいのです。一方、例文L5の「両面に」を「果実に」に変更した例文F5は、「json2」のように変換したい。なぜなら、今は「葉」に関する特徴を抽出したいのですから。

Jsonテキスト生成の検討
 
この課題について、簡単に検討します。ここでは、SuPar-UniDic[1]による係り受け解析を利用させていただきました。まず、例文L1の係り受け解析結果は図2のとおりです。「葉」に係る「ある」を経由して「脈」をkeyとすることができるでしょう。そして、「3本の」と「明瞭な」が並列的に「脈」を修飾することを利用して、json1の前半部は生成できます。後半部の生成は、「葉は」の述部「つける」から遡って作れそうです。

 次に、例文L5をみます。図3の通り、今度は「葉は」が「明瞭で」に係るので、L1の場合と様子が違いますので、慎重にkeyとなるものを見つけ、適切に係り受け関係をたどりながらjson1を生成する必要があります。

 そして、最後の例文F5です。例文L5にある「両面に」が「果実に」に変わっただけなので、図4の通り、係り受けの関係は全く変わりません。しかし、「剛毛」は「葉」にではなく「果実」につくので、「葉」に着目している限り、json1の後半を削除したjson2のようなjsonテキストを生成する必要があります。


 まとめとして、少なくとも、図1に示したようにjsonテキストを生成できなければ、真の自然言語処理とは言えませんので、検討を深めて行きたいと思います。

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


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/