サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
masatoi.hateblo.jp
WebスクレイピングとはWebから情報を自動的に集めてくるクローラを実装するということである。これを実現するにはHTTPクライアントとHTMLパーサ、そしてパースされた木構造から必要な情報を探索、抽出するセレクタがあればいい。Common Lispにはそれぞれに複数のライブラリがあるが、今回はHTTPクライアントにDexador、HTML/XMLパーサにPlump、CSSセレクタにCLSSを使う。これらのライブラリは全てQuicklispから入る。 (ql:quickload :dexador) (ql:quickload :plump) (ql:quickload :clss) 例としてこのロイターの記事 堅調地合い、1万8000円へ戻りを試す展開に=来週の東京株式市場 を分析してみる。 HTTPクライアント: Dexador まずHTTPクライアントでHTMLを取ってくる。これにはde
Lisp Advent Calendar 2016参加記事 ここ数年ディープラーニングの出現をきっかけにAIが再び盛り上がっているので、いよいよLispの復権があるかと思いきや、ないので(泣)、多少なりともLispに興味を持ってもらえるように、LispとAIの関係について私見を述べておこうと思う。Lispといっても色々あるが、この記事では主にCommon Lispの話になる。 Lispというとどうしても過去の記号処理的AIと結びつけられてしまい、機械学習を駆使するような現代のAIでは役に立たないように思われがちなのだが、これは大体誤解である。少なくともCommon Lispは現代的なAI開発に適した特徴を備えている。まず、AI実装のためのプログラミング言語に必要とされる特徴は何なのかを明らかにするために、AIの歴史から考えてみたい。 AIの歴史 初期の記号処理的AI(以降は記号AIと呼ぶ)
lem: https://github.com/cxxxr/lem lemはCommon Lispで書かれたEmacsライクなエディタで、拡張もCommon Lispで書ける。cl-charmsというncursesのCFFIラッパーを使っている。 特に何もしてなくても起動が速いが、lemをロードした状態で処理系のコアイメージをダンプすることでさらに速くなる。 インストール 次のroswellのリリースからpath通しておくだけで、ros install cxxxr/lem でlemが使えるようになる。勝った。— Masatoshi SANO (@snmsts) 2016年6月8日 とのことなのでroswellさえ入っていれば導入は簡単。 ros install cxxxr/lemこうすると、 ~/.roswell/local-projects/cxxxr/lem 以下にコードがダウンロード
昨今の機械学習界隈では何故かPythonやRのライブラリが多いのだが、Common Lispも高速なネイティブコンパイラを持ち、C/C++のライブラリも呼べるので、機械学習にも問題なく使える。 実際にCommon Lispで実装された深層学習を可能とするライブラリにMGLがあり、GithubでMITライセンスで公開されている。そんなわけで、先月のLispmeetup #39でMGLを紹介してきた。これがそのときのスライド。 Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング from Satoshi imai MGLの作者Gábor Melis氏はKaggleの2014年の機械学習コンペHiggs Boson Machine Learning Challengeの優勝者で、今はDeepMindにいるらしい。このコンペのコードが公開されているが、MG
オレオレユーティリティ集からプロット周りを切り出したのでgithubに置いてみる。 https://github.com/masatoi/clgplot なおGnuplot4を必要とする。macで動くかは分からない。昔に書いたものなのでUIOPじゃなくてexternal-programを使っているところがアレである。 Gnuplotのフロントとしては似たようなのが沢山ある気がするが、Gnuplotを非同期に呼び出してコマンドを一つずつ渡していくというよりも、一気にGnuplotスクリプトに書き出してデータとともにGnuplotに渡すということがしたかったように思う。具体的には、リスト等の中身を/tmp/gnuplot-tmp.datに出力して、/tmp/gnuplot-tmp.gpにGnuplotスクリプトを書き出してpersistオプション付きでgnuplotを呼び出す。 インストール
去年買ってはいたが積読状態だったこのディープラーニングの青い本。 深層学習 (機械学習プロフェッショナルシリーズ) 作者: 岡谷貴之出版社/メーカー: 講談社発売日: 2015/04/08メディア: 単行本(ソフトカバー)この商品を含むブログ (13件) を見る正月ヒマを持て余してたので、箱根駅伝を眺めながら、この本を見て多層ニューラルネットを実装してみた。大体4章くらいまでの基本的な内容になる。実装言語は例によってCommon Lispである。 全ソースコードはGistに置いておく。(nn.lisp) 変数名などは本の中の数式と大体対応している。 データ構造 とりあえず一つのレイヤーの入力と出力の関係を記述するための構造体を用意する。ネットワーク全体はレイヤーのベクトルということにすればよろしい。 (defstruct layer in-dim ; 入力次元 out-dim ; 出力次元
この記事はLisp Advent Calendar 2015 の10日目として書かれました。 ハッカーと画家 コンピュータ時代の創造者たち 作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01/01メディア: 単行本購入: 109人 クリック: 4,884回この商品を含むブログ (582件) を見る ハッカーと画家で有名なポール・グレアム氏が、ジョン・マッカーシーの1960年のLispのオリジナル論文をCommon Lispで解説した記事を書いていることに最近になって気付いた。 The Roots of Lisp (www.paulgraham.com) (ソースコード) かなり古い記事で(2002年)、内容はWikipediaの純LISPの項目と重なるところも多い。しかしながら現在でも非常に重要な記事なので、自分の勉強のためにも訳す
オンライン機械学習を買ったので、書いてあるアルゴリズムから線形識別器をいくつか試してみた。オンライン学習とは、データを一括処理するバッチ学習に対して、個々のデータを逐次処理する学習手法のこと。オンライン学習だと以下のようなうれしいことがある。 実装が簡単: 基本的に実装は1ステップ毎の処理を実装するだけでほとんど終わる(スッキリ!) リアルタイム処理に組込める: その時点までの観測を元にした学習結果が常に予測に使えるので、学習しながら予測もしなければならない応用に向いている 収束が速く、データの性質が徐々に変化しても追従できる: これはリアルタイム処理に対して使うにはいい性質だが、偏ったデータやノイズに弱いという諸刃の剣でもある(そこで最適化対象に正則化項を入れるなどして悪影響を減らそうとする)。 データを一つ一つ処理するので、オンライン学習の計算量はデータ数に対して線形に増加する。バッチ
HHKが前提だけど日本語キーボードでも一応使えると思う 新たな修飾キーModeSwitchを入れることで、ホームポジション周辺3列にできるだけ全てのキーを詰め込もうとしている SKK使いなので小指の負担を減らすために右手のShiftはホームポジションの小指の位置に。そもそもコロンやセミコロンはそれほど多用するキーではないのに何故ホームポジションにあるのか謎である。 Lisperが特に多用する括弧はModeSwitchとの組合せでSとDの位置に割り当てる 数字もModeSwitchとの組合せでテンキーっぽく配列 左利きなのでModeSwitchを右手に割り当てて、左手を動かすようになっている 上の配列を実現するには、 ~/.Xmodmap に次のように書けばいい。 ! <注意> ! modifiers のキーリピートを解除しておかないとsynergyとかでおかしなことになる. ! $ xse
(Lisp Advent Calendar 2013 18日目の記事) しばしばLispの特徴として「プログラムを生成するプログラムを書ける」ということが言われるわけだが、普通の人はこれを聞いてどう解釈したらよいものか悩むと思う。字面通りに受け取ると、あたかも勝手に世の中の問題を把握してそれを解決するプログラムを出力してくれる真の人工知能のようなものを想像してしまうかもしれない。しかし残念ながら、そうした所謂「強いAI」は人工知能研究における聖杯であり、いまだにSFの範疇から出るものではない。 LISPerの言う「プログラムを生成するプログラム」とは普通もっと限定された意味である。そしてそれはほとんどの場合マクロによって実現される。 evalとマクロ Lispではプログラムとデータが同じ形をしているので、それまでプログラムとして扱っていたものを突如データとみなして操作することができる。逆に
十年以上買い集めてきたので、流石に本がたまってきたと感じていた今日このごろ。優に100冊くらいはあるだろうか。 しかも大半は技術書なのでかさばる。かさばる本は出し入れや持ち運びが大変なので結局読まなくなる傾向にあった。 読む機会を増やすには、手軽に持ち運べる状態にすることが肝要と思い、スキャンして電子化することにした。 機材をレンタル 今後新たに買う本は極力電子版を買うとして、今ある紙の本をスキャンできればそれでいい。そのためスキャナや裁断機はレンタルでかまわない。レンタル業者にはスキャレンを選んだ。この場合スキャナはPFU ScanSnap S1500になる。 レンタルの申し込みの際には現住所を証明する書類が必要になる。自分の場合はNTTの請求書をデジカメで撮影して申し込みフォームで添付した。 料金は送料を含めると一週間レンタルするコースで7000円程度。PayPalからクレジットカード
最近なんとなく音声合成関係の記事を調べてるのでこのエントリに追加していく Wikipediaの「音声合成」のページ VOCALOIDの分析らしいけど基本から説明してくれるページ サーベイ論文 隠れマルコフモデルの音声合成への応用(PDF注意) 既にある合成音声ソフトでメジャーなのは、音声の破片を繋ぎ合わせるタイプで、音声の破片の数が多ければ多いほどより自然な合成音声ができる。VOCALOID2まではDIPHONE(音と音のつながり部分、子音+母音など)を音声の破片として集めていたそうだ。日本語の場合DIPHONE合成に必要な破片の数は500個くらいで、英語の場合2500個くらいらしい。最近VOCALOID3が出たが、DIPHONEより音と音のつながり部分の範囲を広げてTRIPHONE合成と呼ばれるものになっている。DIPHONEの場合は二つの組合せだったが、TRIPHONEは子音+母音+子
Common Lispには全てのウィジェットがCLOSオブジェクトという強力なGUI環境の仕様CLIM(Common Lisp Interface Manager)というのがあって、商用の実装Allegro CLIMやオープンソースの実装McCLIMがある。しかしMcCLIMはかなり大きいライブラリなのでインストールやロードが大変だったりする。 一方、Tcl/TkをLispから呼ぶライブラリとしてLtkがあり、こっちはMcCLIMよりかなり軽量なGUIライブラリだ。コアとなるファイルはltk.lispの一つしかない。Tcl/TkはUNIXだろうとMacだろうとWindowsだろうと使えるので、CLISPみたいなポータブルな処理系と組み合わせると色んなところで使えそう。 お盆は山形に行っていたのだけど、ネット環境もないので、甥っ子たちと遊ぶ用のオセロ盤をLtkでつくってみた。ちゃんと置けると
Clojureのバージョンアップのせいか、どうも前に他のサイトで見た方法がうまくいかなくなってしまった。 試行錯誤してみた結果とりあえずちゃんと動くようになったので、色々とアヤシイところはあるもののまとめてみる。 SLIMEのインストール Emacs Lispは~/elisp以下にインストールするものとする。まずはGitを利用して最新版をダウンロードする。87MBもあるのでけっこう時間かかる。SBCLは既に入っているものとする。 $ cd ~/elisp $ git clone git://git.boinkor.net/slime.git~/.emacsに以下のように書く ;; 処理系の指定 (setq inferior-lisp-program "sbcl") ;; SLIMEへのロードパスを通す (add-to-list 'load-path "~/elisp/slime/") (a
LISPの真実を読んでたら最後に出てきたので、かなり古い記事だけれども、Eric Kidd氏のWhy Ruby is an acceptable LISPを訳してみました。まつもとさんによる反応もあり、そのエントリの中で原文はほぼ要約されています。 一年前、私はRubyに注目してはいたものの、それを無視することにした。RubyはPythonほどポピュラーではないし、LISPほど強力というわけでもない。なのに何故気にかけなければならないというのか。 もちろん、これらの評価基準は考えなおすこともできる。もしRubyがLISPよりもポピュラーで、Pythonよりも強力だったらどうなるだろうか?*1 それはRubyを興味深いものにするに足るのではないか? この疑問に答える前に、LISPを強力たらしめているものは何なのかを定義しておくべきだろう。Paul GrahamはLISPの美徳について雄弁に語
フランスのどこぞの研究機関で開発されたらしいCommon Lispベースの音楽作曲,プログラミング環境であるOpenMusicをコンパイルしようと試みる. 最新バージョンはLispWorksでしかビルドできないそうで,旧バージョンのSBCL用のソースがあったので取ってくる. http://recherche.ircam.fr/equipes/repmus/OpenMusic/ sbcl-1.0.34 + clg-0.93 でコンパイルに失敗する とりあえずclg(CL上でgtkを使うためのライブラリ)に依存しているので取ってくる.asdf-installには対応していないようだ. asdファイルがあちこちにちらばっているけど~/.sbcl/systems/以下にまとめてシンボリックリンクを張る. (asdf:oos 'asdf:load-op :gtk) なぜか関数sb-alien::sh
risupu - notes on Lisp and programming http://risupu.blogspot.com/2009/05/cffi-vs-uffi-performance.htmlの訳 Common LispからCの関数を呼び出すための機構は、基本的に各処理系に依存する。例えばCMUCLやSBCLは相互に互換性のあるFFI (foreign function interface)を持っている。しかしながら、これだとCのライブラリを利用する、処理系に依存しない可搬性を備えたソフトウェアを書くことはできない。 そこで、処理系非依存のFFIを実装したパッケージがある。それがCFFIとUFFIである。UFFIはCFFIより若干古い。CFFIにはUFFIを仮定して書かれたコードをCFFIで処理するための互換レイヤーを持っており、CFFI-UFFI-COMPATと呼ばれる。A
http:/www.mail-archive.com/cl-faq@lispniks.com/msg00120.html 関数, マクロ, スペシャルフォーム 関数が呼ばれるとき, その引数は全部評価される. 関数はfuncallされたりapplyされたりできる. 誰でも関数を書くことができる(プログラマでもコンパイラ作者でも). マクロが呼ばれるとき, その引数は一つも評価されないが, 代わりにそれらの引数は直接マクロにリスト(とかその他なんでも)として渡される. マクロはfuncallされたりapplyされたりはできない. 誰でもマクロを書くことができる(プログラマでもコンパイラ作者でも). スペシャルフォームが呼ばれるとき, その引数は問題となっているスペシャルフォームに依存して評価されたりされなかったりする. 例えば, ifは第一引数を評価し, その結果に依存して第二引数か第三引数
Lisp Advent Calendar 2018参加記事 去る2018年12月10日に港区芝はポケットチェンジにてShibuya.lisp運営で集まって今年の振り返りと来年の活動方針について相談したのでまとめます。 今年やったこと、達成できたこと がんばらない これは昨年1月に「Shibuya.lispの今後を考える会」で前運営からの引き継ぎにあたって基本方針として出てきたものなんですが、月例のLispmeetupはあくまで場を提供し続けることが重要であって、運営の負担は極力少なくして、とにかく続けられるようにしようというものがありました。 その辺の方針については以下の記事に詳しく触れられています。 4年間続いたShibuya.lispのLispMeetUp なぜShibuya.lispは成功し続けているのか ここにも書かれていますが、会場を安定的に確保できたことは定期開催する上で非常に
どうしてプログラマに・・・プログラムが書けないのか?を読んでいて出てきたので出展の一つを訳してみた。Separating Programming Sheep from Non-Programming Goatsの和訳。 プログラミングというものには向き不向きが強く出るということはわりと知られていると思うが、このエントリではプログラミングができるかできないかは比較的簡単なテストによって、プログラミングの訓練を始める前の段階で分かると主張している。どうしてプログラマに・・・プログラムが書けないのか?では、そもそもこの事前テストをパスしていないような人達までプログラマとして応募してくると言っており、その判定法として有名なFizzBuzz問題を挙げている。 追記(2019/2/28) 注意: なおこの論文はしばらく前に著者の一人によって撤回されたようです Camels and humps: a r
SchemeとCommon Lispってどう違うんですか? 名前が違うよね。 いや、そういうことじゃなく… 一番違うのは名前空間だろうか。Common Lispは関数と変数で名前空間が違うから。あとは継続の有無か。 名前空間が違うってどういう意味です? 名前を保管している場所が異なるということ。Common Lispでは変数の名前は変数でまとめてあるし、関数の名前は関数でまとめて記憶している。君だってスズキという魚と鈴木という人とを同じ方法で記憶しているわけではないでしょう?頭の中でその2つは切り分けられているって感じない? うううむ。じゃあSchemeでは変数と関数は同じ名前空間を使うんですか? そうそう。だからSchemeではhogeという関数が定義されているときにhogeという変数を定義しようとすると関数の方は上書きされてしまう。一方でCommon Lispでは同じ名前の関数と変数が
このページを最初にブックマークしてみませんか?
『masatoi’s blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く