Hatena::ブログ(Diary)

西尾泰和のはてなダイアリー

2017-04-09

最近Scrapboxを使っています

最近はScrapboxを主に使っています。

Scrapboxで作成日付をタグに入れて新規ページ作成する方法 - organize-ideas - Scrapbox

Scrapboxで文章オンリーのページを作った際に余白を有効活用する - organize-ideas - Scrapbox

前々からそろそろはてなダイアリーはobsoleteなのでどこへ移行しようかなと考えていたのですが、はてなブログ、Qiita、Mediumなどと比べて、Scrapboxは割とグッと来ています。

2015-02-01

インターネットからの情報収集と連想検索の機能をつけた

彼> この会話で何が起きて欲しいですか?

僕> URL指定でインターネット上のコンテンツを読み込む機能をつけたのでそれのデモンストレーション

彼> そのURL指定は、何のようですか?

僕> http://d.hatena.ne.jp/nishiohirokazu/20150126/1422276973

彼> 「新機能を解説していたら新しい世界を目指すことになった実験ログ - 西尾泰和のはてなダイアリー」を読み込み、142件のキーフレーズを抽出しました。

僕> さらに、そこまでの会話で得られたキーワードの集合を使って、与えられたコーパスの中から連想検索する機能をつけた

彼> あなたはその会話をどう知るのですか?

僕> 連想

彼>

ハッカーの遺言状──竹内郁雄の徒然苔第4回:コンピュータの中の妖怪
1338 ユーザ:93,質問:1,視点:1,自分:1,プログラム:0
エンジニアがイノベーションを実現するための7ステップ──中土井僚×西尾泰和、U理論で未来から学ぶ方法を解き明かす
511 新し:41,自分:32,知識:12,何:6,世界:3
「早く帰っても結果を出せる?!」──育休で生活者視点を得た『ゼクシィ』編集長が語るヒット連発の秘訣とは?
478 自分:34,時間:21,新し:14,視点:14,知識:5
「自分でやったほうが早い」でチームは滅ぶ
430 自分:45,質問:40,視点:11,時間:2
「働く」と「暮らす」を地元で繋ぐ ──子育てママによる「働き方を変える」チームづくり 
400 新し:35,自分:30,入力:9,視点:8,質問:5
6人のインタビューで分かったメリット、デメリット──エンジニアにとっての「資格試験」を考える(まとめ編)
377 知識:49,自分:31,何:4,分野:3,プログラム:3
「主流から外れた自分」が会社で生き残るには? TBSラジオ 黒幕プロデューサーの文化系仕事観
360 自分:66,新し:9,世界:8,視点:4,理解:2
U理論はエンジニアの学び方を変えられるか?――中土井僚×西尾泰和、過去の枠組みにとらわれないイノベーションのプロセスを考える
350 新し:30,自分:30,視点:19,何:4,世界:4
インターンシップ先は共働き子育て家庭! ──罪悪感のない育児支援が“働き方”を変える
331 自分:59,新し:10,視点:10,時間:4,プログラム:4
NewsPicksとサイボウズ式の新たな取り組み、9月に始めます
329 新し:21,理解:14,コメント:12,視点:10,自分:9

僕> 今はコーパスがサイボウズ式の記事だけだけど、いずれ増やす

彼> そのコーパスは、どこにありますか?

僕> ローカルにある。近いうちにインターネット上から収集したデータもコーパスに入れるようにする。

2014-06-06

「word2vecによる自然言語処理」を出版しました

オライリー・ジャパンから「word2vecによる自然言語処理」という電子書籍を出版しました。予定外のドタバタがあってブログで紹介するのが遅くなってしまいましたが、その間にオライリーのEbook Store Sales Rankingでは1位になっていました。

word2vecは2013年に論文が出たばかりの新しい技術です。色々な方がブログで取り上げていて、興味をもった方も多いと思います。知らない方のためにいくつかリンクを紹介しておきます:

本書の目標は、読者のみなさんがこういうことをできるようになることです。1章でまずは使ってみるところから始め、2章で色々なデータ(コーパス)を使う方法を、実際に使ったソースコードも紹介しつつ、具体的に解説しています。例に上がっているのは、TwitterはてなダイアリーFacebook、電子辞書(岩波の理化学辞典・生物学辞典)、電子書籍(スキャン+OCRで作ったPDF、元からPDFのもの)、Wikipediaです。

3章以降では「なぜword2vecが生まれたか」「何の役に立つのか」「どんな弱点があるのか」を解説しています。

また、付録ではword2vecの結果を可視化するスクリプトを紹介し、そこで使われている主成分分析のメリット・デメリットについて解説しています。このスクリプトを使うと例えば以下のような図を作ることができます。

f:id:nishiohirokazu:20140606005140p:image

プログラミング言語の名前と、データベースの名前と、オペレーティングシステムの名前が混ざっていますが、だいたい3つにわかれているのが見て取れるかと思います。人間はどれがプログラミング言語でどれがデータベースなのかは教えていないのですが、word2vecは与えられた文章から「これは似た意味の単語だな」と判断して近い位置に配置しているわけです。

本書を読んで、わかりづらいところや気になる点などがありましたらぜひお気兼ねなくご連絡ください。

2013-04-04

BESOM ver.2.0を描いてみた

先日の言語処理学会第19回年次大会(NLP2013)で招待講演されていた一杉先生のBESOMですが、UStreamで配信が始まったので早速見てみました。see: BESOM(ビーソム)ブログ Ustream 配信開始「脳は計算機科学者に解明されるのを待っている」

それでさっそく論文リストから「大脳皮質のアルゴリズムBESOM Ver.2.0」などを読み始めたのですけども、けっこう理解に手間取ってしまいました。ようやく少しわかってきて、理解の確認のために絵を描いたのでシェアしておきます。

離散変数のベイジアンネット

f:id:nishiohirokazu:20130404161957p:image

まずBESOMでは脳内にベイジアンネットがあるというモデルです。ここでは左図のように確率変数xに親が3つ、子が3つあるようなベイジアンネットを考えて見ることにします。(この時点ですでにわからない人はまずPRML8章「グラフィカルモデル」を読むこと)

中図で濃い色の部分にズームインしてみましょう。BESOMでは確率変数が離散値を取ると仮定しているので、一つの確率変数は取りうる値の種類(図では3)個のユニットの集まりで表現されます。

ユニットは脳内では何に相当するか

f:id:nishiohirokazu:20130404162725p:image

左図のようにxの中の1個のユニット(小さい丸)に注目してズームインしてみましょう。この「ユニット」を僕は当初ニューロンのことだと思っていたのですけどそれは勘違いでした。これが大脳皮質の6層モデルの1つのカラムになります。ミニカラムになる、と言ってもいいのかな?これは少し自信なし。

ユニット間の結合と大脳皮質の領野間結合

f:id:nishiohirokazu:20130404163026p:image

ユニット間の結合に注目してみると、これが大脳皮質の領野間の結合に相当します。

近似Belief Revisionアルゴリズムの式との対応

f:id:nishiohirokazu:20130404163236p:image

プレゼンの中で使われていた領野間の結合の図では、下位レイヤーから正規化係数のZも渡ってくるように書かれていましたが、式を見る限りでは渡ってきていません。逆に図には書かれていないρが式には現れています。このミスマッチがどういうことかはよくわかっていません。

→追記:プレゼンスライド中の近似確率伝播アルゴリズムではBESOM ver. 2.0で紹介されているものを比べると「BESOM ver. 2.0ではλが2つ出てくるが、スライドでは1つのlになっている」「BESOM ver. 2.0での大文字Zの他に、スライドの側では小文字zが導入されていて、それが上位領野に伝搬されている」ということがわかりました。

続き

f:id:nishiohirokazu:20130404163407p:image

一般に上位領野や下位領野は複数個ありえるので、κやλも複数個になりえます。λを集計したものも(添字が違うとはいえ)λで表現されているのでややこしい。計算が進んでρが求まります。

ここから先の図は書いていないですがρは確率変数Xを表現しているユニットのうちの1つにつき1つ存在するので、Xを表現している全ユニットについて足しあわせて正規化する回路が入って、その出力がBEL(x)になります。

おまけ

はてなダイアリーが画像を勝手に小さくするので、ここの図が全部入った、A4でプリントアウトできるPDFを置いときました https://dl.dropbox.com/u/370621/BESOM_print.pdf

あ、そうそう、信念伝搬は積和アルゴリズムの特別な場合とみなしてよい、とPRMLのP. 117に書いてあるので、Belief Revisionはmax-sumの特別な場合とみなして良いのだと思います。

一昨年にネタで途中まで作った「脳神経系をモチーフにした言語Neuronyを作りました」ですけど、同じような感じでBESOMのモデルを記述する言語を作ると面白いのではないかと思っています。将来的にはもちろん「その言語で記述したネットワークをコンパイルするとFPGAでハードウェア的に回路が組まれる」とかね。

2012-05-12

作りたいもの:はてなダイアリーのクローラ

増井さんの作りたいものリストを作ろうというスライドを見て「確かに『いつかやる』リストに入れてるだけじゃ発展しないから、公開しても問題ないものは公開したらいいなぁ」と思ったのでやってみました。

背景

僕は今まで10年以上Web上での日記をつけ続けているが、いろいろな理由で使うものは変わってきた。今ざっと思い出せるだけでKENTのCGI、PukiWiki、MovableType、Zope、COREBlog、tDiary、Blogger…。はてなダイアリーは今調べてみたら2007年から5年間も使っている。珍しく長く続いている。

しかし、今後5年10年と使い続けるだろうか?いままでなんだかんだで使うものが変わってきたことを考えると、いずれ他のサービスor自前CMSに乗り換える可能性は低くないだろう。で、やめる際にはこのはてなダイアリー上のコンテンツを静的なHTMLにしたりしたくなるだろうな。むしろ、自分の書いたコンテンツが他人のサーバ上にしかないって現状はあんまりよいものじゃないな。まだやめるつもりはないけど今のうちから定期的にクロールして手元に保存しておいたらいいんじゃないかな。

wgetで?いやいや、それは無理

「Web上のコンテンツをクロールして静的HTMLとして保存する」というとすぐに思いつくのはwget -rを使う方法だろう。だけど、はてなダイアリーの場合それを使いづらい。

僕のはてなダイアリーはd.hatena.ne.jp/nishiohirokazuに置かれている。じゃあその記事に貼られている画像は?おっとはてなフォトライフだからf.hatena.ne.jpだ。ドメインから違う。一時期はてなフォトライフに置くのを面倒に思ってGyazoを使っていたりする。その2つは間違いなく使っているが、他に使っていないか自信がない。じゃあ「外部ドメインに置かれていても画像だけはダウンロードする」ってことでOKか?むむむ、OKかどうか自身が持てない。

キレイにしたい

さらに言えば、単にはてなダイアリーのHTMLを静的にGETしただけだと色々汚い。

  • はてなキーワードへのリンクがいっぱい入っている。取り除きたい。
  • シンタックスハイライトは便利に使ってきたけど、これspanでクラスを指定しているだけなので対応するCSSがないと綺麗な色にならない。しかしそのCSSはたぶんはてなの著作物で、勝手に僕のサイトに置くことはできないだろう。

まあでもこれはクロールした後の工程として切り分けるべきか。

結局何が必要なのか

  • はてなダイアリーをクロールする
  • リンクを何でもかんでも辿るのではなく指定したエントリーから指定したエントリーまでの間を「次のエントリー」リンクをたどって取っていく
  • 外向きのリンクはどのページからどこへのリンクが貼られていたか、AでかIMGでか、などを記録していく
  • 集計結果を見て画像とかをどうするか考える。画像の他に対処しないといけないものがないか考える。

まあキレイにしたいとか色々あるけどそれは保留してスモールスタートにしたほうがいいだろうな。