見えないメッセージを読む力

誤り訂正符号と、冗長性がメッセージを伝送エラーから守る方法を理解する。

  • #error detection
  • #error correction
  • #parity check
  • #hamming distance
  • #redundancy

「このメッセージ、何か変じゃない?」

陸が由紀に見せたのは、ノイズまみれのテキストファイルだった。

「確かに。でも、なんとなく意味が分かる」由紀が画面を覗き込む。

葵が興味深そうに近づいた。「人間の脳は優秀なエラー訂正装置だ」

「エラー訂正?」

「情報を送受信するとき、必ずノイズが混入する。でも、冗長性があれば、元のメッセージを復元できる」

陸が首をひねった。「冗長性って?」

「余分な情報。例えば、『こんにちは』を送るとき、『こんにちは』だけだと、一文字でも壊れたら分からなくなる。でも『こんにちは、元気ですか?こんにちは』なら、一部が壊れても推測できる」

「繰り返すんだ」

「それも一つの方法。でも、もっと賢い方法がある」葵がホワイトボードに向かった。

「パリティチェック。最も単純な誤り検出だ」

葵は0と1のビット列を書いた。

「1011。この4ビットに、1の個数が偶数になるように、もう1ビット追加する。1が3個だから、1を加えて10111」

「5ビット目が検査ビット?」

「そう。受信側で1の個数を数える。奇数なら、エラーが発生したと分かる」

由紀が尋ねた。「でも、どのビットが間違ってるか分からないよね?」

「鋭い。パリティチェックは検出はできるが、訂正はできない」

陸が考え込んだ。「じゃあ、訂正するには?」

「ハミング符号」葵が新しい図を描いた。「複数のパリティビットを賢く配置する。そうすると、どのビットが壊れたかまで特定できる」

「すごい!」

「ハミング距離という概念がある。二つのビット列で、何ビット違うかを数える」

葵は例を示した。

「1010と1001は、2ビット違う。ハミング距離は2だ」

「距離が大きいほど、区別しやすい?」

「正解。符号語同士のハミング距離を大きくすれば、ノイズで少し壊れても、どの符号語だったか判別できる」

由紀が目を輝かせた。「だから、情報に冗長性を持たせるんですね」

「まさに。効率と信頼性のトレードオフだ」

陸がノートに書き込んだ。「でも、冗長性が多すぎると、送信に時間がかかる」

「そこがエンジニアリングの難しさ。必要最小限の冗長性で、最大の訂正能力を持たせる」

葵が続けた。「現代の通信では、リードソロモン符号やターボ符号など、高度な誤り訂正符号が使われている」

「CDやDVDも?」

「そう。傷がついても音楽が再生できるのは、強力な誤り訂正のおかげだ」

由紀がふと思いついた。「人間の会話も、ある意味エラー訂正してる?」

「面白い視点だ」葵が認めた。「言葉の冗長性、文脈、声の抑揚。全てが誤り訂正に役立つ」

陸が笑った。「だから、俺が言葉を間違えても、みんな意味を理解してくれるのか」

「陸のノイズレベルは高めだけどね」由紀が冗談を言った。

「でも、それが自然言語の強さだ」葵が補足した。「完璧な通信路は存在しない。だから、冗長性と文脈で補う」

陸が画面のノイズまみれのテキストを見返した。「見えないメッセージを読む力、これが情報理論の本質なのか」

「情報は、ノイズの中から掘り出すもの」葵が静かに言った。

「でも、完全には復元できないこともある?」由紀が尋ねた。

「もちろん。シャノンの通信路符号化定理は、通信路容量を超えると、どんな符号でも誤りは避けられないと教える」

「限界があるんですね」

「限界を知ることが、最適な設計への第一歩だ」

窓の外では、無数の電波が飛び交っている。それぞれが、見えないエラー訂正符号を纏いながら、情報を運び続けている。

「次は、もっと複雑な符号を学ぼうか」葵が提案した。

由紀と陸は頷いた。ノイズの海の中から、真実を掬い取る旅は続く。