ข้อความถอดเสียงที่มีป้ายชื่อผู้พูดต้องถูกต้องทั้งสองส่วน และเพราะป้ายอยู่บนตัวคำ ป้ายที่ผิดจึงแก้ได้โดยไม่ต้องแตะตัวข้อความ
ข้อความถอดเสียงของการประชุมตอบสองคำถามพร้อมกัน คือพูดอะไร และใครเป็นคนพูด ผู้อ่านเห็นงานเพียงงานเดียว คือชื่อที่อยู่หน้าแต่ละบรรทัด แต่เบื้องล่างมีปัญหาสองอย่าง แต่ละอย่างมีข้อมูลนำเข้าและวิธีที่มันพลาดเป็นของตัวเอง
การรู้จำเสียงพูดฟังหาคำ มันแปลงเสียงเป็นข้อความ และเมื่อทำได้ดี ก็ให้เวลาเริ่มต้นและสิ้นสุดของทุกคำ มันไม่สนใจว่าเสียงเปลี่ยนไปกลางประโยคหรือไม่ งานของมันคือทำให้ประโยคถูกต้อง
การแยกผู้พูด (diarization) ฟังหาเสียง มันไม่รู้จักคำใดเลย งานของมันคือแบ่งเส้นเวลาออกเป็นช่วงการพูด และบอกว่าช่วงไหนเป็นของคนคนเดียวกัน: Speaker 1, Speaker 2 คำนี้ยืมมาจาก "diary" ซึ่งเป็นภาพที่ตรงกับผลลัพธ์ดี คือบันทึกว่าใครถือไมค์ และเมื่อไร
มีศัพท์ใกล้เคียงอีกสามคำที่มักสับสนกับคำนี้ Diarization บอกว่าใครพูดเมื่อไรโดยไม่รู้ว่าเป็นใคร Speaker identification บอกว่าช่วงเสียงพูดเป็นของบุคคลที่รู้จักคนไหน โดยเลือกจากชุดเสียงที่ลงทะเบียนไว้ Speaker verification ตอบคำถามแบบใช่หรือไม่: เสียงนี้เป็นของบุคคล X จริงหรือไม่ คำอ้างของผู้ขายจะอ่านเข้าใจง่ายขึ้นเมื่อแยกสามคำนี้ออกจากกัน เพราะ "ป้ายชื่อผู้พูด" อาจหมายถึงตั้งแต่การเดาคร่าว ๆ ว่าการเปลี่ยนผู้พูดอยู่ตรงไหน ไปจนถึงชื่อที่ติดตามคนเดียวกันข้ามการบันทึกแต่ละครั้ง เพื่อดูว่าป้ายเหล่านั้นรับประกันอะไรได้บ้าง ต้องดูเข้าไปในตัวแยกผู้พูด
ระบบแยกผู้พูดส่วนใหญ่ทำงานเป็นสามขั้นตอน และไม่มีขั้นตอนใดเกี่ยวกับภาษาเลย
แต่ละขั้นตอนอาจพลาดได้ด้วยตัวเอง ผู้พูดที่เสียงเบาอาจถูกมองข้าม เสียงสองเสียงที่คล้ายกันอาจถูกรวมเป็นหนึ่ง และคนเดียวที่เปลี่ยนจากสงบเป็นตื่นเต้นอาจถูกแยกเป็นสองคน
วงการนี้ให้คะแนนทั้งหมดนี้ด้วย diarization error rate หรือ DER ซึ่งคือสัดส่วนของเวลาพูดที่ถูกพลาดไป ถูกตรวจว่าเป็นเสียงพูดทั้งที่ไม่ใช่ หรือถูกระบุเป็นผู้พูดผิดคน โดยปกติจะมีช่วงผ่อนปรนหรือ "collar" ราวหนึ่งในสี่วินาทีรอบทุกจุดเปลี่ยน collar นี้มีไว้เพราะไม่มีใคร ทั้งคนและเครื่อง ระบุจุดเปลี่ยนผู้พูดได้ละเอียดถึงมิลลิวินาที ความผ่อนปรนนี้ใช้ได้เมื่อให้คะแนนตัวแยกผู้พูดเพียงลำพัง แต่ไม่เหมาะกับข้อความถอดเสียง เพราะจุดเปลี่ยนที่คลาดไปหนึ่งในสี่วินาทีจะไปตกทับคำ
นี่คือจุดที่สองปัญหามาพบกัน และคุณภาพของข้อความถอดเสียงที่มีป้ายชื่อถูกกำหนดที่นี่ ตัวแยกผู้พูดวางจุดเปลี่ยนด้วยความคลาดเคลื่อนอยู่บ้าง มักเป็นเศษของวินาทีไปทางใดทางหนึ่ง ส่วนตัวรู้จำเสียงวางคำบนเส้นเวลาเดียวกัน ถ้าซ้อนสองอย่างนี้ทับกันตรง ๆ จุดเปลี่ยนจะตกอยู่กลางคำ ทำให้ครึ่งแรกของคำว่า "tomorrow" เป็นของ Speaker 1 และอีกครึ่งเป็นของ Speaker 2
ป้ายอาจผิดอยู่พักหนึ่งก่อนจะถูก ตัวแยกผู้พูดจะมั่นใจในกลุ่มของมันมากขึ้นเมื่อได้ยินเสียงมากขึ้น ดังนั้นป้ายในช่วงแรกอาจดูผิดเมื่อเทียบกับสิ่งที่เกิดขึ้นทีหลัง ในการถอดเสียงแบบสด ป้ายอาจถูกแก้ไขได้หลังจากบรรทัดแสดงไปแล้ว Realtime API ของ VocalStack ส่งเฟรม transcript.amended ที่แก้ข้อความหรือผู้พูดของบรรทัดที่ยืนยันแล้วให้ตรงตำแหน่งเดิม ผู้อ่านจึงเห็นการแก้ไข ไม่ใช่ความขัดแย้ง
ป้ายที่วางตำแหน่งได้ดีและคงที่แค่ไหนก็ยังเป็นเพียงตัวเลข ตัวเลขพอสำหรับตามบทสนทนา แต่สิ่งที่คนอยากอ่านคือชื่อ
ป้ายจะกลายเป็นชื่อได้สองทาง และสองทางนี้ต่อยอดกันเอง
ทางแรกคือการตั้งชื่อภายในการบันทึกเดียว ผู้พูดทุกคนที่การถอดเสียงพบจะได้ดัชนีเริ่มจาก 0 ผู้ที่มีสิทธิ์เข้าถึงสามารถตั้งชื่อให้ผู้พูดแต่ละคนได้ ระหว่างหรือหลังการบันทึก ชื่อเป็นชั้นซ้อนทับบนคำ จึงตั้ง เปลี่ยน หรือลบได้โดยไม่แตะตัวข้อความ ผ่าน API คือ PUT /v1/recordings/{id}/speakers/{idx} พร้อม name ถ้าชื่อว่างจะเป็นการลบชื่อ บรรทัดที่ speaker เป็น -1 คือบรรทัดที่ไม่มีป้าย ไม่ว่าจะเพราะปิดการใส่ป้ายไว้ หรือในร่างการถอดเสียงสด เพราะบรรทัดนั้นยังไม่ได้ระบุผู้พูด
ทางที่สองคือการจดจำข้ามการบันทึก ซึ่งเป็นปัญหาการระบุตัวตนจากส่วนแรก ตัวแยกผู้พูดบอกได้เพียงว่าเสียงสองเสียงต่างกัน ไม่มีทางบอกว่าเป็นใคร เพื่อก้าวจาก "ต่างกัน" ไปเป็น "นี่คือ Ana" ระบบต้องมีจุดอ้างอิง คือเสียงที่บันทึกไว้ซึ่งนำมาจากการบันทึกของคนคนนั้น เสียงพูดที่สะอาดอย่างน้อยสามสิบวินาทีคือขั้นต่ำ และควรเป็นหลายนาทีจะดีกว่า ตัวอย่างเสียงควรฟังเหมือนการบันทึกที่จะนำไปเทียบด้วย คนเดียวกันที่พูดผ่านไมค์แล็ปท็อปกับไมค์บนเวที อาจฟังไม่เหมือนกันสำหรับเครื่องมากกว่าคนแปลกหน้าสองคนที่บันทึกด้วยวิธีเดียวกัน เมื่อเสียงถูกบันทึกไว้แล้ว ผู้พูดทุกคนที่การถอดเสียงได้ยินจะถูกเทียบกับเสียงนั้น และเมื่อตรงกัน ชื่อจะถูกนำไปใส่ในข้อความถอดเสียง ใน VocalStack ฟีเจอร์นี้อยู่ภายใต้ Voices การถอดเสียงไฟล์และเซสชันสดบนแดชบอร์ดจะจับคู่กับเสียงที่คุณบันทึกไว้โดยอัตโนมัติ ส่วนเซสชัน realtime API จะรู้จำเฉพาะเสียงที่คุณระบุไว้ใน identifyVoices
เสียงที่บันทึกไว้คือข้อมูลชีวมิติ มันสามารถจดจำคนคนหนึ่งได้ในทุกการบันทึก และใน VocalStack มันยังทำหน้าที่เป็นเสียงโคลนที่อ่านข้อความของคนนั้นออกเสียงได้ด้วย แดชบอร์ดจะขอให้คุณยืนยันว่าคุณได้รับอนุญาตจากบุคคลนั้นก่อนบันทึก และลบเสียงได้ทุกเมื่อ
ทั้งหมดนี้สมมติว่าคุณต้องการป้ายผู้พูดตั้งแต่แรก ซึ่งบ่อยครั้งคุณไม่ต้องการ
ผู้บรรยายคนเดียวที่อ่านบรรยายไม่จำเป็นต้องมี "Speaker 1" อยู่หน้าทุกบรรทัด ผู้ฟังรู้อยู่แล้วว่าใครถือไมค์ ดังนั้นการตั้งค่าป้ายผู้พูดมีสามตำแหน่ง และเหมือนกันทั้งในเซสชัน realtime การถ่ายทอดสด การถอดเสียง และการบันทึกเสียง
auto ใน API) บรรทัดจะถูกติดป้ายผู้พูดเมื่อได้ยินเสียงมากกว่าหนึ่งเสียง การบันทึกที่มีผู้พูดคนเดียวจะเป็นข้อความธรรมดา และเสียงที่สองที่เข้ามาทีหลังก็ยังถูกจับได้ ฟอร์มการถอดเสียงสดใหม่บนแดชบอร์ดเริ่มที่ค่านี้การอัปโหลดไฟล์ใช้ตัวเลือก speakerLabels เดียวกัน และ realtime API ให้คุณเปลี่ยนค่าระหว่างสตรีมได้ รายละเอียดอยู่ใน API reference การแยกและตั้งชื่อผู้พูดไม่เคยเพิ่มค่าใช้จ่าย (ดูอัตราได้ที่หน้าราคา) ดังนั้นการเลือกจึงขึ้นกับสิ่งที่ผู้อ่านควรเห็น ไม่ใช่สิ่งที่มันมีราคา
เมื่อเปิดใช้งาน การแยกผู้พูดดีแต่ไม่ใช่เวทมนตร์ มีสองสถานการณ์ที่ยังเอาชนะมันได้
อย่างแรกคือการพูดซ้อน เมื่อสองคนพูดพร้อมกัน ช่วงเสียงหนึ่งจะบรรจุสองเสียง ตัวแยกผู้พูดที่รับรู้การซ้อนมีอยู่ในงานวิจัยและเริ่มปรากฏในผลิตภัณฑ์มากขึ้น เช่น end-to-end neural diarization (EEND) ซึ่งมองคำถาม "ใครกำลังพูด" เป็นชุดคำถามใช่หรือไม่ที่เกิดขึ้นพร้อมกัน แทนที่จะเป็นคำตอบเดียว แต่ระบบการผลิตส่วนใหญ่ยังกำหนดผู้พูดหนึ่งคนต่อช่วงเสียง และตัวรู้จำที่อยู่ด้านบนก็ถอดเสียงทีละเสียง การพูดแทรกในการอภิปรายที่ดุเดือดคือเสียงที่ยากที่สุดในวงการ และป้ายของทุกผู้ให้บริการจะแย่ลงตรงนั้น นอกจากนี้ยังเป็นส่วนที่ทุกคนอยากอ้างถึงหลังจากนั้นเสมอ
อย่างที่สองคือเสียงที่คล้ายกันมาก พี่น้องอาจสร้าง embeddings ที่ใกล้กันเกินกว่าจะแยกได้อย่างเชื่อถือได้ ยิ่งเมื่อพวกเขาสลับกันพูดสั้น ๆ ตลอดหนึ่งชั่วโมง เสียงโทรศัพท์ทำให้เรื่องนี้แย่ลงสำหรับทุกคน สัญญาณแบนด์แคบถูกสุ่มตัวอย่างที่ 8 kHz และมีข้อมูลเพียงถึงราว 3.4 kHz แต่ส่วนใหญ่ของสิ่งที่ทำให้เสียงหนึ่งต่างจากอีกเสียงอยู่เหนือจุดตัดนั้น คนสองคนบนสายโทรศัพท์เดียวกันจึงฟังเหมือนกันสำหรับตัวแยกผู้พูดมากกว่าที่ฟังสำหรับคุณ
วิธีแก้ที่ใช้ได้จริงที่สุดสำหรับทั้งสองอย่างอยู่ก่อนโมเดลใด ๆ คือให้ผู้พูดแต่ละคนมีไมโครโฟนของตัวเอง เมื่อแต่ละคนมีช่องสัญญาณของตัวเอง การแยกผู้พูดจะเหลือเพียงการถามว่าช่องไหนดังอยู่ การพูดซ้อนกลายเป็นสองแทร็กที่สะอาดแทนที่จะเป็นแทร็กเดียวที่ขุ่น และ embeddings ไม่ต้องถูกขอให้ทำงานยาก ๆ นั้นเลย ไมโครโฟนตั้งโต๊ะอันเดียวถูกกว่าและเกือบจะเป็นสิ่งที่คุณมีอยู่แล้ว ซึ่งเป็นเหตุผลที่บทความส่วนที่เหลือมีอยู่
ข้อจำกัดทั้งสองไม่จำเป็นต้องส่งผลถึงผู้อ่านตรง ๆ เพราะป้ายเป็นชั้นซ้อนบนคำ ป้ายผิดจึงไม่เคยทำให้คุณเสียข้อความ ชื่อผู้พูดตั้งหรือลบได้ในการบันทึกเมื่อใดก็ได้ และในการถอดเสียงสด ผู้ดูแลสามารถเขียนทับคำหรือบรรทัดใดก็ได้ขณะที่ยังทำงานอยู่ โดยทุกการแก้ไขจะถูกทำเครื่องหมายและยกเลิกได้
สำหรับด้านคำ ค่าความผิดพลาดของคำ (word error rate) วัดอะไรและพลาดอะไร อธิบายชั้นการแก้ไขอย่างละเอียด WER เป็นสิ่งที่เทียบได้กับ DER สำหรับตัวแยกผู้พูด และข้อความถอดเสียงต้องการค่าทั้งสองให้ต่ำ