5D Library › 声音说服力、韵律信息论与人际生理同步 · English

第二章 韵律的信息论:均匀信息密度与停顿的力量

惊奇度

香农的信息论给了我们一个衡量「一个词带来多少新信息」的方法:一个词在上下文中越出乎意料,它携带的信息就越多。这个量叫作惊奇度:

surprisal(wt)=−log⁡2P(wt∣w<t)\text{surprisal}(w_t) = -\log_2 P(w_t \mid w_{<t})

单位是比特。在「我们的获客成本下降了百分之——」之后,「九十」比「十」更出乎意料,因此携带更多的信息。

均匀信息密度

利维与耶格提出均匀信息密度假说:说话者倾向于让信息在时间上分布得比较均匀,避免某一处信息过于密集而超出听者的处理能力,也避免某一处过于稀疏而浪费时间 (Levy and Jaeger 2007; Jaeger 2010)。一种实现方式是在高信息的位置放慢速度、加入停顿,或者用更完整的句法形式;在低信息的位置则加快、省略。

证据

停顿出现在哪里。 戈德曼-艾斯勒早在 1958 年就发现,自然言语中的停顿往往出现在可预测性较低的词之前 (Goldman-Eisler 1958)。不同语言,相近的信息速率。 库佩等人比较了 17 种语言的朗读语料,发现各语言每个音节携带的信息量差别很大,但信息密度高的语言语速较慢,信息密度低的语言语速较快,结果是信息传输速率都集中在每秒约 39 比特附近 (Coupé et al. 2019)。这提示人类言语可能在一个大致恒定的信息速率附近运作。

一句提案的信息流

推导

一句提案「十八个月里,我们每位顾客的获取成本下降了百分之九十」(程序中用英文词)。每个词在上下文中的概率是示意性的听者模型,不是训练出来的语言模型。比较三种说法:平稳的每秒 4.5 个音节;匆忙的每秒 6.5 个音节;以及平稳语速下,在关键词「九十」前停顿 0.6 秒、把关键词拉长 30%。

# Surprisal and information rate along one sentence of a pitch. Surprisal of a word is
# -log2 P(word | preceding words). The probabilities below are an ILLUSTRATIVE listener model (how
# expected each word is at that point), not output of a trained language model.
# Uniform Information Density (Levy & Jaeger 2007; Jaeger 2010): speakers tend to spread information
# evenly; lengthening or pausing before improbable words is one phonetic way to do so (an extension).
import math
WORDS = [("in", 0.20, 1), ("eighteen", 0.02, 2), ("months", 0.60, 1), ("our", 0.30, 1), ("cost", 0.10, 1),
         ("per", 0.50, 1), ("customer", 0.40, 3), ("fell", 0.15, 1), ("by", 0.60, 1),
         ("ninety", 0.004, 2), ("percent", 0.80, 2)]        # (word, probability in context, syllables)
KEY = "ninety"

def timeline(rate_syl_s, pause_before_key=0.0, key_stretch=1.0):
    t, rows = 0.0, []
    for w, p, syl in WORDS:
        if w == KEY: t += pause_before_key
        dur = syl / rate_syl_s * (key_stretch if w == KEY else 1.0)
        rows.append((w, -math.log2(p), t, dur)); t += dur
    return rows, t

total_bits = sum(-math.log2(p) for _, p, _ in WORDS)
print(f"total surprisal of the sentence: {total_bits:.1f} bits; key word '{KEY}': {-math.log2(0.004):.1f} bits")
for label, args in (("steady, 4.5 syllables/s", (4.5,)), ("rushed, 6.5 syllables/s", (6.5,)),
                    ("paced: 4.5 syl/s, 0.6 s pause before key word, key word 30 % longer", (4.5, 0.6, 1.3))):
    rows, T = timeline(*args)
    peak = max(bits / dur for _, bits, _, dur in rows)
    key = [bits / dur for w, bits, _, dur in rows if w == KEY][0]
    print(f"{label}:\n   {T:.2f} s, mean {total_bits / T:.1f} bits/s, peak {peak:.1f} bits/s (the key word: {key:.1f} bits/s)")
# total surprisal of the sentence: 27.8 bits; key word 'ninety': 8.0 bits
# steady, 4.5 syllables/s:
#    3.56 s, mean 7.8 bits/s, peak 17.9 bits/s (the key word: 17.9 bits/s)
# rushed, 6.5 syllables/s:
#    2.46 s, mean 11.3 bits/s, peak 25.9 bits/s (the key word: 25.9 bits/s)
# paced: 4.5 syl/s, 0.6 s pause before key word, key word 30 % longer:
#    4.29 s, mean 6.5 bits/s, peak 14.9 bits/s (the key word: 13.8 bits/s)
三种说法的信息速率随时间的变化。虚线是下一段程序中假定的听者处理能力(每秒 10 比特)。匆忙的说法在关键词处的信息速率最高;停顿与拉长使关键词的峰值降低。

整句话的惊奇度约为 28 比特,其中关键词「九十」一个词就占了 8 比特。平稳说出时,关键词处的瞬时信息速率约为每秒 18 比特;匆忙说出时升到每秒 26 比特;停顿并拉长后降到每秒 14 比特。

有限容量的听者

信息速率高本身不是问题;问题是听者能否跟上。下面这个模型把听者看作一个有处理上限的系统:信息到达得比它能处理的更快时,就在一个「待处理队列」中积压;一个词结束时如果队列积压很多,这个词就只能被部分编码。

推导

听者每秒最多处理 10 比特,积压超过 6 比特时新的信息几乎无法编码(两个数都是示意性的)。比较四种说法下关键词被编码的程度:平稳、匆忙、紧张(匆忙,再加上两个 0.3 秒的「呃」,第二个就在关键词之前),以及停顿加拉长。

# A limited-capacity listener (a model, not a measured law). Information arrives word by word (the
# surprisal of the previous program, spread evenly over each word's duration). The listener
# integrates it at most C bits per second; anything faster waits in a backlog. A word is encoded
# in proportion to how empty the backlog is when it ends: encoded = max(0, 1 - backlog / B).
# C = 10 bits/s and B = 6 bits are illustrative choices.
import math

# The sentence and delivery timings of the previous program, repeated so this one runs on its own.
WORDS = [("in", 0.20, 1), ("eighteen", 0.02, 2), ("months", 0.60, 1), ("our", 0.30, 1), ("cost", 0.10, 1),
         ("per", 0.50, 1), ("customer", 0.40, 3), ("fell", 0.15, 1), ("by", 0.60, 1),
         ("ninety", 0.004, 2), ("percent", 0.80, 2)]        # (word, probability in context, syllables)
KEY = "ninety"

def timeline(rate_syl_s, pause_before_key=0.0, key_stretch=1.0):
    t, rows = 0.0, []
    for w, p, syl in WORDS:
        if w == KEY: t += pause_before_key
        dur = syl / rate_syl_s * (key_stretch if w == KEY else 1.0)
        rows.append((w, -math.log2(p), t, dur)); t += dur
    return rows, t

C, B, DT = 10.0, 6.0, 0.001

def listen(words_timed, fillers=()):
    """words_timed: (word, bits, start, duration). fillers: list of (start, duration), 0 bits."""
    events = sorted([(s, d, b, w) for w, b, s, d in words_timed] + [(s, d, 0.0, "uh") for s, d in fillers])
    backlog, t, out = 0.0, 0.0, {}
    for start, dur, bits, w in events:
        while t < start:                       # silence: the backlog drains
            backlog = max(0.0, backlog - C * DT); t += DT
        steps = max(1, int(dur / DT))
        for _ in range(steps):
            backlog = max(0.0, backlog + bits / steps - C * DT); t += DT
        if w != "uh": out[w] = max(0.0, 1 - backlog / B)
    return out

def shift(rows, after_word, by):
    out, moved = [], False
    for w, b, s, d in rows:
        out.append((w, b, s + (by if moved else 0.0), d))
        if w == after_word: moved = True
    return out

steady, _ = timeline(4.5)
rushed, _ = timeline(6.5)
paced, _ = timeline(4.5, 0.6, 1.3)
# a nervous delivery: rushed, plus two 0.3 s fillers ('uh'), the second just before the key word
nervous = shift(shift(rushed, "our", 0.3), "by", 0.3)
fill = [(dict((w, s) for w, _, s, _ in nervous)["our"] - 0.3, 0.3), (dict((w, s) for w, _, s, _ in nervous)["ninety"] - 0.3, 0.3)]
print("delivery                              | key word encoded | mean over all words")
for label, rows, f in (("steady 4.5 syl/s", steady, ()), ("rushed 6.5 syl/s", rushed, ()),
                       ("nervous: rushed + 2 fillers", nervous, fill), ("paced: pause 0.6 s + key word longer", paced, ())):
    enc = listen(rows, f)
    print(f"{label:37s} | {enc[KEY]:16.0%} | {sum(enc.values()) / len(enc):18.0%}")
# delivery                              | key word encoded | mean over all words
# steady 4.5 syl/s                      |              41% |                90%
# rushed 6.5 syl/s                      |               0% |                53%
# nervous: rushed + 2 fillers           |              18% |                75%
# paced: pause 0.6 s + key word longer  |              63% |                92%

在这个模型中:

  • 平稳说出时,关键词被编码了约四成,全句平均约九成。
  • 匆忙说出时,关键词几乎完全没有被编码,全句平均也只有约一半:信息到达得太快,积压越来越多。
  • 停顿加拉长使关键词的编码提高到约六成,是四种说法中最高的。停顿让积压在关键词到来之前清空,拉长让关键词的信息分散在更长的时间里。
  • 一个值得注意的结果是:紧张的说法(匆忙加两个「呃」)比单纯的匆忙更好,关键词的编码从几乎为零提高到约两成。原因很简单:「呃」本身几乎不携带信息,它占用的 0.3 秒给了听者清空积压的时间,作用类似于一次停顿。

这个模型支持「在关键信息前停顿、放慢」的建议,但它也给「填充词导致信道过载」这种流行说法加上了限制。

证据

填充词并不只是有害。 科利等人记录听者的脑电,发现跟在「er」后面的词引起的 N400 效应(一个与词语预期程度相关的脑电成分)减弱,而且在之后的记忆测验中被记得更好 (Corley et al. 2007)。弗劳恩多夫与沃森发现,故事中带有填充停顿(「uh」)的情节点,比没有停顿或被咳嗽打断的情节点被记得更好 (Fraundorf and Watson 2011)。另一方面,布伦南与威廉斯发现,回答之前的填充词和停顿会让听者认为说话者对答案不那么有把握 (Brennan and Williams 1995)。

所以,填充词的作用是双重的:它像停顿一样给听者时间,提高了随后一个词的编码与记忆;同时它也可能传递「说话者不确定」的信号,降低听者对说话者把握程度的判断。安静的停顿也许能保留前一种好处而避免后一种代价,但这一点还需要直接的实验比较。

注

模型能说明什么。 这两段程序中的概率、处理上限和积压阈值都是示意性的,没有经过测量。它们说明了一种机制在逻辑上可以怎样运作:在信息高峰之前创造时间,可以帮助听者接收高峰处的信息。它们不能证明这就是听众实际的处理方式,也不能给出停顿的最佳长度。库佩等人的每秒 39 比特是语言层面在音节水平上的平均信息速率,与本模型中「词语惊奇度」的数值不能直接比较。

假说 · 尚未验证

安静停顿优于填充词假说(尚未确立)。在关键信息之前插入同样长度的安静停顿与填充词「呃」,两者对听众记住关键信息的帮助相近,但安静停顿使听众对说话者把握程度与可信度的评价更高。如果实验显示填充词对记忆的帮助明显大于安静停顿,或者两者在可信度评价上没有差别,这一假说就被削弱。

本章小结

用惊奇度衡量,一句话的信息往往集中在少数几个出乎意料的词上。均匀信息密度假说认为说话者倾向于把信息在时间上摊开,自然言语中的停顿也往往出现在低可预测性的词之前。一个有限容量的听者模型显示:匆忙会使关键信息几乎无法被编码,在关键词前停顿并拉长能明显改善;填充词也有类似停顿的作用,但它同时可能降低听者对说话者把握程度的判断。下一章讨论另一个韵律特征:句子结尾的音高走向。

参考文献

Brennan, Susan E., and Maurice Williams. 1995. “The Feeling of Another’s Knowing: Prosody and Filled Pauses as Cues to Listeners about the Metacognitive States of Speakers.” Journal of Memory and Language 34 (3): 383–98.
Corley, Martin, Lucy J. MacGregor, and David I. Donaldson. 2007. “It’s the Way That You, Er, Say It: Hesitations in Speech Affect Language Comprehension.” Cognition 105 (3): 658–68.
Coupé, Christophe, Yoon Mi Oh, Dan Dediu, and François Pellegrino. 2019. “Different Languages, Similar Encoding Efficiency: Comparable Information Rates Across the Human Communicative Niche.” Science Advances 5 (9): eaaw2594.
Fraundorf, Scott H., and Duane G. Watson. 2011. “The Disfluent Discourse: Effects of Filled Pauses on Recall.” Journal of Memory and Language 65 (2): 161–75.
Goldman-Eisler, Frieda. 1958. “Speech Production and the Predictability of Words in Context.” Quarterly Journal of Experimental Psychology 10 (2): 96–106.
Jaeger, T. Florian. 2010. “Redundancy and Reduction: Speakers Manage Syntactic Information Density.” Cognitive Psychology 61 (1): 23–62.
Levy, Roger, and T. Florian Jaeger. 2007. “Speakers Optimize Information Density Through Syntactic Reduction.” Advances in Neural Information Processing Systems 19, 849–56.

Fan, Y. (2026). Acoustic Persuasion, Prosodic Information Theory and Interpersonal Physiological Synchrony: Pitch Contours, Pause Entropy and Listener Autonomic Coupling in Public Speaking and Leadership [声音说服力、韵律信息论与人际生理同步] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23753267 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).