How to Read Text: 高速に文章を読む方法

ToC

はじめに

ぼくは文章を読むのが速い(らしい).具体的な例を挙げると,フルサイズのハリー・ポッターを20-30分以内に読むことができるし,一般的な小説であれば15分程度で読み終える.

小学校中学年まで「それが普通の速さである」と思っていたのだが,親や友人に指摘されてからその速さを自覚した.そして,自分が無意識に実行してきた「読み方」をあえて意識的に分析してみると,いくつかの特徴があることに気づいた.

ここではその特徴(いわば:読み方)を紹介する 1

基本原則

基本的には脳内の並列性を可能な限り活用することが重要である.しかし,前後に依存関係が存在する同一のプロセス(e.g., 意味理解)を並列化することは(少なくともぼくには)出来ない.よって,それ以外に並列化可能な領域を活用する.

CSの人間に伝えるとするなら,文章読解プロセスをn段のパイプラインとして捉えることが重要になってくる - つまり,「脳の特定の領域は一度に一つの処理を処理」しつつも,スループットを最大化する.

1. 文章のTokenize

まず,現在の視点から文章をTokenizeする.ここでいうTokenizeとは,文章を単語や接続詞などの最小単位に分解することである.ここで重要なのは,文章を「1文」としてすぐに理解しようとするのではなく,あくまでもTokenの集合として捉えることにある.CPUでいうところのInstruction Fetchだけを実行する.そして,Tokenize後のTokenは一時的な記憶領域に投入しておく(順序を保つため,FIFOのような構造を思い浮かべて欲しい). このプロセスは機械的に実行できる.特に日本語のような言語では,ひらがな・カタカナ・漢字・アルファベットが混在しているため,意識するまでもなく - いわば「自然」にTokenizeできる.

このプロセスは文章の音読を避ける目的もあるのではないかと思う.文章を読む時,それを音読するかのように脳内再生する人間は多いらしい.しかし,これでは「音読」の速度に文章読解の速度が依存してしまう.これを避けるのは自然なことのように思える.

2. Tokenの意味理解

次に,Tokenの意味理解を行う.前述のプロセスで既に文章はTokenizeしてあるため,意味理解に必要な脳のリソースは少ない.既存の知識に基づいて意味を解釈し反芻する. また,文章の強度によって一度に解釈するTokenの数を調整する必要がある(これも脳が勝手に実行するだろう).強度の高い文章は解釈単位を小さくし,強度の低い文章は解釈単位を大きくする.

「そのTokenの指す対象が文章の前後に依存する」場合は,該当Tokenに対して「後から参照する」旨のLabelを付与しておき,一時的な領域に記憶しておく.雑に言えばSymbol Tableを作って後から解決するのと同じだ.

3. 意味理解の修正

意味が未解決のTokenを逐次解決していく.セクションタイトルそのままの意味だ.

並列化

最初に述べたように,1-3のプロセスは並列化できる(厳密に言うと3: 意味理解の修正は2: Tokenの意味理解に依存するが,3をDaemonのように常駐させておくことでほぼ無視できる). さらに,これらはパイプラインを構築する.つまり,1-3のプロセスを1サイクルとして捉えた時,Cyclei+1Cycle_{i+1}Processn{Process_n}を実行中にCycleiCycle_{i}Processn+1{Process_{n+1}}を実行できる.

所感

各プロセスの実行速度を最適化するにつれ,全体としてのスループットも向上していく.「文章を読む」というフワッとした行為自体を高速化するのではなく,より具体的な1-3の各プロセスを高速化する,というのは比較的解しやすいように思える. 個人的には,小学校入学前→小学校低学年にかけてこれを強く実感した.

これを読んでいる皆様も是非やってみて欲しい.脳のリソースを可能な限り利用する手法のため,認知負荷が高いし,利用しながら全く別のことを実行するのは慣れがいる.とはいえ,いずれ無意識下にできるよう成長するだろう.

それでは.

Footnotes

  1. 再現性は保証できないので,一切のクレームは受け付けていないことに留意せよ

Share: