33
Haskellでつくる自然言語処理ガジェット 次世代の自然言語処理向けプログラミング言語の勉強会

Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

Haskellでつくる自然言語処理ガジェット

次世代の自然言語処理向けプログラミング言語の勉強会

Page 2: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「今日のやること」

1.Haskellの紹介

2.開発(勉強)環境構築

0.勉強会の目的・方針説明

Page 3: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「勉強会の目的」

•「自然言語処理(文章の分析、および自由な加工)」と

•「目に見える形での具体的なHaskell製のGUIプログラム」を通して

•「Haskellっぽいこと」を勉強していきます。

内容 Haskellっぽいこと

Data.Listの関数基本文法、型、高階関数、ラムダ式、スコープ等

S式のParser作成と操作

再帰、モナド、データ型(型クラスとか)、(圏論)

GUI IORef, 並列・並行プログラミング

自然言語処理ガジェット

Page 4: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「勉強会の方針」

・プログラミング初心者を大事にする

・参加者が各々で何かを持ち帰る形

・プログラミング初心者が最初の言語としてもHaskellのコアな部分を学べる内容・要点のみざっくりと・知的好奇心をくすぐり、後でご自身で勉強したくなる系のをものふんわりとご紹介

みなさん、ご協力をお願いします。

初心者も経験者も(そして私自身も)勉強会に参加して何かを持ち帰る、そんな形にしたい。

・標準ライブラリ以外のライブラリは極力使わない(勉強が目的)

Page 5: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「Haskellて何ぞ?」

・プログラミング言語の一つ

・純粋関数型言語(強そう)Purely Functional Language

・高い抽象度(数学っぽい)

・主流言語とは異なる文化

・難しいと誤解される言語

A Bf

・高度先端分野向け言語(ポテンシャル枠)

・量子コンピューティング・ロボティクス・A.I.(後述)

Quipper(量子コンピューティング)

Yampa(ロボティクス)

Page 6: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「プログラミング言語いろいろ」

・Lisp、C、Haskellは先端言語

主流言語(バランスのよい言語)

・主流言語は先端言語のよいとこ取り

輸出

輸出

簡略化

・簡略化(書きやすさ)・Lisp :カッコが多すぎ・C :マシンに寄りすぎ・Haskell :文法が厳しすぎる

・Lisp :万能(真のA.I.言語、マクロ)・C :最速(マシンに近い)・Haskell :抽象度高い(関数型言語の右翼)

・概念の輸入・Lisp :ラムダ、ガベージコレクション・Haskell :参照透明、遅延評価、Fusion、型推論

簡略化

簡略化

子孫

先祖

Page 7: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「A.I.向け言語 Haskell」

・Haskellは純粋関数型言語

・関数が大事(数学っぽい。圏論)

・型理論(これがポイント)

・not 流行りのA.I.(機械学習)

・ロジックが扱えるA.I.

この勉強会では残念だが触れない

GPU向けライブラリ(Accelerate)の更新が止まっている。

Page 8: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「A.I.向け言語 Haskell」 ー型理論

・型理論(Type Theory)

・種類・分類みたいなもの(抽象化)

・型推論(型が違う、コンパイルエラー)

・型レベルでの証明 => 個々レベルでの証明

・証明

0, 2, 4, 6, … :: 偶数

1, 3, 5, 7, … :: 奇数

個々の要素 型

偶数と奇数の和は奇数

型レベルでの証明

0 + 1は奇数4 + 7は奇数

個々レベルでの証明

・思考の省略

・個々の証明からの開放

・より高度なレベルでの議論可能にaとbは異なるなぜなら、a : A and b : Bだから

Page 9: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「A.I.向け言語 Haskell」 ー抽象化の威力

・つるかめ算、植えき算

・方程式の世界

・方程式による思考の省略がもたらしたもの

・関数の概念

・変数

つるとかめが合わせて10匹います。足の数は合計28本です。つるの数は?

・解析幾何

n + m = 102 * n + 4 * m = 26

f (n, m) = N_constg (n, m) = N2_const

Page 10: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

デメリット ー速度がまだ遅い言語 Haskell

やっぱり速いのはC,C++

ただし数学的な関数の組み合わせ

map, fold, filter, zip …

等式の変換ができるので、最適化をかけやすい

並列・並行計算に強いと言われる。ループの区別(map, fold)

が、個人的にはまだまだという印象

最適化証明の自動化(これには総当りがやれるようになる、量子コンピューティングが必要と見る)

for (int i = 0; i < imax; i++) {

arr [i] = f (arr [i]);

}

double tvar = tvar0;

for (int i = 0; i < imax; i++) {

tvar = f (arr [i], tvar);

}

arr’ = map f arr

tvar’ = foldl’ f tvar arr

並列

直列

Page 11: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

デメリット ー記号遊び言語 Haskell

記号遊びの感がある場合がある。

抽象化によるフットワークの良さを殺しかねないくらいの記号遊び

勉強会ではこのあたりは拘泥しない予定

> pl (a,b) -> a:b:[] uncurry ((. return) . (:))

> pl a b c -> a*b+2+c ((+) .) . flip flip 2 . ((+) .) . (*)

> pl f (a,b) -> (f a, f b) (`ap` snd) . (. fst) . (flip =<< (((.) . (,)) .))

> pl f g (a,b) -> (f a, g b) flip flip snd . (ap .) . flip flip fst . ((.) .) . flip . (((.) . (,)) .)

> unpl flip flip snd . (ap .) . flip flip fst . ((.) .) . flip . (((.) . (,)) .) ( aa f -> ( p w -> ((,)) (aa (fst p)) (f w)) >>= ao -> snd >>= an -> return (ao an))

Page 12: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

もっと型理論な言語 ーAgda

数学的な等式証明とかはAgdaとかCoqという

定理証明系言語が実は強い。

今回はAgdaの環境も構築しておく。

Page 13: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「他の関数型プログラミング言語との関係」

・型なしλ計算(緩い)

・単純型付けλ計算(中間)

・依存型(ガチガチ)

型理論 やれること

・メタプログラミング

・実用的プログラミング(Agdaと比較)

・数学の証明とか(A.I.とか言っているのも実はHaskellではなく

Agda)

備考

・ご先祖(1958)

・委員会の存在(良い血筋)

・Haskell拡張・インストールに

要Haskell

・構文が似てる

Page 14: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

構文解析に強い言語 Haskell

プログラミングはS式で表現される自然言語はS式(左記)も表現される

こういうS式みたいのをHaskellだとかんたんに構文解析できる(Parsing)

右はオードリー・タンさん(台湾のIT相)Haskellを使って、Perlという言語のコンパイラを中学生の時に書いた。

(コンパイラは人間の書いたプログラムを構文解析して機械語に翻訳するもの)

"[([],ROOT) ["" [([0],S) ["" [([0,0],NP) ["" ([0,0,0],PRP) (It)]],"" [([0,1],VP) ["" ([0,1,0],VBZ) (is),"" [([0,1,1],VP) ["" ([0,1,1,0],VBN) (based),"" [([0,1,1,1],PP) ["" ([0,1,1,1,0],IN) (on),"" [([0,1,1,1,1],NP"" [([0,1,1,1,1,1],PP) ["" ([0,1,1,1,1,1,0],IN) (between),"" [([0,1,1,1,1,1,1],NP)]]]]]]]]]]],"" ([0,2],.) (.)]]]]"

(1 + (3 * 4))は、(+ 1 (* 3 4))と書ける

(f x (g y z)) みんな関数

Page 15: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

外部ライブラリの利用

英文 日本語文

文字列

Z

外部

Haskell内部

Stanford Mecab

parser

S式形態素解析修正

意味論

形態素解析器・Stanford parser(英文)

・Mecab(日本語文)

S式(Lispの式)

名詞、動詞、前置詞等を特定

情報科学では最重要概念関数はS式で表現できる文章もS式で表現できる

外部ライブラリの結果修正(後述)高度なA.I.(意味論)

ガジェット 高度なA.I.

Data.List

Page 16: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

HaskellでGUI

定番がないGUI。大別すると以下の2つ

1.他言語の定番ライブラリのラッパー

Gtk, Qt …

2.FRP

(Functional Reactive Programming)Javascriptコードを吐いたりする(AltJS)

ガジェットの実行速度を考慮して今回は最初は1をやる最初は2でやっていたが、描画が遅かった。自分では解決できなかった。

Page 17: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

HaskellでGUI – Gtk2hs

Gtk2(C言語)のラッパーであるGtk2hsを利用

チュートリアルが充実(書籍・Web)

Page 18: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

Functional Reactive Programming

ロボティクス

Excel

Elm

ある変数変化が、他の変数の変化を惹起するのを、関数で表現

税率 0.1

価格 価格(税込み)

300 330

500 550

7000 7700

y1

y2

y2 = f (y 1)

インパルス

y2はy1に従属

意識されないが有名なのはExcel

ロボティクスやGUIにも応用されている。

Page 19: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

勉強会で扱うガジェット

・シンタクスハイライトにヒントを得た

・速読が通用しない系の文書に有効

教科書、論文、公文書、図鑑

Page 20: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「一例としての有価証券報告書」

Page 21: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「一例としての有価証券報告書」

Page 22: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

勉強会で扱うガジェット

・シンタクスハイライトにヒントを得た

・速読が通用しない系の文書に有効

教科書、論文、公文書、図鑑

・名詞句の特定がとくに重要

Page 23: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「名詞句単位での着色?何ぞ?」

・技書博は 技術書を頒布される方のみサークル出展いただけます。・出展者は各自の良識の範囲で技術を定義し、自らがもつ技術を共有する場としてご利用ください。・ここでの技術とは、出展者の方が技術であると信じるものであれば分野を問いません。・多くの参加者が望むような内容でなくとも、あなたが強く推したいと思う技術をぜひお持ちください。・また技術を受け取ったエンジニアにとって実りのあるものであることを価値基準としてください。・著しく秩序を欠いた内容でない限り、運営事務局では出展に際して個別の判断や制限は行いません。・私たち運営事務局は、エンジニアによるアウトプットを推進し、知識の共有によってより良いエンジニアコミュニティを築き、また参加される皆さんが共に成長することを望んでいます

Page 24: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「名詞句単位での着色?何ぞ?」

・技書博は 技術書を頒布される方のみサークル出展いただけます。・出展者は各自の良識の範囲で技術を定義し、自らがもつ技術を共有する場としてご利用ください。・ここでの技術とは、出展者の方が技術であると信じるものであれば分野を問いません。・多くの参加者が望むような内容でなくとも、あなたが強く推したいと思う技術をぜひお持ちください。・また技術を受け取ったエンジニアにとって実りのあるものであることを価値基準としてください。・著しく秩序を欠いた内容でない限り、運営事務局では出展に際して個別の判断や制限は行いません。・私たち運営事務局は、エンジニアによるアウトプットを推進し、知識の共有によってより良いエンジニアコミュニティを築き、また参加される皆さんが共に成長することを望んでいます

Page 25: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「名詞句単位での着色?何ぞ?」

名詞句=指示代名詞(「それ」)で置き換え可能単位

・技書博は 技術書を頒布される方のみサークル出展いただけます。・出展者は各自の良識の範囲で技術を定義し、自らがもつ技術を共有する場としてご利用ください。・ここでの技術とは、出展者の方が技術であると信じるものであれば分野を問いません。・多くの参加者が望むような内容でなくとも、あなたが強く推したいと思う技術をぜひお持ちください。・また技術を受け取ったエンジニアにとって実りのあるものであることを価値基準としてください。・著しく秩序を欠いた内容でない限り、運営事務局では出展に際して個別の判断や制限は行いません。・私たち運営事務局は、エンジニアによるアウトプットを推進し、知識の共有によってより良いエンジニアコミュニティを築き、また参加される皆さんが共に成長することを望んでいます

Page 26: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「名詞句単位での着色?何ぞ?」

名詞句=指示代名詞(「それ」)で置き換え可能単位

資料作成時に意識すると、なにか見えてきます。

・技書博は それ のみ それ いただけます。・出展者は それ で技術を定義し、 それ を それ としてご利用ください。・ここでの技術とは、出展者の方が それ であれば分野を問いません。・多くの参加者が望むような内容でなくとも、 それ をぜひお持ちください。・また技術を受け取ったエンジニアにとって それ を価値基準としてください。・ それ でない限り、運営事務局では出展に際して個別の判断や制限は行いません。・私たち運営事務局は、 それ を推進し、それ によってより それ をを築き、また参加される皆さんが それ を望んでいます

Page 27: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「圏論とかが使えそうな予感」"[([],ROOT) ["" [([0],S) ["" [([0,0],NP) ["" ([0,0,0],PRP) (It)]],"" [([0,1],VP) ["" ([0,1,0],VBZ) (is),"" [([0,1,1],VP) ["" ([0,1,1,0],VBN) (based),"" [([0,1,1,1],PP) ["" ([0,1,1,1,0],IN) (on),"" [([0,1,1,1,1],NP) ["" [([0,1,1,1,1,0],NP) ["" ([0,1,1,1,1,0,0],DT) (a),"" [([0,1,1,1,1,0,1],ADJP) ["" ([0,1,1,1,1,0,1,0],RB) (recently),"" ([0,1,1,1,1,0,1,1],VBN) (discovered)]],"" ([0,1,1,1,1,0,2],NN) (connection)]],"" [([0,1,1,1,1,1],PP) ["" ([0,1,1,1,1,1,0],IN) (between),"" [([0,1,1,1,1,1,1],NP) ["" ([0,1,1,1,1,1,1,0],JJ) (homotopy),"" ([0,1,1,1,1,1,1,1],NN) (theory),"" ([0,1,1,1,1,1,1,2],CC) (and),"" ([0,1,1,1,1,1,1,3],NN) (type),"" ([0,1,1,1,1,1,1,4],NN) (theory)]]]]]]]]]]]],"" ([0,2],.) (.)]]]]"

(0,(([],ROOT),Nothing))(1,(([0],S),Nothing))(2,(([0,0],NP),Nothing))(3,(([0,0,0],PRP),Just "It"))(4,(([0,1],VP),Nothing))(5,(([0,1,0],VBZ),Just "is"))(6,(([0,1,1],VP),Nothing))(7,(([0,1,1,0],VBN),Just "based"))(8,(([0,1,1,1],PP),Nothing))(9,(([0,1,1,1,0],IN),Just "on"))(10,(([0,1,1,1,1],NP),Nothing))(11,(([0,1,1,1,1,0],NP),Nothing))(12,(([0,1,1,1,1,0,0],DT),Just "a"))(13,(([0,1,1,1,1,0,1],ADJP),Nothing))(14,(([0,1,1,1,1,0,1,0],RB),Just "recently"))(15,(([0,1,1,1,1,0,1,1],VBN),Just "discovered"))(16,(([0,1,1,1,1,0,2],NN),Just "connection"))(17,(([0,1,1,1,1,1],PP),Nothing))(18,(([0,1,1,1,1,1,0],IN),Just "between"))(19,(([0,1,1,1,1,1,1],NP),Nothing))(20,(([0,1,1,1,1,1,1,0],JJ),Just "homotopy"))(21,(([0,1,1,1,1,1,1,1],NN),Just "theory"))(22,(([0,1,1,1,1,1,1,2],CC),Just "and"))(23,(([0,1,1,1,1,1,1,3],NN),Just "type"))(24,(([0,1,1,1,1,1,1,4],NN),Just "theory"))(25,(([0,2],.),Just "."))

忘却関手?(圏論の概念)

脱構造

Page 28: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「圏論とかが使えそうな予感」"[([],ROOT) ["" [([0],S) ["" [([0,0],NP) ["" ([0,0,0],PRP) (It)]],"" [([0,1],VP) ["" ([0,1,0],VBZ) (is),"" [([0,1,1],VP) ["" ([0,1,1,0],VBN) (based),"" [([0,1,1,1],PP) ["" ([0,1,1,1,0],IN) (on),"" [([0,1,1,1,1],NP) ["" [([0,1,1,1,1,0],NP) ["" ([0,1,1,1,1,0,0],DT) (a),"" [([0,1,1,1,1,0,1],ADJP) ["" ([0,1,1,1,1,0,1,0],RB) (recently),"" ([0,1,1,1,1,0,1,1],VBN) (discovered)]],"" ([0,1,1,1,1,0,2],NN) (connection)]],"" [([0,1,1,1,1,1],PP) ["" ([0,1,1,1,1,1,0],IN) (between),"" [([0,1,1,1,1,1,1],NP) ["" ([0,1,1,1,1,1,1,0],JJ) (homotopy),"" ([0,1,1,1,1,1,1,1],NN) (theory),"" ([0,1,1,1,1,1,1,2],CC) (and),"" ([0,1,1,1,1,1,1,3],NN) (type),"" ([0,1,1,1,1,1,1,4],NN) (theory)]]]]]]]]]]]],"" ([0,2],.) (.)]]]]"

Propositional

Equality

(not judgmental)

"[([],ROOT) ["" [([0],S) ["" [([0,0],NP) ["" ([0,0,0],PRP) (It)]],"" [([0,1],VP) ["" ([0,1,0],VBZ) (is),"" [([0,1,1],VP) ["" ([0,1,1,0],VBN) (based),"" [([0,1,1,1],PP) ["" ([0,1,1,1,0],IN) (on),"" [([0,1,1,1,1],NP"" [([0,1,1,1,1,1],PP) ["" ([0,1,1,1,1,1,0],IN) (between),"" [([0,1,1,1,1,1,1],NP)]]]]]]]]]]],"" ([0,2],.) (.)]]]]"

縮約

Page 29: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

“Ologs: A categorical framework for knowledge representation”David Spivak

名詞句(Object) それ以外(述部等) (Arrow)

A child is a person, which has as parents a pair (w, m) where w is a woman and m is a man, which yields, via the value of w, a woman.

「圏論とかが使えそうな予感」

Page 30: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「初心者向け言語 – Haskell」

1.何の調理法?

2.何が材料?

3.何がどう組み合わさる?

【ヒント】代入を考える。

Page 31: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

「初心者向け言語 – Haskell」

1.何の調理法?

2.何が材料?

3.何がどう組み合わさる?

【ヒント】代入を考える。

【解説】C言語は鍋とか皿の大きさ、状態を考える。細かいことがやれる。でも(だから)難しい。代入もあまり使わない。

最近は鍋や皿が大きくなっている。初心者は鍋や皿があふれてから考えればいいかと。

実はHaskellもCっぽく書ける(ガジェット(GUI)作成時に多用)

Haskellが最初の言語な初心者(現状はユニークな存在、常識を覆したい)

Haskell Curry

Page 32: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

まとめ(勉強会のプラン)

文字列parser

S式

形態素解析修正

意味論

ガジェット

高度なA.I.Data.List

It is based on a recently discovered connection between homotopy theory and type theory.

"[([],ROOT) ["" [([0],S) ["" [([0,0],NP) ["" ([0,0,0],PRP) (It)]],"" [([0,1],VP) ["" ([0,1,0],VBZ) (is),"" [([0,1,1],VP) ["" ([0,1,1,0],VBN) (based),"" [([0,1,1,1],PP) ["" ([0,1,1,1,0],IN) (on),"" [([0,1,1,1,1],NP) ["" [([0,1,1,1,1,0],NP) ["" ([0,1,1,1,1,0,0],DT) (a),"" [([0,1,1,1,1,0,1],ADJP) ["" ([0,1,1,1,1,0,1,0],RB) (recently),"" ([0,1,1,1,1,0,1,1],VBN) (discovered)]],"" ([0,1,1,1,1,0,2],NN) (connection)]],"" [([0,1,1,1,1,1],PP) ["" ([0,1,1,1,1,1,0],IN) (between),"" [([0,1,1,1,1,1,1],NP) ["" ([0,1,1,1,1,1,1,0],JJ) (homotopy),"" ([0,1,1,1,1,1,1,1],NN) (theory),"" ([0,1,1,1,1,1,1,2],CC) (and),"" ([0,1,1,1,1,1,1,3],NN) (type),"" ([0,1,1,1,1,1,1,4],NN) (theory)]]]]]]]]]]]],"" ([0,2],.) (.)]]]]"

内容 Haskellっぽいこと

Data.Listの関数

基本文法、型、高階関数、ラムダ式、スコープ等

S式のParser作成と操作

再帰、モナド、データ型(型クラスとか)、(圏論)

GUIIORef, 並列・並行プログラミング

Page 33: Haskellでつくる自然言語処理ガジェット€¦ · Data.Listの関数 基本文法、型、高階関数、 ラムダ式、スコープ等 S式のParser作成 と操作 再帰、モナド、

第二部 環境構築

https://polymony.net/2020/01/26/next/

当日、VSCodeに慣れている方が多かったので、次回以降はVSCode + HIEで行こうと思います。

以下のHPを参考にして環境構築してみてください。