Contribute Media
A thank you to everyone who makes this possible: Read More

PEP 634 Structural Pattern Matching 參上,你終究還是要用語言學來做 NLP 齁! – PeterWolf (PyCon Taiwan 2021)

Description

Day 2, 13:00-13:45

Abstract

PEP622(後改併到 PEP634) 提出的 Structural Pattern Matching (以下簡稱 SPM) 結構讓人乍看之下以為 Python 終於在 3.10 向 case 投降。然而,歹誌並不是表面上一個 case 的保留字所呈現得這麼簡單! 本講題將從解析「意圖」的角度出發,說明解析程式碼的「意圖」和解析自然語言的「意圖」兩項任務之間,透過語言學的眼光來看,其實有異曲同工之妙。藉由目前世界上唯一利用 SPM 來做 NLU 的 Loki 意圖分析系統和 Python 3.10 在 PEP622 提出的新功能,我們將來回穿梭「自然語言」和「程式語言」兩個平行宇宙說明兩個重點: 1. 為什麼 Structure Pattern Matching 解析語言是個好主意。 2. Structure Pattern Matching 這招,程式語言用,好;自然語言用,更好。 理解了 PEP622 的運作後,更會發現它是對 PEP20: The zen of Python 中的 "Readibility counts." 這句話非常強烈的支持與實現。它讓程式語言不只是在表層的可讀性獲得了提升,更在底層的運作原理也更接近人類的自然語言。 最後,不論是程式語言還是自然語言,你終究還是要用語言學來做 NLP 的!

Description

在 BigData 和各種 ML 框架興起以前,許多學校的資訊教育是包含「編譯器/直譯器」的設計的。在編譯器/直譯器的設計課程裡,本來就會提到「程式語言」和「自然語言」的相似與一致之處。比如說這個影片裡講者 https://youtu.be/vstmnbzGbwU 就是試圖用短短的 5 分鐘解釋什麼是 "Programming logic (程式邏輯)", "Syntax (句法結構)" 和 "Semantics (語意)"。

以她舉的例子為例,在某個程式語言中:

price := 12,99

是可以執行的,但

price = A

則是無法執行的。原因是它的語意和結構都是錯的。

如果我們想讓 price 的語意指涉一個「數值」的話,那麼很明顯地讓它指涉成為一個「字符」是不對的,這是語意上的錯誤 (Semantic Error)。此外,就算字符 A 背後代表了某個「數值」,但在這個程式語言中使用了 X := Y 這樣的結構來賦值,因此如果是用 X = Y 這樣的結構來賦值時,就是句法上的錯誤 (Syntax Error)。

這說明了,要讓程式順利地依著「程式邏輯 (意圖)」運作,那麼設計者不只要在語意上合情合理,更要注意「結構」是否正確。因為編譯器/直譯器有賴設計者透過「結構」來進行比對,才能確認程式設計的目標為何。

我們用自然語言為例:

我 [ ]了 你的晚餐

這個結構要合情合理,那麼在 [] 裡一定得放個表示動作的事件。否則如果卡了個:

我 [昨天]了 你的晚餐

就成了結構不正確 (該放動詞的地方,放的不是動詞),而且語意也不正確 (不知道 [昨天] 和 [你的晚餐] 之間究竟發生了什麼) 的結果。

我必需再一次地強調,PEP622 的提出,是 Python 程式語言對 PEP20: The zen of Python 中的 "Readibility counts." 這句話非常強烈的支持與實現。它讓程式語言不只是在表層的可讀性獲得了提升,更在底層的運作原理也更接近人類的自然語言。

我非常期待能有機會和 Python 社群的朋友們從語言學的觀點來分享這個發現。

Slides not uploaded by the speaker. HackMD: https://hackmd.io/@pycontw/2021/%2F%40pycontw%2Fr1fu-4cfY

Speaker: PeterWolf

Droidtown Linguistic Tech. Co. (卓騰語言科技) 創辦人兼核心開發者。 平常開發基於語言學理論的中文斷詞(NLP)、中文語意處理(NLU)、自動語音處理、語音辨識、自然語言文本解析及資料探勘的演算法及前端應用。 創業第一天就決心要做「百年企業」的那個男人!

Details

Improve this page