2011 - Siri 語音助理#
案件摘要#
2011 年 10 月,Apple 在 iPhone 4S 發表會上推出 Siri——第一個走進億萬消費者口袋的語音對話助理。Siri 的本質是一條三段式管線:自動語音辨識(ASR)→ 意圖理解(NLU)→ 對話管理與執行。使用者說「提醒我明天早上八點打電話給媽媽」,機器要把它變成一行指令。其核心主張是:語音不只是輸入法,而是智慧介面——機器必須聽懂、理解、記住上下文並採取行動。這樁案件的偵探意義在於:它標誌了語音辨識技術史上 HMM → DNN 的轉折點——同一年,深度學習悄悄接管了隱藏三十年的聲學模型。
前因 -- 為什麼會有這個案子#
- 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)的機率:
HMM 的結構是正確的(語音確實是時序的),但 GMM 的表達力太弱——它無法建模數千維特徵之間的複雜相關。三十年來研究者只能靠增加狀態與三元音(triphone)上下文硬撐,錯誤率卡關。
第二條線索:2011 年的轉折——DNN 接管聲學模型#
2011–2012 年,George Dahl、Geoffrey Hinton 等人(微軟與多倫多大學)證明:用深度神經網路取代 GMM 估計同樣的 HMM 狀態機率,錯誤率相對下降 20–30%:
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 |
解析器把口語的模糊性(「明天」相對日期)交給時間/地點推理模組處理——這是符號 NLP 的遺產,與 2011-Watson問答系統.md 的問題分析一脈相承。
意圖理解的統計血統:Siri 的解析器用的是 CALO 計畫累積的統計句法 + 槽位填充分類器,其思路與 1975-向量空間模型與TFIDF.md 之後的統計 NLP 一脈相承,但輸出從「文件排序」升級為「可執行的行動」。
第四條線索:對話管理——記住上下文#
Siri 的對話狀態機記住多輪指代:「打給她」中的「她」繼承上一輪的「媽媽」;資訊不足時主動追問(「要打給哪一位?」)。這讓 Siri 從「一問一答的查詢機」升級為對話系統——ELIZA 六十年前許下的諾言,第一次在口袋裡兌現。
對話管理的數學骨架是一個部分可觀測馬可夫決策過程(POMDP)——CALO 計畫的理論遺產:
其中 \(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 範式退役。