2018年12月29日土曜日

圏論について学ぼう

圏論が大変重要な数学になりつつあることは、今やネットでもよく聞く話ですが、どうも書籍を読んでも意味的にはりかいできますが、証明を読んでいく気にはならない。

そこで、とても解りやすい解説をなさっている動画を見つけましたので、ここで紹介しておきます。

https://www.youtube.com/watch?v=hbaNIIDPf24
6-5. 圏論とHaskellは仲良し - 大森 健児

です。この講義の先頭の半分が圏論についてお話しなさっていますが、大体10分程度でまとめていますが、私にとっては、他に類を見ないほど明快に説明がされています。

これで圏論がどのようなものかイメージしやすくなりました。大森健児氏に大変感謝いたします。

追記:20190102
圏論を数学者は数学的厳密性が必須であるが、
個人的には厳密性は不要だと考えている。
またその能力もない。
それよりも射、つまり関係性だけを使い定義された数学的思考で出発したことで、数学全体に影響を与えている現象そのものが本当の圏論の哲学的意義だと感じる。
何故ならば、圏論で証明されたことでシステム化されたものは、素晴らしく簡潔に且つ最適化されたシステムだと考えられるからだと思う。
こんなことを今までシステム設計やアルゴリズムを試行している経験を通して、圏論に対し最重要性を感じるからです。
追記:20190106
wikiにHaskell/圏論があり、モナドの説明を読むと以外に理解できることを知る。
今まで、ログを出力するのにモナドが必要であることが、数学だからそこまで工夫が必要なのだと勝手に納得していました。
そもそもインミュターブルな仕組みで且つ、数学的な厳密性を持たせた場合、果たしてログが取得できるのであろうかという問題がある。観測される系に対して何の影響も与えてはいけないからだ、哲学的には無理な気がする。
そこでモナドが登場する。予めモナドが影響を与えないことを数学的に証明しておいて、これで安全に数学的に矛盾なくログを取れることになります。
やはり圏論は面白い感じだなと思った。

2018年11月15日木曜日

等価変換について

等価変換の思想や手法はかなり旧くからあるようですが、結局人間はこの手法を使い技術を進歩させてきたように考えるようになった。

作曲家が言っているのですが、「作曲家の作業も、エディタの要素が存在する」と、これは等価変換をさしているのではないかと考える。

近年圏論が数学の頂点に立つことが目につくようになってきましたが、これも汎化の究極の世界で、直接対象ばかりを細分化(分類)していくよりも、関係(射)を研究することにより、数学的本質を探求していることだと考える。

もちろんシステム開発なんかは、一番当てはまる。
今ではアセンブラなんか使いコードを書いている人は殆どいない。高級言語を使い、CPUやGPUで何を詳細にしているのか解らなくても、プログラムは組めてしまう。今はまだ、システム設計が技術的に確立していないので、各自バラバラに設計がなされているが、近い将来証明がなされた形式手法がかくりつされると信じている。
その時はコーダーは何をすればいいのでしょうか?

AIも今は、NLPでは言語をエンコードして数値にしてから解を求めているが、ドメインを細分化させたり、数値化されない前の情報をもっと使いこなせれば、もっと成功すると考えているようになった。

辞書なんかは、等価変換のほかに何者でもない気がします。
辞書を作成している人達は、意味を説明していると考えていまるのでしょうが、用法なんかも使う側からすると、等価変換で自分の文書の言葉に、置き換えて使うことになります。
又、現実的に辞書に直接載っている言葉では言葉を探せません、近い言葉に置き換えて使っています。

NLPについても、今まで旧来の文法解析等に縛られていましたが、AIのニューロン系のアルゴリズムや統計解析で、文法ばかりではない、「言葉のことは言葉に聞け」のやり方は、等価変換のことを指していると考えられます。

これからは、「等価変換と圏論」の思考を方法論としていこうと考えている。

追記:20181116
言語処理のモデルとして、次のことを考えてみた。
「システムで使われる意味とは、単に意味を示している単語を指すこと」だと考える。
翻訳しかり、文書の内容要約も同じように、別の単語群で指し示すことだと考える。ただし、この時必ず、等価変換が存在している。

2018年5月11日金曜日

AMRについて

Abstract Meaning Representation
のことですが、
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への貢献を期待できる技術だと思う。


2018年4月30日月曜日

word2VecとfastTextはNLPの基礎

色々AIの調査をしているが、NLP関係で現在現場で一番活躍しているのは、このword2Vec(Vecと省略)とfastTextだと思う。
理由を上げてみると、

1.NN系のアルゴリズムを使っている。
2.GPUを利用しなくても動作する。
3.大量データを扱うのが目的。
4.趣味的にもNLP研究のツールとして使える。
5.ベクトル化、数値化した情報
6.オントロジーやタクソノミーとして利用できる。
7.生の文書(日本語は分かち書きが必要)を扱う。
8.他のAIツールのリソースの生成に役立つ。
9.NLPのDB(QAエンジン)としても使える?
10.利用するのが簡単
11.文法に関係している情報も分類できる
12.少量のデータでも利用が可能

もう既に誰にでも名前が知られたツールなのでここで説明をする必要がないのですが、大体自然言語の基礎的な情報を取得できる。
もしかしたら、他にも利用できることがあるかも?
どうやら、ググやYouTubeでも隠喩ですばらしさを表現している人も沢山いるので、あえて書きます。

Vecを実データで試してみると、明らかに文章中のベクトル化に成功していることに、まさしくマジックをみることになります。

一方OpenNMT(ニューロンを使った翻訳ツール)を試して見ると確かになるほどとは感じますが、NLPの分野では豊富なデータも個人では持っていないので、実用的なところまでは程遠いことを思い知ることろです。
もちろんAIの勉強にはなりますが、むしろGPUを自由に使えない環境では、ストレスを感じてしまいます。

現在大手がこのツールを使っていることは、想像するまでもありませんが、今後もこの分野がNLPの中心になっていくことと予想できます。
NMTで固定長、エンコードや文法問題を抱えたまま長文や文書全体の課題を、Vecが見事に解決してくれます。
現状はNMTが主流になっているようですが、Vecを何らかの形で連携することは必須と考えられます。

IT関係者でなくても誰でも恩恵が受けることが可能なツールで、是非一度お使いになることをお勧めします。
もしかして、「基礎に始まり基礎に終わる」てなこともありますよね。

追記:20180502
文法について使いたいならば、Doc2Vecをお薦めします。
文の中の語順を考慮していますので、より文法規則が正確に取得できているようです。

追記:20190518
NLPの基礎技術という考え方では、もう一つ重要な技術としては、SMTの分野で有名なMosesとGiza++があることを追加します。
これは、SMT翻訳とNMT系の翻訳とがお互いに協力弱点を補い合って行うことで、より完全な人間に近い翻訳ができるようになるからです。


2018年4月28日土曜日

YouTubeで技術習得

もう何度もこの内容でブログに書いてきたが、再度取り上げる。

大体新しい技術の分野を習得したければ、一番早いのは既にその知識を熟知している人に教えてもらうことが一番早いことは誰でもが知っていることだ。
でも最先端の技術だとどうだろう、中々熟知している人が見つからない、そこでセミナーが存在している。
でもセミナーが毎日開かれているとは限らないし、場所も限定しているのが現状だ、ましてや個人的な興味の場合には、お金が掛かる。

そこで、書籍もあるがもしかすると、まだ英語でしか出版されていない場合もある。
そこで役立つのがYouTubeだ、今では英語も日本語の字幕が見れるので、何度も両方の言語で字幕を見て理解していけば
、その人の興味がモチベーションとなって、不思議に理解が進むものだ。
メリットとして英語もリスニングできるので耳が鍛えられる。もし聞くのが不慣れであれば、初め速聴をすることでその後標準速度に戻せば、非常にスローに効くことができてしまう。どうやら脳がこうした機能を持っているようだ。
これは、高い音(速聴)が早く喋っているように聞こえ、低音が遅く聞こえる現象からも理解できることだ。
また速読したからといって、内容が理解できないかというと以前にも書いたが、哲学書を速読してみれば速読の効果を体験できる。速聴も速読も脳のインプットの部分では異なるが、最後に理解する場所は多分同じであろうから、人間に備わっている機能を使わないのはもったいない。
これは早い仕事を脳に与えて、活性化させ、標準モードに戻すとハンディが生まれることを利用している。よく耳も筋肉に例えられるように、脳も同じように筋肉効果をもっている。
又、日本人には英語のS音が気なって、より気になってしまい、聞き取れないことがあるが、これも速聴がS音を聞こえないようにしてくるので、子音が聞きやすくなる。

話がそれてしまったが、是非YouTubeを使い一番最適な技術習得をしてみることをお薦めする。
一つマイナスなことがあるので、あまりこれを実行しすぎると、神経症に掛かる恐れもあるので、ヨガや深呼吸方も合わせて行うことも必須条件としておきたい。

2018年4月21日土曜日

DBR(Define by Run)はDSLの進化

ここ数日AIツールについて調査をしてきた。
完全に周回遅れだ、とはいっても旧AIを30年前の雑誌は購入して来て、何時かはAI時代を夢見てIT業界で働いてきた。

今のAIについてここ1年ほど距離を置きながら考えていた。
まずはTensorFlowの書籍を購入し、少し旧いが集合知の書籍も読み直してみた。
技術的には非常に簡単な理論で容易にイメージが湧く説明ばかりで、一体なにがこう騒いでいるのか、又マスコミ先導の流行りごとではないかとも考えていた。

そんな時、PyTorchのNN技術に興味を強く感じ実際に試すことにした。

すると今までと全然違う衝撃の感覚を受けた。
IT業界で今までほとんどどの工程にも現場で経験して来た感覚とは違う感覚に出会ったのだ。
どんなプログラム言語もほとんど理解できるようにしてきた。
なのに全く違う思想でAIツールは作られているではないか。

PyTorchのフレームワークは
「Define by Run」(定義をRunで掛(X)けること)
なのであるが、これは定義するだけで動作してしまうことを指している。それもGPUの上で並列に動作されることを約束してくれる。いまはまだGPUの値段が10万円クラスのコストだが、今後数年でもっと安価な時期も来ると容易に予想される。
そうなると、今よりももっとDBRの思想が進化することになる。

加えてGitHubでこぞってコードがオープン化している、こんな時DBRでは何が重要なのか、書くことから見て考えることにシフトすることが予想される。DBRはDSLのフレームワークの進化版なので、よりITの現場に影響することは大きい。

これが単なるプログラム言語の話しならともかく、ツールで簡単に利便性の高い数式が扱えるのだ、いままでどんな職業が影響するのか巷では騒がれていたが、本当に違いがでてくるのは、そして進歩しなければ行けないのは、IT業界ではないかと、強く思うようになった。

今までは遅かったり、メモリが気になってできなかったことが、理想的な公理的設計さえできれば、後は自動化されることになるし、設計の証明も行えるようになる。
残りはセキュリティの問題だけかもしれない。

今まで、宣言的プログラムを指向してきたが、どうやらDBRが今後は主流になると考える今日このごろです。


2018年4月19日木曜日

イメージ化していく時代

5年前に全てがマトリックス化していると感じた、そしてAIがテンソルでこれを現実化している。

次のフレーズを予想すると、イメージ化が見えてきた。
これは画像のイメージではない、指向のイメージ化を指す。

現在起こっていることは、従来数学や技術論の専門としてきた領域がツールにより、非常に簡単化することにより始まる。まさしくAIを教師として人間が自由にこれを利用できる環境がこれを現実化する。

今までデザインを専門として来た人がAIを利用して非常に高度なことをしてみたり、子供でも発想があれば簡単に実現できる時代が来るようなきがする。
いわゆるIT専門家も、子供も同じレベルに立つ時代が来る。現実にスマフォは子供のの方が利用する上でより上級者だ、どんな未開の地域でも、スマフォさえあれば都会の人とあまりユーザビリティでは差がない時代だ、すでにイメージは共有できている。

それにしても今まで苦労して数式を証明してから使う時代と、パラメータだけを設定するだけで数式を利用できる時代を比較すると、どちらが正しく使いこなせるだろう。

この頃数式もこれを使うイメージや目的が明確になれば、これを使いこなすことができる時代がもう始まっていると感じる。

「数学を学問的か技術的な使い方から、ツールのように扱う時代が来ている。誰でもが平等に扱えるのだ。」

そして、今までできなかったことがAIやロボットにより、魔法のようにできてしまう時代がもう目の前にきている。
世界は広く、ユーチューブで見る限り、発想力はどの国でも平等であり、むしろ今まで注目されてこない国の方が、素敵な動画を作成できる時代になっている。

こんなイメージを感じている人が増えていることは間違いないのではなかろうか。


2018年4月16日月曜日

日本語の歌を異国の人が歌うと

この頃異国の人が日本語で歌うのをテレビで見ると、気がづくことがある。

どうやら日本人より断然音の分解能が良いようだ。それと音の発音の仕方が日本人と異なるため、日本人で作れない音を出していることに気がつく。話す会話と違い歌の場合、音声も大きくより繊細に放送されているため、視聴する側もいつもより詳細に発音を聞くことができる。

「なんという雑味がない歌声なのだろう。異国の人が歌う歌は!!!」
日本語をこんなにきれいな発音ができる人は、今まで聞いたことがない。

母国語が正確に出せないことは少し悲しいが、そもそも日本語には母音しか無いので、普段から当然そんな細かい違いを意識して発音していない。よって発生の範囲が狭くなる。
また、多分音の分解能まで落ちているのかも、もしくは自分の発声した音に対する分解能が良くない可能性がある。
少なくとも以上の理由でどうしても異国の人の歌声にはかなわないようだ。

でも次第にテレビのコマーシャルでも最近ネーティブの英語で流すようになってきた。これにより日本人も段々と高いレベルの若い人達が育つことになるので、将来はもっと歌がうまい日本人も出てくると思う。
また非常に心地よい日本語の発音をするナレータが増えると予想できるので、もう一度きれいな日本語が復活することが期待できる。

それにしてもN**のアナウンサーは本当に綺麗な発音をする人もいるのに、あまり活躍していないことが非常にもったいないと感じているのは、非常に残念と思うのである。


2018年3月26日月曜日

GFについて

今や世界各国の言語が色々なメディアから聞く機会が増えました。
見知らぬ言葉を聞いてこれを調べたい場合には、
一番アクセスで調べたい単語等の場合には、
もちろんグーグルが一番お気軽でしょう。
他にも概念の集合からのアクセス方法として、ワードネットがあります。
ただし、ワードネットはシステム屋さんしか自由にあつかえないツールかもしれません。

ここでもう一つの切口(実用的には使えない)で、今回GFを紹介します。

https://www.grammaticalframework.org/

A programming language for multilingual grammar applications

なにやら、プログラム言語のような感じを受けますが、自然言語を主に扱います。
このツールは自然言語をコントロール言語として扱い、主に文法中心の言語へのアプローチを取っています。
対応言語は広いのが特徴で、世界の主要言語は大体網羅しています。文法に興味がある場合に便利なツールと考えています。
ツールはHaskellで実装されていて、例えばMacにインストールした場合、
gf
コマンドで起動できます。

とにかくアプローチは非常にユニークなので研究するには面白い方法だと思います。ただし、ワードネットよりもよりシステム屋向きのツールと言えます。

これを知ったのは元はプログラム言語の解析でJavaの文法解析で知りました。その頃から更に発展を遂げているようで、再調査が必要なようです。

追伸:
他の件で調査していたら、SyntaxNetがこの道の最新技術らしいです。Googleさんが提供しているオープンソースの技術で、RNN系のNLPで使われている技術です。
大きく異なるのは、GFと違いコントロール自然言語のスコープではなく、本当の自然言語での構文解析で使える技術です。

アラビア語のWordNet

前回はインド語へのアクセス方法を調査してみたが、ついでにアラビア語もワードネットがないか探してみると、やはり存在していた。
こちらはJavaでのアクセスなので、ファイルを直接覗いてみた。

サイトは以下になります。
https://github.com/zouairi/AWN
ファイルを解凍して内容を確認すると、xmlの中が内容のようです。
この他ログにワーニングのようなものが出力されていました。

アラビア語も将来性があるので、情報にアクセスができて勉強になりました。

追記:20180426
もっとまとまったサイトが存在していました。 現在34言語登録されています。

Open Multilingual Wordnet

2018年3月25日日曜日

インド語へのPyiwn

インド語についてYouTubeで文字について興味があったので見てから、今度はWordNetが利用できないか調べてみたら、IndoWordNetの存在を知りましたが、アクセスするとゲートウェイエラーが発生してしまいます。

そこで役立つのがPyiwnです。

これでアクセスすれば、インド語ワードネットへアクセスできます。
そこで早速試してみましたが、ちゃんとアクセスできるようになりました。
インストールも簡単で、

pip install pyiwn

これだけです。ヒンディ語を試すとアクセスできます。
from pyiwn import pyiwn
pyiwn.download()
iwn = pyiwn.IndoWordNet('hindi')

これからインド語への調査で役立つツールになります。
Synset:531
Word:11万
と単語数も十分な数があります。これでヒンディ語の解析も可能な時代になりました。

この他試した言語はいかのようでした。
lng=['assamese',
# 'bangla',
'bodo',
'gujarati',
'hindi',
'kannada',
'kashmiri',
'konkani',
'malayalam',
'meitei',
# 'mrathi',
'nepali',
# 'odia',
'punjabi',
'sanskrit',
'tamil',
'telugu',
'urdu']
for l in lng:
  print(l)
  iwn = pyiwn.IndoWordNet(l)
それにしても1国でこれだけ言語があるので、インドの人が数学でも言語の分野でも苦労が多いことでしょう。

苦労することは知識や知能が発達する可能性が高いと考えられます。

2018年3月8日木曜日

GSSとはCSSの何?

GSSとはGrid Style Sheetをさしているらしい。ググってもほとんど日本のサイトではヒットしない。
なにやら技術的には非常に革新的なものであるが、2014年のYouTubeのデモからもう5年になろうとしているので、これからの技術かもしれない。

特徴を上げると
1.プリプロセッサで利用、CSSを変換
2.グリッドシステム
3.広い範囲で利用できる
4.制約論理をインテリジェントに適用、CCSS
こんな感じです。

感想としては、「CSSが未熟な技術なので、制約表現で記述してくれれば、エンジンを使いクールに表現できます。」という感じでしょうか。

VFLという制約言語でコードを記述するようですが、制約を宣言的に記述すると、自動で動的CSSのコードに変換してくれる仕組みのようです。(VFLはアップル社の技術)

制約論理ではSATやMax-SATだの用語が並んでいるので、かなりインテリジェントなものだと考えられる。CSS polyfillsからの技術ということで先進的なのですが、何故か現在はほとんど議論されていないようなので引き続き調査が必要なようです。
現在はサイトで公開しているようですが、なぜかGitHubの更新が3年前から更新されていないようで不思議な感じがします。

なにやら不思議な感じなまま書いてしまいましたが、オライリーでも取り上げられた内容で、且つ制約論理を使うまれなケースなので、とにかくこんなところまでSATが進出していたとは、この発想にはつくづく感心致します。


2018年3月7日水曜日

マイクロサービスのメモ

ある仕事を終えてから、せっかくScala言語が理解できる状況になったので、ScalaによるWEBについての調査を手前味噌で行った時のメモです。
マイクロサービスとは、かのマーチン・フラウワーさんが提唱したアーキテクチャーです。

結局、Scala言語はJavaなんかよりも開発効率があがるが、あまりコードを開発する技術者も増加しないし、一部複雑な概念(黒魔術ともいうらしい)があり、将来性は今一解らない状況と理解しています。相変わらずJavaのミッションクリティカル系でのレガシーなコードの蓄積の影響力が強い傾向と考えています。ただ次第にPython系の仕事も増加しているようです。

「Lagomでマイクロサービス」

前置きが長くなりましたが、結局マイクロサービスがDOS攻撃にも対応可能であると考え、Scalaでのマイクロサービスの一つである、Lagomのことを書きたかったのです。
Lagomの特徴は、JavaもしくはScalaでのAPIを使うことができるバックエンドで、非同期でリクエスト処理ができる、クラウド向きなマイクロサービスのシステム構築が実現できるものです。
深くは勉強していませんが、工夫しだいではフロントエンドに
DOS攻撃を受けたときにリクエストを判断し破棄する仕組みを作れば、かなり理想的なシステム構築が可能になると考えています。
今は、安定性や将来性を見極める段階ですが、期待したいプロダクトと思い今後も注目していきます。

せっかくScalaのことを書いたので、一つ追加でScalaで実装された、ScarabというSATソルバーがあり、コードもシンプルで且つ高速であるようです。何かSATで実用的なシステムを組みたい時に使える技術だと思います。

2018年2月24日土曜日

確率論的プログラム

近頃AIツールから流行りだしてきた新しい考え方として、確率論的プログラムがある。
以前からNLPの分野では絶対的に必要になる確率論の登場だ、そもそも自然言語は確率論で解析されるべき現象かもしれない。相手は自然言語なので、発生した表現はどれも正しいえる、例え文法的にも間違いがあっても、その場で言語の役目をになえば、正しいといえる。時代時代の言葉、若者があるコミュニティで発した言葉、どれも正しいのだ。
これを時と場合の状況に合わせ、主体者が主体的に選択したものを、NLPで解析しているのが事実で、実際に対訳データを解析してみると確率を使った分析で単語とかはかなり高い確率で解析できる。
確率論的プログラムは今後飛躍的に発展してくる技術であることが予想される。
でも確率論と統計解析とどのように区別するべきなのであろうかという疑問が残る。少なくとも確率論は統計解析を参照するが、総体的統計ではなく局所的統計を意味を論理的に判断してアルゴリズムを組むことで異なる判断がなされると考える。(自己流の解釈です。)
現在、Pytorch+Pyro、WebPPL等が注目されているが、この考え方は、これ以前からある、B-Prolog+PrismやASPと共通している考え方であると思う。それにしてもまたもやPrologの先進的な手法がレガシーなものになってしまうのか、今後の流れに注目していきたい。

2018年2月12日月曜日

Picat言語の将来性

また新しいプログラム言語かと思い少しうんざりしていた、今日この頃ですが、どうやらそうも言っていられないかも知れません。

この言語の特徴をあげると(本家サイトの情報から)
1.マルチパラダイムプログラム、PythonとPrologの側面
2.ルールベース言語
3.記述が非常にシンプル
4.制約論理を実装している
5.テーブリング、メモ化して最適化計算
6.仮想マシンで動作し、スケーラブル
7.SATのアルゴリズムでも賞を最近とっている
8.アクター(イベントハンドリング)

この他、基本的な情報はウィキを参照してください。

これだけの理想的な特徴を持っている言語は他にはないような気がする。
Haskellは殆どが満たしているが、コードが読みにくい。
試しにサイトのコードやライブラリを眺めて見ると、びっくりするほどシンプルに記述されている。

本家サイトには大量のサンプルプログラムがあり、使う上で
のフレームワークは殆ど揃っている。

今まで、PythonやPrologで記述しづらいアルゴリズムがこのPicatで解決できるような気がする。

そういう意味では、Prologに慣れている人(殆どいないかも)には待ち焦がれた実用システムが構築可能なプログラム言語と言える。(ちなみにPrologの特徴であるassertが見つからないが、cl_factsが同じ意味を持つらしい。違うのは述語を全リストで登録し、更新するときは毎回全述語入れ替えが起こる。つまりバッチ化されたということ。)

アクターとイベントハンドリングは、UIやWeb等の仕組みで使われることを前提にしているようです。Webの説明の切り口が少ないので、今はどうやって利用するか調査中です。

今は、TensorFlowのようなニューロン系のAIが大注目されているが、いずれSATによる手法もクローズアップされる時期も来るかも知れない、その時の為にPicatのようなクールな言語は最適かも知れない。
この意味で、人工知能系のアルゴリズムの研究には適していると感じている。

改めて、現在ライブラリーやサンプルコードを眺めた限りは、制約論理系に重点を置いている感じがするが、NLPもターゲットにしているようなので、是非新しいアルゴリズムが開発されることを期待したい。

「Picatに将来性あれ!!」

追伸:3月27日
この記事を書いてから、PicatをPrologの代わりに使い続けて、約1ヶ月半が経ちました。これまでの感想そ追加します。
利点:
Prologよりも遥かに綺麗なコードが書ける。
カットがないので、無限ループに遭遇することが少ない。
エンジンとして使うのに適している。
Prologで遅いアルゴリズムで使えないアイデアも使えるようになった。
まさしくルールに集中できるので、思考にもいい影響がある。(Prologのコードを再構築できるようになった。)
tableを使い、組み合わせの最適化解を求めたいのであれば、絶対的に使うべき言語です。
欠点:
汎用的なコードはまだPrologの方が早い。
メモリが巨大化するので、これを防ぐようにアルゴリズムを考える必要がある。

追記:20181229
Picatを使い始めてから実際のところ、言語の使い方は習得できましたが、メモリのガーベージがだめなようで、まだまだPrologに頼るところが多い状態です。現状報告まで。
追記:20190223
garbage_collect関数を呼ぶとき、sysをインポートすれば、正常にガーベージできました。誤報を流してしまい申し訳ありませんでした。

2018年1月10日水曜日

DCGの拡張版

CCGをググっていたら、DCGの拡張版が紹介されていた。

http://www.cse.unt.edu/~tarau/research/2016/slides_appl.pdf

このアルゴリズムでは、CCGの文法解析で利用している。

簡単に説明すると、DCGの左と右を入れ替えたもので、これにより、入力規則を次第に減ずることでCCGのカテゴリ記号を解いていくものだ。結果最小単位のsつまり文であるかが、検証できる。
工夫次第では、DCGの無駄な評価を最小にできるアルゴリズムだと思う。素晴らしい!!!

まだまだ勉強になることがあり非常に参考になりました。