haya14busa

haya14busa’s memo

Implicit Learning 10/2

潜在学習(implicit learning)

Index

  • 課題依存性
  • 眼球運動の役割
  • 統計的規則性の潜在学習

課題依存性

実験1

女性(1こだけ性別の違う)の顔を見つけてもらい、向きを反応させる(アイデンティティー課題)

  • 条件
    • 位置変化条件
    • アイデンティティー変化条件

ランダム系列 -> パターン系列 -> ターゲット -> 刺激

予想結果

  • 学習が起きた場合 -> RTがテストで遅くなる
  • 起きなかった場合 -> RTはテストで変わらない

結果

  • 位置は学習されない
  • アイデンティティーが学習されていた

実験2

位置関連課題

結果

  • 位置は学習
  • アイデンティティーは学習されない

考察

  • ○ 課題に関連した情報のみが学習される

眼球運動の役割

Zhao et al., 2012 反復条件、ランダム条件

  • attentional guidance
  • internal selection

  • TL視覚探索

  • スパイダーウェブ

潜在学習におけるRTの短縮の原因

  • 眼球運動総距離は変わらない
  • サッカード数に差があり

目的

  • 潜在学習の生起に眼球運動が必要?

結果

眼球運動なしでも潜在学習は起きた

再認課題 眼球運動ありなしともにFalse alarmは減少,Hit率はチャンスレベル

c.f.

VMWare下のUbuntuとWindowsのファイル共有で/mnt/hgfsにフォルダが出ないときの対処法

VMWareでUbuntu入れました

その際、vmware-toolsにバグがあるっぽくて(?)/mnt/hgfs下に作ったWindowsから作ったSharedフォルダが表示されませんでした。

いろいろ解決策はありそうでしたが、一番手軽そうなやつをメモ

最初にvmware標準のvmware-toolsをアンインストールする必要あったかも

sudo apt-get install open-vm-tools
sudo mkdir /mnt/hgfs
sudo mount -t vmhgfs .host:/ /mnt/hgfs

linux – No /mnt/hgfs in Ubuntu guest under VMWare Fusion – Super User

sudo mount -t vmhgfs .host:/ /mnt/hgfsは起動するごとにやらなきゃだめなので自動化したほうが良さげ。あとたまに出来ない(?)ので再起動してもっかい打ってみたりすると表示されるかも[要出典]。

Link

デザイン見てやっぱStack Overflowって神サイトだなって思ったらSuper Userだったでござる

勉強になったね

Python,NLTKで自然言語処理

Install nltk

$ pip install nltk

wordnetのコーパスをPythonインタプリタからダウンロード

$ python
Python 2.7.5 (default, Jul 19 2013, 19:37:30)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> nltk.download()

MacならGUIの画面が起動するので適当に従ってダウンロード。

書き終わってから気づいたけど以下ナチュラルにsee()使ってます。代わりにdir()使うか、そもそも飛ばすか、便利なのでseeをインストールしましょう。

$ pip install see

~/.pythonstartup に

from see import see

を記述しておくと便利

dotfiles/.pythonstartup at master · haya14busa/dotfiles

Stemming and Lemmatisation

語幹化、見出し語化の前に、大文字・小文字を正規化しておく。(語幹化は大文字小文字混ざってても動くっぽいけどレンマ化は動かない)

>>> print 'Python'.lower()
python

Stemming

>>> from nltk import stem
>>> see(stem)
    help()                 .ISRIStemmer()         .LancasterStemmer()
    .PorterStemmer()       .RSLPStemmer()         .RegexpStemmer()
    .SnowballStemmer()     .StemmerI()            .WordNetLemmatizer()   .api
    .isri                  .lancaster             .porter
    .regexp                .rslp                  .snowball
    .wordnet
>>> stemmer = stem.PorterStemmer()
>>> stemmer.stem('dialogue')
'dialogu'
>>> stemmer2 = stem.LancasterStemmer()
>>> stemmer2.stem('dialogue')
'dialog'

PorterStemmerとLancasterStemmerでアルゴリズムが違うっぽい。

Lancasterのほうがアグレッシブ。

Porter: Most commonly used stemmer without a doubt, also one of the most gentle stemmers. One of the few stemmers that actually has Java support which is a plus, though it is also the most computationally intensive of the algorithms(Granted not by a very significant margin). It is also the oldest stemming algorithm by a large margin.

Lancaster: Very aggressive stemming algorithm, sometimes to a fault. With porter and snowball, the stemmed representations are usually fairly intuitive to a reader, not so with Lancaster, as many shorter words will become totally obfuscated. The fastest algorithm here, and will reduce your working set of words hugely, but if you want more distinction, not the tool you would want.

java – What are the major differences and benefits of Porter and Lancaster Stemming algorithms? – Stack Overflow

個人的にdialogueとdialogでstemが違うとつらいのでLancaster使ってみて、ミスが多いようならPorter使う予定。

他にもSnowballとかあるけど割愛

Lemmatisation

>>> from nltk import stem
>>> lemmatizer = stem.WordNetLemmatizer()
>>> lemmatizer.lemmatize('dialogs')
'dialog'
>>> lemmatizer.lemmatize('dialogues')
'dialogue'
>>> lemmatizer.lemmatize('cookings')
'cooking'
>>> lemmatizer.lemmatize('cooking', pos='v')
'cook'

Tokenization

Tokenization – Wikipedia, the free encyclopedia

>>> from nltk import tokenize
>>> see(tokenize)
    help()                    .BlanklineTokenizer()     .LineTokenizer()
    .PunktSentenceTokenizer()                           .PunktWordTokenizer()
    .RegexpTokenizer()        .SExprTokenizer()         .SpaceTokenizer()
    .TabTokenizer()           .TreebankWordTokenizer()  .WhitespaceTokenizer()
    .WordPunctTokenizer()     .api                      .blankline_tokenize()
    .line_tokenize()          .load()                   .punkt
    .regexp                   .regexp_tokenize()        .sent_tokenize()
    .sexpr                    .sexpr_tokenize()         .simple
    .treebank                 .util                     .word_tokenize()
    .wordpunct_tokenize()
>>> aio1 = 'He grinned and said, "I make lots of money.  On weekdays I receive
an average of 50 orders a day from all over the globe via the Internet."'

Sentence Tokenization

>>> tokenize.sent_tokenize(aio1)
['He grinned and said, "I make lots of money.', 'On weekdays I receive an average of 50 orders a day from all over the globe via the Internet.', '"']

Word Tokenization

>>> tokenize.word_tokenize(aio1)
['He', 'grinned', 'and', 'said', ',', '``', 'I', 'make', 'lots', 'of', 'money.', 'On', 'weekdays', 'I', 'receive', 'an', 'average', 'of', '50', 'orders', 'a', 'day', 'from', 'all', 'over', 'the', 'globe', 'via', 'the', 'Internet', '.', "''"]
>>> tokenize.wordpunct_tokenize(aio1)
['He', 'grinned', 'and', 'said', ',', '"', 'I', 'make', 'lots', 'of', 'money', '.', 'On', 'weekdays', 'I', 'receive', 'an', 'average', 'of', '50', 'orders', 'a', 'day', 'from', 'all', 'over', 'the', 'globe', 'via', 'the', 'Internet', '."']

Delete Stopwords

Stop words – Wikipedia, the free encyclopedia

>>> from nltk.corpus import stopwords
>>> stopset = set(stopwords.words('english')
... )
>>> stopset
set(['all', 'just', 'being', 'over', 'both', 'through', 'yourselves', 'its', 'before', 'herself', 'had', 'should', 'to', 'only', 'under', 'ours', 'has', 'do', 'them', 'his', 'very', 'they', 'not', 'during', 'now', 'him', 'nor', 'did', 'this', 'she', 'each', 'further', 'where', 'few', 'because', 'doing', 'some', 'are', 'our', 'ourselves', 'out', 'what', 'for', 'while', 'does', 'above', 'between', 't', 'be', 'we', 'who', 'were', 'here', 'hers', 'by', 'on', 'about', 'of', 'against', 's', 'or', 'own', 'into', 'yourself', 'down', 'your', 'from', 'her', 'their', 'there', 'been', 'whom', 'too', 'themselves', 'was', 'until', 'more', 'himself', 'that', 'but', 'don', 'with', 'than', 'those', 'he', 'me', 'myself', 'these', 'up', 'will', 'below', 'can', 'theirs', 'my', 'and', 'then', 'is', 'am', 'it', 'an', 'as', 'itself', 'at', 'have', 'in', 'any', 'if', 'again', 'no', 'when', 'same', 'how', 'other', 'which', 'you', 'after', 'most', 'such', 'why', 'a', 'off', 'i', 'yours', 'so', 'the', 'having', 'once'])
>>> aio1words = tokenize.wordpunct_tokenize(aio1)
>>> aio1words
['He', 'grinned', 'and', 'said', ',', '"', 'I', 'make', 'lots', 'of', 'money', '.', 'On', 'weekdays', 'I', 'receive', 'an', 'average', 'of', '50', 'orders', 'a', 'day', 'from', 'all', 'over', 'the', 'globe', 'via', 'the', 'Internet', '."']
>>> for word in aio1words:
...  if len(word) < 3 or word in stopset:
...   continue
...  print word
...
grinned
said
make
lots
money
weekdays
receive
average
orders
day
globe
via
Internet
====================
filter で
====================
>>> print filter(lambda w: len(w) > 2 and w not in stopset, aio1words)
['grinned', 'said', 'make', 'lots', 'money', 'weekdays', 'receive', 'average', 'orders', 'day', 'globe', 'via', 'Internet']

Links

Steven Bird,Ewan Klein,Edward Loper
オライリージャパン 2010-11-11
¥ 3,990
Steven Bird,Ewan Klein,Edward Loper
Oreilly & Associates Inc 2009-06-30
¥ 3,724

Vim-EasyMotionをforkされた拡張バージョンに変更する

追記: VAC2012でもっと詳しい紹介記事を書きました

Vim-Easymotionを拡張してカーソルを縦横無尽に楽々移動する « haya14busa

Vim-Easymotionが好き

僕がvimのプラグインを導入して、一番最初に感動したのはvim-easymotionでした[要出典]

特にvim触りたての頃なんてj連打で移動していたりなんかしてるので、カーソル移動系のプラグインは余計感動モノです。

そんなvim-easymotionを今でも使いまくってるのですが、少し不満な点、こんな機能あったら良くない?っていう点がありました。

  1. 移動先の候補がたくさんあって2回打たなければならないとき面倒くさい
    • この記事で解決
  2. カーソルより左(F)か右(f)かのどちらかでしかサーチできないけど、画面内に収まってる全範囲でサーチ出来るようにしたい。
    • この記事で解決
  3. Visualモードでのバグを是非fixしてほしい
    • 仕様かも。相対行使ってるから難しいとか?
  4. Insertモードでも使いたい()
    • 無理。しかも正直なくてもよい

2に関しては最初はH<Leader>fして、エスケープで中断されたらでカーソル位置を戻すvimscriptとか作ればいいのかなーとか考えてたりしたんだけど、そういえばForkされてるやつあるんじゃね?と思いつきGithubへ。

Githubで探す

Lokaltog/vim-easymotion

Githubのネットワークグラフで探してみると、案の定拡張機能付きのForkされたものがありました。

ただ多すぎてどれが一番いいかわからないorz

単純に一番最新のものを使うという手もあるけど、スターも付いてなかったのでそこそこスターついてて、拡張された奴を選びました。

supasorn/vim-easymotion

<Leader>sでforword-backword serchが出来る他、vlylで行選択や行単位のヤンクを便利にしてくれるというお節介機能付き。(vlとか使うのでやめて…)

またtwo-key comboとして、候補が多い時はじめから2つキーを表示してくれるようになります。

ということで.vimrc

.vimrc

" vim-easymotion
"------------------------------------
let g:EasyMotion_leader_key = ';'
let g:EasyMotion_keys='hjklasdgyuiopqwertnmzxcvb;:f'

hi link EasyMotionTarget ErrorMsg
hi link EasyMotionShade  Comment

" forked easymotion extention
let g:EasyMotion_special_select_line = 0
let g:EasyMotion_special_select_phrase = 0

let g:EasyMotion_leader_key = ';'

呼び出すキーを’;‘に変更.

let g:EasyMotion_keys='hjklasdgyuiopqwertnmzxcvb;:f'

晴れて最初から2つキーを表示してくれるようになったので、候補から打ちにくいキーは全面的に消してみる。

let g:EasyMotion_special_select_line = 0
let g:EasyMotion_special_select_phrase = 0

vlで行選択を楽にって言われてもそこまで便利にならないし、何よりvlとか普通に使うので機能をOFFに。

ドキュメントがFork元のものなので、ソース直接見ないとキーマップの変更の仕方とかわからないという罠。

ハイライトの設定も追加しなくてはならないのによくわかんないので保留…

すこしつまずきはあったもののこれで快適easymotion生活!

使いそうなコマンドまとめ

;f
カーソルより右側の任意の文字を検索
;F
カーソルより左側の任意の文字を検索
;s
画面内の任意の文字を検索(双方向)
;j
下方向に行移動
;k
上方向に行移動
;w
カーソルより右側の単語移動
;b
カーソルより左側の単語移動
;n
前方検索
;N
後方検索

GitでWordPressにPostしたいと思ったけど結局VimRepress導入した

GitでWPにPostしたくなった

最近Git使い出して、GitHubに気軽にコードとREADMEをpushしたりできて、こんなに便利だと記事をGitで管理して、出来ればgit push,または簡単なコマンドを打てばWordPressに投稿できるようにしたい!と思うのは必然ですよね?.

git pushはWordPress運用してるサーバーにgitがないとだめだし、そのままpushとかはできなさそうなのでXML_RPCプロトコルが使えそう

一応そもそもGitで作れるブログにするとかいう選択肢もあるのだけど、すでにWordPress使ってるし、テーマとかプラグイン便利なのであまり移行する気が起こらないのでとりあえず却下。

GitでWPにポスト?

「Git WordPress」で検索するとWordPressのテーマかプラグイン、またはそもそもWordPress本体をGitで管理する話ばっかりでノイズが酷かったけど一応なんとなくそれっぽいのは見つけました.

Posting To WordPress From Git | brool

ただ考えてみればタイトルやらタグやらつけるのも大変そうで、そもそも手を付ける前に次の策に移行しました…一応今からor今度やってみるかも(フラグ)

なぜそんな手を付ける前に移行したかというと、そういえばVimでWordPressにPostするとかいう記事をどっかで記憶があったから。ということでそっちを試してみる.

VimRepress

Install

.vimrc

NeoBundle 'pentie/VimRepress'

vim-scripts/VimRepressが公式だけど、開発止まっててforkされてるやつを導入.

記事書きながら,sousu/VimRepressもいいかもしれないと読んでて思ったけど、試してはいません.ローカルに一時保存出来る機能とかあるらしくて良さそう.

Settings

~/.vimpressrc

[Blog0]
blog_url = http://haya14busa.com
username = haya14busa
password = password
store_markdown = n

[Blog1]
blog_url = http://hogehoge.com
username = hogehoge

~/.vimpressrcにブログURLなどを保存.passwordはオプションで書かなかった場合その都度入力できる.

Markdown

VimRepressはMarkdownをサポートしてて

$ easy_install python-markdown2

or

$ pip install markdown2

すれば有効になる

ただ僕はWordPress › Markdown on Save Improved « WordPress Pluginsをすでに使ってました.こっちだとPHP Markdown Extraが使えること、また"EditFormat : HTMLかつMarkdown On Save Improvedをインストールした状態でMarkdown形式で書くと、ちゃんと変換されてPostできることを確認したことから、VimRepressのMarkdownは使ってません.

使い方

詳しくは:h vimpressか記事末尾のリンクがわかりやすい

余談だけど:h vimrepressじゃないところが辛かった.なぜプラグイン名と違うのか.

起動

  • :BlogListで記事一覧を見てEnterで編集画面
    • デフォルトでは最新の10記事表示.でもMoreでどんどん読める.
  • :BlogNewで新記事の編集画面

:BlogOpenもあるけどあまり使わなさそう.記事が大量にあって,昔の記事をurlから起動する時とかに使えそう?.

Edit

編集画面

"=========== Meta ============
"StrID : 
"Title : GitでWordPressにPostしたいと思ったけど結局VimRepress導入した
"Slug  : install-vimrepress
"Cats  : WordPress
"Tags  : wordpress, git, vim
"=============================
"EditType   : post
"EditFormat : HTML
"BlogAddr   : http://haya14busa.com

StrIDは自動で挿入されるので空白でOK.Slugも一応いらない.Cats(Category)はすでにカテゴリーが作られていないとダメっぽいです.Tagsは新しいものでもOK.VimRepressのMarkdown機能を使う場合はEditFormatをMarkdownに.

Preview

  • :BlogPreviw draftでブラウザが起動し、WordPressの下書きプレビュー
    • デフォルトの:BlogPreviw (local)だとローカルプレビューでCSS効いてなかったり、Markdown on save ImprovedでMarkdown対応している場合使い物にならない.
  • :BlogPreviw publishだと投稿してプレビューだけどそれプレビューじゃなくね?

Post and Save

  • :BlogSave (draft)で下書き保存
    • なお:wしても意味なし。癖でやっちゃうからVimRepressの編集画面ではaliasするとかしたい.Vimscript勉強したらできるかな?
  • :BlogSave publishで投稿!
    • または:BlogPreview publish

コンフリクトしてうざったい

.vimrc

nnoremap <CR> o<ESC>

インサートモードに入らずにEnterキーで改行を挿入出来るようにキーマップしてるとVimRePressの:BlogListから編集画面に飛ぶエンターの挙動とコンフリクトしてエラーがいっぱいでちゃう。一応動くけど。

VimRepress側の設定でなんとかしたいけどわからなかった.Help見る限り,keymap用の変数とかも用意されてないっぽいし[要出典]

結論:捗る

既存記事の編集とかも含め、管理画面にアクセスせずに投稿できるのがとても捗る.

ただ今まではブラウザで動くシンプルなエディタ「Darkroom.js」 « haya14busaを使ってブラウザ完結で記事書いたりして、アプリ間の移動がいらなかったり、iPadでも全く同じ方法で使えたりと、Darkroom-jsも捨てがたい.そもそもiPadではVimRepress使えないし、時と場合によって使い分ける所存.

(Darkroom-jsに対するアクションなくて寂しいのでぜひ見てやってください.)

Link

Repository

VimRepress

Other