Skip to content

YouTube 字幕怎麼切成句子:英文跟讀的斷句與 CEFR 分級

最近做了一個練英文的小工具英文跟讀 ↗:貼上一支 YouTube 影片的連結,它會把英文字幕切成一句一句,每句標上 CEFR 難度,你可以只重播這一句、錄下自己跟著唸的那一次,再用排序與拼字小遊戲複習。

動手之前,我以為最難的是播放器控制。做了才發現,最花時間的是兩件聽起來很無聊的事:字幕怎麼切成句子,以及一句話算幾級。這篇把實際的規則攤開來講,文中的數字都是開發時拿真實影片量出來的。最後也說明,為什麼它刻意不給發音分數。

字幕行不等於句子

YouTube 的字幕是一行一行出現的(技術上叫 cue),每一行有自己的開始時間。直覺的做法是一行當一句,但字幕行是依「畫面放得下多少字」切的,不是依語意切的。一句話常常橫跨兩三行,也常常在一行的中間就結束。

舊版就吃了這個虧。它假設自動字幕沒有標點、沒辦法斷句,所以一行當一句。實際上 YouTube 現在的自動字幕大多有標點,只是句尾落在行的中間:我拿一支 TED 演講的自動字幕來數,整份有 456 個句尾標點,只有 166 個剛好在行尾。結果那支影片只有兩成的「句子」以句號結尾,其他都是被攔腰切斷的半句。

現在手動字幕與自動字幕走同一條路。先清掉 (Laughter)[Music] 這類不是台詞的標記,再分四步:

  1. 行內依標點切片:在每一行裡面找句尾標點,把一行切成幾個片段。
  2. 片段合併成句:遇到真正的句尾就收成一句。
  3. 短句合併:太短的句子併進鄰句。
  4. 收尾清理:拿掉訪談字幕換人說話的破折號,以及 Translator: 這類字幕製作資訊。

改版後拿六支影片(兩支自動字幕、四支手動字幕)量,合計「以句號結尾」的比例從 66.2% 升到 94.5%,那支 TED 從 20.4% 升到 89.8%。

句號不一定是句尾:縮寫怎麼判斷

「遇到句號就斷」第一個踩到的就是縮寫:Mr. Smith、U.S. Senate、No. 5。判斷的單位是「一個字」而不是字串裡的位置,所以 stanford.edu3.5 這種句點在中間的字,本來就不會被當成句尾。剩下幾條規則:

  • 兩個字母以上的點狀縮寫(U.S.、e.g.、Ph.D.)視為縮寫,除非下一個字是 It、The、But 這類幾乎一定開新句的字。
  • No.、Vol.、p. 只有後面接數字才算縮寫。語料裡的 14 次 No. 全是「不」的意思,不是「第幾號」。
  • Mr.、Dr. 與月份、星期的縮寫,後面接大寫或數字才算縮寫。
  • etc.、vs.、Inc. 永遠是縮寫。
  • 省略號只有在下一個字大寫開頭時才算句尾,which is not often ... thankfully 不會被切開。

更有意思的是兩條「看起來合理、實測是淨傷害」而刻意不做的規則。第一條是「句點後面接小寫就不斷」:語料裡真正的縮寫後面接的全是大寫專有名詞(Mrs. Lynne、U.S. Senate),這條一次都沒幫上忙,反而誤殺了 8 個自動字幕的真句尾,因為語音辨識不保證句首大寫。第二條是「單一字母加句點就是縮寫」:英文的 I 就是單一字母,you and I. 後面那一句會整個被黏上來。

講者一直不下句點怎麼辦

有些講者一段話拖二三十個字都不下句號,對話類影片尤其常見。一句太長就唸不完,所以設了上限:一句最多 28 個字或 15 秒,兩行之間空白超過 3 秒也直接斷開。

問題是撞到上限時要切在哪。原本會切在隨便一個字上,變成 …because well, it might be 接下一句 uncomfortable.。現在的做法是:句子超過 24 個字之後,允許在子句邊界收尾,也就是逗號、分號,或 I、you、because、but 這類子句開頭的字前面。切在主詞前面,下一句就會從完整的子句開始。

這條規則帶前瞻:只有「接下來到上限之前都不會遇到句號」時才用子句切點,不然本來再三五個字就會結束的好句子會被提早切開。門檻取多少是真的取捨,同樣六支影片:

子句切點門檻以句號結尾切在詞組中間超過 28 字
不用96.2%34 句95 句
24 字起(目前)94.5%9 句47 句
18 字起93.9%3 句23 句

門檻愈低,半路切斷的句子愈少,完整句的比例也愈低,沒有免費午餐。一開始設 18,後來發現手動字幕本來就很少切在半路,付了代價卻沒換到東西,才放寬到 24。也試過「遇到逗號一律切」,以句號結尾的比例直接掉到 83%,因為以逗號結尾的本來就不是完整的句子。

太短的句子,和沒有標點的字幕

少於 5 個字的句子會併進鄰句,一兩個字不適合當跟讀單位。方向看語意線索:前一句沒有句尾標點就往前併(它還沒講完);自己沒有句尾標點就往後併;兩邊都是完整句,就併進時間比較接近的那一邊。

這裡踩過一個雷:短句會一路往上黏。實測有一句把九句對話黏成 What if we shuffle the deck? I'm fine with that. All right. Okay. …。問題不是長度而是數量,所以規則改成一句最多黏三個完整句。

另外,不是每條自動字幕都有標點。我測過的 18 條字幕軌裡,有 3 條一個標點都沒有。程式用「每一百字有幾個句尾標點」偵測,低於 1.5 就當作沒有標點(有標點的字幕軌實測在 6.57 到 13.33 之間,餘裕很大)。這種字幕維持一行一句:YouTube 的自動字幕大致在停頓處換行,沒有標點時,換行是唯一可靠的結構,硬把好幾行併成一句,反而會跨過說話的停頓。

時間軸:自動字幕反而比較準

自動字幕的每個字都帶時間戳,所以在行內切出來的句首時間是準的。手動字幕整行只有一個時間,行內的切點只能依字元比例內插,誤差中位數大約 0.3 秒,而一個英文字的長度中位數只有 0.24 秒,不處理就會吃掉句首第一個字。所以每一句都帶一個「句首時間是不是內插來的」旗標,播放這種句子時提早 0.25 秒開始。

一句話算幾級:CEFR 分級

分級在收錄影片時由 Cloudflare Worker 計算,不呼叫任何 AI 模型,是一組固定規則,同一份字幕永遠得到同一個結果。

字表:用開源詞頻庫 wordfreq 3.1.1 的 zipf 值(詞頻取對數的尺度)把英文單字分成六帶:A1 ≥ 5.3、A2 ≥ 4.8、B1 ≥ 4.3、B2 ≥ 3.8、C1 ≥ 3.3、C2 ≥ 2.8。

單字:查表前先做粗略的詞形還原(複數、過去式、進行式、副詞、比較級),取查到的最低等級,所以 curiously 會跟 curious 同級。句中大寫開頭的字當作專有名詞,不計分;不在字表裡、長度 4 以上的字當成最難的一級。

句子:取句中最難的兩成單字的平均等級,再加兩個修正:

text
句長修正 = clamp((字數 − 12) / 12, −0.5, +1)
語速修正 = 每分鐘 120 / 150 / 180 字以上,各加 0.25 / 0.5 / 0.75
           (不到 10 個字的句子語速估不準,修正減半)

整支影片:找出「95% 的字都在這一級以內」的最低等級,再加上平均句長與整體語速的修正,自動字幕另外加半級。

有一件事必須說清楚:這裡的 A1 是「詞頻最高的 490 個字」,不是教學用的 CEFR A1 字表。所以 government、research、international 落在 A1,eat、sleep、teacher、tomorrow 反而在 A2。標出來的等級是幫你挑影片的估計值,不是檢定。要換成正式的 CEFR 字表,只要換掉那份字表 JSON,格式不變。

還有一個很難察覺的坑。工具另有一個不用影片的「句子練習」,題庫句子沒有音檔,也就沒有時間軸。如果直覺地把時長寫成 0,程式會把時長夾到下限 0.5 秒,十五個字除以 0.5 秒等於每分鐘 1,800 字,語速修正直接加滿 0.75,整個題庫悄悄集體升一級,不報錯也不警告。解法是替沒有音檔的句子倒推一段「每分鐘 100 字」的假時長,讓語速項恆為 0;產題腳本啟動時也會自我檢查:換一個差十倍的假時長,分數必須一模一樣。

為什麼不給發音分數

按下跟讀之後,瀏覽器內建的語音辨識(Web Speech API)會把你唸的話轉成文字,程式再把它跟原句逐字對齊,標出一致、近音、聽成別的字、漏掉與多出來的地方。但畫面上不會出現「發音 87 分」。

原因很單純:瀏覽器交給網頁的辨識結果只有兩個欄位,辨識出的文字(transcript)與信心值(confidence)。沒有音素,也沒有每個字的時間,判斷不了 th 咬得對不對、重音落在哪個音節。拿這些資料算出來的發音分數,就是編出來的數字。研究上也有人指出,語音辨識軟體對非母語者的辨識率,和真人聽者覺得聽不聽得懂並不一致(Derwing、Munro 與 Carbonaro,2000)。所以它的定位是「可懂度檢查」:機器聽不聽得懂你,而不是你唸得標不標準。

幾個配套的決定:

  • 不把目標句提示給辨識器。Web Speech API 可以告訴辨識器「可能會聽到哪些詞」,但這樣你唸錯時它也會聽成正確的字,回饋就灌水了。
  • 對到的比例低於一半,就不逐字上色,改成整句提示。這通常是麥克風或環境的問題,不是你每個字都唸錯,滿畫面紅字只會誤導。
  • a、the、of 這類功能詞淡化,辨識器很常吞掉或多加它們。
  • 兩邊套同一套正規化:縮寫展開(I'm、gonna)、拼出來的數字轉成阿拉伯數字、英式拼法轉美式、去標點。對齊用 Needleman-Wunsch 而不是最長共同子序列,因為後者沒有「替換」這個操作,唸錯一個字會被算成「漏一個加多一個」,紅字變成兩倍。
  • 錄音只留在記憶體,換句或離開就丟掉,不上傳。錄音時關掉瀏覽器的降噪與自動增益,它們會削掉氣音、把音量拉平,剛好毀掉你想聽的東西。

順帶一提,每支影片的公開頁只放標題、摘要與大綱,完整字幕要按下開始練習才會載入。字幕是影片作者的內容,工具只是把它排成好練的樣子,不該變成一份能被整份抓走的逐字稿。

小結

  1. 句界看標點,不看字幕行:自動字幕現在有標點,行內切片是最大的改善來源。
  2. 每條規則都拿真實字幕量過:會變差的規則,看起來再合理也不做。
  3. 分級用固定規則:可重現,也老實說明它是詞頻估計,不是官方檢定。
  4. 給不出真的分數,就不給分數:把機器聽到的字攤開,比一個編出來的數字有用。

工具在這裡:英文跟讀 ↗,免費、不用註冊,登入後可以跨裝置同步進度。想知道怎麼用它安排跟讀練習,可以看英文跟讀的工具介紹