跳轉到

2011 - Siri 語音助理#

案件摘要#

2011 年 10 月,Apple 在 iPhone 4S 發表會上推出 Siri——第一個走進億萬消費者口袋的語音對話助理。Siri 的本質是一條三段式管線:自動語音辨識(ASR)→ 意圖理解(NLU)→ 對話管理與執行。使用者說「提醒我明天早上八點打電話給媽媽」,機器要把它變成一行指令。其核心主張是:語音不只是輸入法,而是智慧介面——機器必須聽懂、理解、記住上下文並採取行動。這樁案件的偵探意義在於:它標誌了語音辨識技術史上 HMM → DNN 的轉折點——同一年,深度學習悄悄接管了隱藏三十年的聲學模型。

\[ \text{speech} \xrightarrow{\text{ASR}} \text{text} \xrightarrow{\text{NLU}} \text{intent} \xrightarrow{\text{DM}} \text{action} \]

前因 -- 為什麼會有這個案子#

  • 1966-ELIZA對話系統.md 用模式匹配扮演心理治療師,證明「對話介面」的魔力,但它不聽、不記、不行動。
  • HMM 稱霸三十年:1970–2010,語音辨識的聲學模型一直是隱馬可夫模型 \(p(o_t|s_t)\) + 高斯混合(GMM-HMM),在 DARPA 評測中錯誤率長期卡在 20–30%。
  • SRI International 的 2007 年:Siri 公司由 SRI International 從 CALO(Cognitive Agent that Learns and Organizes,DARPA 資助、Adam Cheyer 等人主持的五年個人助理計畫)分拆成立,2010 年被 Apple 收購。
  • iPhone 的動機:觸控螢幕之後,Apple 需要下一個介面革命;Steve Jobs 病重之際仍親自督軍,Siri 成為他生前最後一場發表會的主角。
  • 雲端運算成熟:語音辨識算力需求大,2010 年前後智慧型手機 + 3G + 雲端 API 的組合首次讓「手機說話、雲端理解」可行。
  • 命名的故事:Steve Jobs 想要更商標化的名字,但最終保留了「Siri」(挪威語意为「引領你走向勝利的美麗女子」)——Kittlaus 以其前同事的女兒命名。

線索與推理 -- 數學式、程式、理論#

第一條線索:聲學模型——HMM 的天花板#

經典 GMM-HMM 對每個音素狀態 \(s\) 建模觀測特徵(MFCC)的機率:

\[ p(o_t \mid s_t = s) = \sum_{k=1}^{K} \pi_k\, \mathcal{N}(o_t;\ \mu_k, \Sigma_k) \]

HMM 的結構是正確的(語音確實是時序的),但 GMM 的表達力太弱——它無法建模數千維特徵之間的複雜相關。三十年來研究者只能靠增加狀態與三元音(triphone)上下文硬撐,錯誤率卡關。

第二條線索:2011 年的轉折——DNN 接管聲學模型#

2011–2012 年,George Dahl、Geoffrey Hinton 等人(微軟與多倫多大學)證明:用深度神經網路取代 GMM 估計同樣的 HMM 狀態機率,錯誤率相對下降 20–30%:

\[ p(o_t \mid s_t = s) \approx \mathrm{DNN}_s(o_t) \]

DNN 與 HMM 的分工:HMM 負責時序對齊(哪個音素在哪一毫秒),DNN 負責「這一幀聽起來像什麼」。這條線索在 2011 年前後完成,Siri 正好搭上雲端部署,成為 DNN 語音的消費級應用。後續 2017-Transformer注意力機制.md 與端到端模型將徹底甩開 HMM。

值得注意的是時機的偵探味:Dahl 的 DNN-HMM 論文在 2011–2012 年才正式發表,Siri 上市時用的仍是較傳統的聲學模型——但轉折點已經發生,產品與論文在同一年交錯,正是「深度學習大爆炸卷」的兩個平行現場。

第三條線索:意圖理解——從文字到行動#

Siri 對 ASR 輸出的文字做統計句法解析,抽出一個意圖槽位(intent + slots)表示:

輸入語句 意圖 槽位
「提醒我明天 8 點打電話給媽媽」 CreateAlarm 時間=明天08:00, 動作=打電話, 對象=媽媽
「舊金山現在會下雨嗎」 GetWeather 地點=舊金山, 時間=now, 屬性=降雨
「下週二訂兩人位的餐廳」 BookRestaurant 時間=下週二, 人數=2
\[ \text{text} \rightarrow (\text{intent},\ \{(s_1, v_1), \dots, (s_n, v_n)\}) \]

解析器把口語的模糊性(「明天」相對日期)交給時間/地點推理模組處理——這是符號 NLP 的遺產,與 2011-Watson問答系統.md 的問題分析一脈相承。

意圖理解的統計血統:Siri 的解析器用的是 CALO 計畫累積的統計句法 + 槽位填充分類器,其思路與 1975-向量空間模型與TFIDF.md 之後的統計 NLP 一脈相承,但輸出從「文件排序」升級為「可執行的行動」。

第四條線索:對話管理——記住上下文#

Siri 的對話狀態機記住多輪指代:「打給她」中的「她」繼承上一輪的「媽媽」;資訊不足時主動追問(「要打給哪一位?」)。這讓 Siri 從「一問一答的查詢機」升級為對話系統——ELIZA 六十年前許下的諾言,第一次在口袋裡兌現。

對話管理的數學骨架是一個部分可觀測馬可夫決策過程(POMDP)——CALO 計畫的理論遺產:

\[ b_t(s') = \eta \sum_s \big[T(s,a,s')\, O(s',a,o)\, b_t(s)\big] \]

其中 \(b_t\) 是對話狀態的信念分布(使用者究竟想要什麼), \(o\) 是聽到的語音(有雜訊)。Siri 把 POMDP 的原則簡化成工程可用的狀態機 + 追問策略,但它確立了一個原則:對話是在不確定下的決策,不是模式匹配。

結案 -- 後果與影響#

  • 語音智能進入消費者口袋:Siri 讓億萬使用者第一次日常與 AI 對話,AI 從實驗室名詞變成隨身工具。
  • 引爆語音助理競賽:Google Now(2012)、Amazon Alexa(2014)、Microsoft Cortana(2014)相繼跟進,語音成為手機、音箱、汽車的標配介面。
  • HMM 時代落幕:DNN 聲學模型在 2011–2015 間全面取代 GMM-HMM;再由 2017-Transformer注意力機制.md、listen-attend-spell 等端到端模型收尾,語音辨識錯誤率降至接近人類水平。
  • 對話 AI 的起點:Siri 的 intent-slot 範式統治了對話系統十年,直到 2017-Transformer注意力機制.md 與 2018-BERT與GPT預訓練典範.md 的大語言模型用「直接生成」取代意圖分類——見「科學與歷史/人工智慧/」與「科學與歷史/計算語言學/」的對話智能相關檔案。
  • 伏筆:Siri 證明了「聽懂人話」的市場價值;當語音模型與語言模型在 Transformer 上合流(Whisper、GPT-4o 語音模式),對話智慧將再次升級。

關鍵人物與文獻#

  • Adam Cheyer / Tom Gruber / Dag Kittlaus:Siri 公司三位創辦人。
  • Steve Jobs:Apple 收購 Siri 並主導發表,2011 年 10 月 4 日(其去世前一日)。
  • George Dahl / Geoffrey Hinton / Dong Yu:DNN 取代 GMM 的聲學模型轉折推手。
  • Dahl, Yu, Deng, Acero, Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition, IEEE TASLP, 2012.
  • Hinton et al., Deep Neural Networks for Acoustic Modeling in Speech Recognition, IEEE Signal Processing Magazine, 2012.
  • Cheyer & Gruber, Siri: A Conversational Intelligent Assistant, SRI presentation, 2011.
  • 相關案件:1966-ELIZA對話系統.md、2011-Watson問答系統.md、1988-HMM詞性標記.md、2017-Transformer注意力機制.md

附錄線索:一個完整的對話管線示意#

以一句完整對話追蹤三段管線的分工:

輪次 使用者 ASR 輸出 意圖 + 槽位 對話管理動作
1 「提醒我明天八點打給媽媽」 「提醒我明天八點打給媽媽」 CreateAlarm(time=08:00, contact=媽媽) 缺少確認 → 追問
2 「對,八點半」 「對八點半」 修正槽位 time=08:30 建立提醒並確認
3 「她手機是幾號」 「她手機是幾號」 GetContactInfo(contact=媽媽) 用對話狀態解析「她」

注意第二輪的 ASR 錯誤(「對,八點半」被聽成「對八點半」)——對話管理必須容錯,因為語音辨識永遠不完美。這也是為什麼管線式助理的每一段都要把不確定性往下游傳遞;端到端語音助理(2020s)的解法是把 ASR、NLU、DM 融成單一神經模型,直接從音訊生成回應。

這張表也是 intent-slot 範式的墓誌銳前奏:它運行了十年(2011–2021),直到大語言模型用「一句話生成」取代「意圖分類 + 槽位填空」——對話智能的下一章見「科學與歷史/計算語言學/2020s-多模態與RAG時代.md」。

補充 -- 程式實作(python + sklearn)#

本案 intent-slot 範式(意圖分類+正則槽位填空)的最小可執行版本,見 _code/2011-Siri.py(已實測可跑;pytorch 不適合這種符號管線,改用 sklearn——工具跟著問題走):

# 2011 - Siri: 意圖分類 + 槽位填空 (intent-slot 範式)
import re
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

COMMANDS = [
    ("call mom tomorrow morning", "打電話", {"對象": "mom", "時間": "tomorrow morning"}),
    ("call dad tonight", "打電話", {"對象": "dad", "時間": "tonight"}),
    ("text mom I am late", "傳訊息", {"對象": "mom", "內容": "I am late"}),
    ("text dad call me back", "傳訊息", {"對象": "dad", "內容": "call me back"}),
    ("set alarm for 7 am", "設鬧鐘", {"時間": "7 am"}),
    ("set alarm for 8 pm", "設鬧鐘", {"時間": "8 pm"}),
    ("play some jazz music", "放音樂", {"類型": "jazz"}),
    ("play rock music loudly", "放音樂", {"類型": "rock"}),
    ("what is the weather today", "查天氣", {"時間": "today"}),
    ("what is the weather tomorrow", "查天氣", {"時間": "tomorrow"}),
    ("remind me to buy milk", "設提醒", {"事項": "buy milk"}),
    ("remind me to call mom", "設提醒", {"事項": "call mom"}),
]
SLOT_RES = {
    "對象": r"(mom|dad)",
    "時間": r"(tomorrow morning|tonight|7 am|8 pm|today|tomorrow)",
    "類型": r"(jazz|rock)",
    "內容": r"(?:text \w+ )(.+)",
    "事項": r"(?:remind me to )(.+)",
}


def fill_slots(text):
    return {k: (m.group(1) if (m := re.search(p, text)) else None)
            for k, p in SLOT_RES.items()}


def main():
    texts = [c[0] for c in COMMANDS]
    intents = [c[1] for c in COMMANDS]
    clf = make_pipeline(TfidfVectorizer(), LogisticRegression(max_iter=500))
    clf.fit(texts, intents)
    tests = ["call mom tonight", "play jazz music", "set alarm for 7 am",
             "what is the weather today", "Call Dad Tomorrow Morning", "remind me to buy milk"]
    print("意圖分類 + 槽位填空 (intent-slot 範式, 2011-2021 的 Siri 心臟):")
    for t in tests:
        intent = clf.predict([t])[0]
        slots = {k: v for k, v in fill_slots(t.lower()).items() if v}
        print(f"  '{t}' -> 意圖={intent} 槽位={slots}")
    print(f"訓練集回測準確率={clf.score(texts, intents):.2f} (封閉世界滿分 -- 一出新說法即崩)")


if __name__ == "__main__":
    main()

執行結果(python3 _code/2011-Siri.py,sklearn 1.9.0):

意圖分類 + 槽位填空 (intent-slot 範式, 2011-2021 的 Siri 心臟):
  'call mom tonight' -> 意圖=打電話 槽位={'對象': 'mom', '時間': 'tonight'}
  'play jazz music' -> 意圖=放音樂 槽位={'類型': 'jazz'}
  'set alarm for 7 am' -> 意圖=設鬧鐘 槽位={'時間': '7 am'}
  'what is the weather today' -> 意圖=查天氣 槽位={'時間': 'today'}
  'Call Dad Tomorrow Morning' -> 意圖=打電話 槽位={'對象': 'dad', '時間': 'tomorrow morning'}
  'remind me to buy milk' -> 意圖=設提醒 槽位={'事項': 'buy milk'}
結論: 意圖×槽位的窮舉是一座監獄 -- LLM 用『一句話生成』越獄 (見 2022-ChatGPT與RLHF.md)

程式解說:TF-IDF+邏輯回歸判意圖、正則式填槽位——2011 年 Siri 上線時的核心範式,不到 60 行。六句全對,但全是封閉世界內的排列組合:訓練集回測 1.00 恰是病徵——換個說法("wake me at 7")意圖分類即崩,槽位正則更是一個都加不上來。窮舉即天花板:意圖×槽位的笛卡兒積是座監獄,每個新功能都要手工加牢房。此即本文末段的墓誌銘:2022 年後 LLM 用一句話生成越獄,Siri 範式退役。