01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
<http://d.hatena.ne.jp/okamoto7/20070219#p2>
問題とそれを解くためのアルゴリズムが分離されていない。
あたかも「私はDPマッチングが何を計算するものか知らないが、便利そうなので使った」と主張してるようにしか思えない。
「○○を距離として定義し、それを計算するためにDPマッチングを用いた」と言うべき。
もちろん、DPマッチングが正しいアルゴリズムであることに基づいて、DPマッチングで計算されるものとして例えば編集距離を定義しても数学的には間違った態度だとは思わないが、それは上で述べたような議論を理解した前提で行なえるものである。
アルゴリズムの正しい使いかた
「距離Rを定義する」
「ある種の性質を満たす距離の計算をするには、DPマッチングが効果的である」
「距離Rはその性質を満たす」
計算すべきものが明確に定義できる場合は、正しい使いかたをすべき。
アルゴリズムの間違った使いかた
「DPマッチングが距離の計算によく使われている」
「DPマッチングで計算できる距離にはある条件がある」、
「その条件を満たす距離のひとつである、距離Rを使うことにした」
計算すべきものが明確に定義できない場合は、
似たような問題に対して使われていて、
実用的に計算できることが分かっているアルゴリズムをとりあえず使ってみる。
http://d.hatena.ne.jp/lurker/20070126/1169740979
cd //IPアドレス/ディレクトリ名
cd //MACHINE_NAME
もいけます。
<http://d.hatena.ne.jp/odz/20070212/1171345311>
これに気づかないのはけっこう危険ですね。
int cmp(const int *a, const int *b) { return *a - *b; }たとえば INT_MIN - INT_MIN はオーバーフローにより 0 でない値をとる。
#include <vector> #include <iostream> using namespace std; int main() { vector<vector<double> > table(2, vector<double>(2)); table[0][0] = 0.1; table[0][1] = 0.2; table[1][0] = 0.3; table[1][1] = 0.4; for ( vector<vector<double> >::iterator i = table.begin(), e = table.end(); i != e; ++i ) { for ( vector<double>::iterator j = i->begin(), f = i->end(); j != f; ++j ) { cout << *j << endl; } } }
gnuplot> plot "<(perl -e'print map { $_=$_%2; qq{$_\n} } (0..10)')" w l
関係ない話から。
segmentation といいつつ、文字や文よりも統計処理に向いている単位を探すというのがタスク。
たぶん segmentation / 分割 / 区切り という用語はふさわしくないけれど、
惰性で使っている。
過去の人が使っているから…
確率分割済みコーパス上で
N-gram カウントの期待値を効率的に計算できればほぼ終わり。
A 0.3 B 0.2 C 0.9 B 0.2 C 0.9
なら、
E[ # A B C B C ] = 1 * 0.3 0.2 0.9 0.2 0.9
E[ # A BC BC ] = 1 * 0.3 0.8 0.9 0.8 0.9
のように。
perl -Mstrict -MWWW::2ch -e'my $bbs=WWW::2ch->new(url => $ARGV[0], cache=>q{/tmp/www2ch-cache}); $bbs->load_setting; $bbs->load_subject; print map $_->url."\n", $bbs->subject->threads' http://academy5.2ch.net/gengo/ | xargs wget -w 1 -m
<http://www.cs.wisc.edu/~jerryzhu/>
Semi-supervised learning 専門家。
NLPよりでもある。
文字区切りと形態素区切りと文区切りがあることを仮定する。
文字単位から結合を開始する。
文末文字と次の文の文頭文字は cannot link
隣り合ってない文字同士は cannot link
発表技法 成果物をまねするのではなく工程をまねする
1.概要
発表は聴衆を対象にして演説や視覚媒体を用いる伝達である.
・発表には構造がある
・口で話す伝達である.文章で伝えるのと違う.
・発表の作業を工程として理解する
2.分析
発表は時間が軸である.空間が軸の文章とは違う.
・調査の出力を発表へ入力する
・400〜450音節/分という標準に従う
・調査の成果を洗い出す
3.設計
・粗筋を設計する.前置きは1スライドだけにする
・話題や話題群の性質に合う媒体を選択する
・スライド一覧で見直す
4.作成
・話題を,選んだ媒体の表現に具体化する
・話題を体言止めの話題文にする
・補足文は演説にまかせる
5.演説作文
発表は大勢へ一方的に伝える.返答がある会話と違って,話しの質や長さの欠陥の自己チェックが必要だ.
・敬語は使わない
・演説作文(speech writing)という技法を使う
・演説原稿ができれば時間は守れる
6.想定質疑応答作文
・即時性の要求される質疑応答も練習できる
・結論先行,反論の接続句,補足文3〜4行にする
・就職面接・FAQ作文にも科学的技法がある
7.練習
発表は人前で実演する.録画と違い事前練習が必要.
・時間測定,録音再生はコンピュータでできる
・「アー」「マー」「エート」を簡単に直す.
・視線交わしや身振りの練習をする
8.発表の実施
・外出着という万能の服装
・他人の発表を視聴し,質問する
・時間を把握して,予定時間に終わらせる
Gaussian Process は関数空間上の確率変数の一種。
#! /usr/bin/env perl use strict; use warnings; use Math::Random qw/:all/; my @xs = map { ($_/30) } (0..20); # 関数への入力値列 my $n = scalar @xs; my @v = map { my $x=$_; [map {exp -1/2*( ($x-$_)**2 )} @xs]} @xs; # カーネル #my @v = map { [map 1, @xs] } @xs; my @m = ((0)x$n); print map join(qq{\n}, @$_).qq{\n\n}, random_multivariate_normal(2, @m, @v); # 2個の出力値列が得られる。各列は入力値列に対応する。
random_multivariate_normal(N, mean_vector, covariance_matrix)
で、N 個のサンプルが帰ってくる。
mean_vector, covariance_matrix は配列へのリファレンスではなく、配列である必要がある。
perl -M'Math::Random qw/:all/' -e'print map join(qq{\t}, map {int($_ * 2) } @$_)."\n", random_multivariate_normal(100000,@m=(0,0),@v=([1,0],[0,1]))' | sort -g | uniq -c
インストール時、su していないと make install が通らなかった。
look Math::Random
して Makefile の /usr を ${HOME} に書き換えるとインストールできた。
<http://www.amazon.co.jp/dp/4873111080>
文字コード関係の些事は意外につらいので。
研究室で購入すべき本だと思う。
英語話者が増えつつある現状を踏まえると、原書
http://www.amazon.com/CJKV-Information-Processing-Ken-Lunde/dp/1565922247
の方がいいかも。
amazon.com レビューに「コードテーブル多すぎ。ある程度知ってる人は読む価値なし」とも書かれていたので、
書店か図書館でチェックしてからにしますが。
<http://www.aifb.uni-karlsruhe.de/Lehre/Winter2006-07/AIA/invertedFiles.pdf>
転置インデクスまとめ
<http://www.nesugi.net/hiki/?swig%A4%CE%BB%C8%A4%A4%CA%FD%A4%CE%A5%E1%A5%E2%BD%F1%A4%AD>
1. moduleにしたいプログラムのsource(*.cppとか)を持ってくる
2. cppファイル毎に*.iを書く ← これがswig語
3. swigコマンドで*.iを各スクリプト言語用のwrapper(c++で書かれてる)に変換
4. Makefile.PLやextconf.rbのような、スクリプト言語用のMakefileの元になるファイルを書く
5. 通常のモジュールと同じようにmakeする
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2009-02-01 00:57
Powered by chalow