のことですが、
NLPをやっている人は皆が知っている技術と推察しますが、
今日まで知りませんでした。
どうやら色々な事情があるようです。
Ontology,WordNet,Word2Vecの順で自然言語の
概念が進化してきていますが、
本当はAMRはここの仲間として登場するべきものでした。
2013に登場したようなので、
Word2Vecと同時期に注目される技術だと勝手に考えます。
AMRとは、
自然言語の意味を中心に、
中間言語AMR(あらかじめ用意されたノードタグ)に変換して使う規格で、
単語を有向非巡回ノードに変換できる情報を持ちます。
予め意味を人間が定義したもので構成されているので、
このノードに落とし込めば、
自動的に意味が取り出せる仕組みになっていると思います。
パーサーもあるようです。
現実の翻訳ツールとして使う場合は、
欠点があり同じ単語が出現した場合は、
弱いようで複雑な文にも対応ができないようです。
概念は理解できるので、
何か体験できるツールがないか探したところ、
JAMRというツール群がありました。
JAVAで動作させるようで、
とはいってもScalaもついてきます。
巨大6GBもあるモデルをダウンロードしてから起動してみましたが、
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at edu.cmu.lti.nlp.amr.AMRParser$$anonfun$main$3.apply(AMRParser.scala:358) at edu.cmu.lti.nlp.amr.AMRParser$$anonfun$main$3.apply(AMRParser.scala:211) at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772) at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108) at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771) at edu.cmu.lti.nlp.amr.AMRParser$.main(AMRParser.scala:211) at edu.cmu.lti.nlp.amr.AMRParser.main(AMRParser.scala)でエラーファイルに怒られました。
ここではこれ以上調査しないことにします。
他にもサイトを調べました。
1.日本ではT大ともう一つの大学で論文が数件あるようです。
2.2014年から2017年までの結構多数論文が出ている。
3.大量のモデルが定義されている。多分英語はほとんど網羅しているのでは?
4.理論的には面白いし、地道な技術であると思った。
5.モデルの内容を確認したところ、RDFのコア+実例のような、意味ノードの辞書のような感じを受けた。
何やら残念な結果に終わりましたが、
Word2Vecで体験したインパクトはなさそうです。
NLPとして使うには、
少し問題があり、
意味を中心においているので、
表現できない部分があるようです。
とはいえ、
PropBankを継承した考え方である、
AMRはしっかりした理論的基盤の元に規格化されたものなので、
今後もNLPへの貢献を期待できる技術だと思う。