一、逗號的用法
逗號是很常用的一個標點符號。在國家技術監督局頒佈的《標點符號用法》GB/T15834-2011中,漢語的逗號的功能主要有以下四種:
1.句子內部主語與謂語之間的停頓:
我們看得見的星星,絕大多數是恆星。
2.句子內部動詞與賓語之間的停頓:
應該看到,科學需要一個人貢獻畢生的精力。
3.句子內部狀語後邊的停頓:
對於這個城市,他並不陌生。
4.複句內各分句之間的停頓:
據說蘇州園林有一百多處,我到過的不過十多處。
逗號的使用很靈活,經常和句號混用,漢語中有“一逗到底”的現象,也就是一個大段落中,只有最後一個句號,其他需要用到句號都使用逗號了。一個句子中,逗號使用越多,句子長度越長,其中包含的語言現象就越複雜,如下例所示:
在一種特定形式中,模具還包括密封裝置,佈置成與主體接合並且能將其操作為用來在主體和模具之間形成流體密封,以防止注入到模腔中的模製材料從模腔中滲出。
二、NLP技術對逗號的處理
逗號的4種功能中,第4種“複句內各分句之間的停頓”,和其他幾個差別較大,也是逗號最重要的功能,作為句子切分符號。所以對逗號的處理,關鍵是識別它是否是句子切分符。
如果逗號不是句子切分符,而是前3種功能之一,那麼,逗號並不影響前後內容的連貫性,即使去掉逗號,句子的含義也沒有變化。
如果逗號是句子切分符,逗號實際上把前後兩個分句分隔開了,對這兩個分句完全可以獨立進行句法語義分析,而不用考慮另外一個分句對它的影響。當然,分句間經常會有省略主語的現象,這可以啟用另外一個獨立模組來處理,而不用混雜在一起。
當前主流的機器學習、深度學習技術,對逗號的處理,基本都是簡單粗暴。要麼以句號為句子切分符,對逗號完全忽略,這導致一個句子過於複雜,處理難度指數級增長;要麼以逗號為句子切分符,全部切開,這導致句子的上下文資訊無法有效利用。據統計,在一般的書面語中,只有50%左右的逗號,作為句子切分符,這使得上述兩種方法都很難達到較好的效果。因此,當前的技術對逗號的處理能力都很弱。
以忽略逗號的方法為例,句子是以句號為單位,把逗號當做無意義符號過濾掉,進行預訓練和匹配。這樣的處理,本質上增加了NLP的混淆度,因為在向量空間中,引入了跨逗號的上下文資訊,而這些資訊從語言的角度,有很多是完全不相關的,屬於資訊噪聲。如上面例子中“......形成流體密封,以防止注入......”,這裡的跨逗號上下文資訊,沒有任何的語言學相關性。
三、逗號的形式化處理
神州泰嶽人工智慧研究院,與國內著名高校北京師範大學合作,將符號化語義表示與深度學習技術進行結合,形成了自主智慧財產權的智慧語義認知技術UltraNLP。智慧語義認知技術,將逗號當做一個特殊的語言特徵來進行形式化表示,將逗號帶來的小句切分和句間語義關係等問題進行上下文關聯處理。逗號的處理分解為五個環節,下面分別說明。
1.逗號的功能識別
為了表示逗號的功能,我們給每一個逗號後面都要標註相應的切分標記。逗號後的切分標記根據是否獨立成句分為以下兩種:
(1)、SST 表示逗號前的內容是一個小句
(2)、DBT 表示逗號前的內容不是一個小句,而是句內的一個塊
如下面的例子,其中第一個逗號前不是一個完整的小句,標註了“|DBT”,它將和第二個小句合併成為一個小句;第二、三個逗號前都是完整的小句,標註了“|SST”。需要說明的是,一般句號預設會有“|SST”標記。
在一種特定形式中,|DBT 模具還包括密封裝置,|SST 佈置成與主體接合並且能將其操作為用來在主體和模具之間形成流體密封,|SST 以防止注入到模腔中的模製材料從模腔中滲出。|SST
對逗號的SST標記和DBT標記識別的依據,主要是句子的完整性判斷,也就是判斷逗號前是否具有句子的核心動詞,如果有,則給出SST標記,否則,給出DBT標記。在給出標記的同時,可以給出標記的屬性值,用LC_EXP表示。
SST標記的LC_EXP屬性取值,共有5個,分別表示逗號前的小句是核心小句(SS_CORE)、非核心小句(SS)、句蛻小句(SS_JT)、EK塊(SS_EK)、缺GBKn的小句(SS_NGBKn)。這些屬性是對小句內部的語義結構,進行總體描述而抽象出的。
DBT標記的LC_EXP屬性取值,共有5個,這些屬性分別對逗號前的字串整體角色進行說明:
在一種特定形式中,|DBT, LC_EXP=ABK
模具還包括密封裝置,|SST, LC_EXP=SS_CORE
佈置成與主體接合並且能將其操作為用來在主體和模具之間形成流體密封,|SST, LC_EXP=SS
以防止注入到模腔中的模製材料從模腔中滲出。|SST, LC_EXP=SS
2.逗號切分的兩小句間語義關係識別
每個有SST標記的逗號,其前後都是兩個小句,這兩個小句之間位置上是連續的,它們之間一定具有特定的語義關係,這種語義關係,我們用QFC屬性來標記:
逗號的QFC屬性值,共有19個,分別表示逗號前後兩個小句之間的關係,包括塊擴關係(QFC=SS_EP_ER)、句蛻關係(SS_EG_EL)、並列關係(SS_AND)、前一小句包含後一小句(SS_WHEREIN)、目的關係(SS_TO)、逗號內部的目的關係(SS_FOR)、說明關係(後一小句補充說明前一小句內容 SS_THAT)、因果關係(SS_YG)、推斷關係(SS_TD)、假設關係(SS_JS)、條件關係(SS_TJ)、目的關係(SS_MD)、連貫關係(SS_LG)、遞進關係(SS_DJ)、選擇關係(SS_XZ)、轉折關係(SS_ZZ)、讓步關係(SS_RB)、假轉關係(SS_JZ)、以及逗號前是輔塊,逗號後是小句(DBT_EG)。如屬性值SS_AND表示前後兩個小句之間是並列關係,SS_EP_ER表示前後兩個小句之間是塊擴關係,SS_YG表示前後兩個小句之間是因果關係。
小句間語義關係主要從顯性關聯詞標記、句類知識、特定的語言形式以及隱性語義關聯幾方面認定。下面給出一個示例。例子中,第一個逗號後面的內容,都是“說明”的賓語,這在第一個逗號的標記上用屬性QFC=SS_EP_ER來標示,最後一個逗號前後是並列關係,這在逗號的標記上用屬性QFC=SS_AND來標示:
這裡要著重說明,|SST, LC_EXP=SS_CORE, QFC=SS_EP_ER
在社會主義市場經濟條件下,|DBT, LC_EXP=ABK
政府提出國內生產總值增長速度的目標,|SST, LC_EXP=SS, QFC=SS_DJ
是一個預期性、指導性指標,|SST, LC_EXP=SS, QFC=SS_AND
是提出財政預算、就業、物價等宏觀經濟指標的重要依據。 |SST, LC_EXP=SS
3.逗號間的省略與共享
每個有SST標記的逗號,其前後兩個小句之間經常共享部分內容,這就造成了其中一個小句形式上有部分內容省略。如下面例句,第二個小句省略了“製品”:
該製品是紅色的,具有相反的兩端。
我們用SHR屬性來標記逗號前後緊鄰兩個小句間的共享關係。根據小句之間是否存在語言成分共用的情況,可以分為共享、半共享、無共享等情況。SHR具體取值及說明如下:
SS_BGBK1 表示後一小句共享第一個小句的GBK1
SS_GBK1 表示後一小句共享前一小句GBK1
SS_PGBK1 表示後一小句共享前一小句GBK1的一部分
SS_GBK1H 表示前一小句共享後一小句GBK1
SS_GBKn 表示後一小句共享前一小句最後一個GBKn
SS_PGBKn 表示後一小句共享前一小句最後一個GBKn的一部分
SS_GBKn_R 表示重複前一小句最後一個GBKn,可有“該”,也可沒有“該”
SS_QI_GBK 表示有“其、它”等指代,且“其、它”代表一個語義塊
SS_QI 表示有“其”等指代說明符,且“其”只是語義塊一部分
下面給出幾個示例,其中SHR屬性用紅色標示,“[]”中包含的內容,是省略的內容,原始句子中沒有。
該製品是紅色的,|SST, SHR=SS_GBK1 [製品]具有相反的兩端。
當第二通訊終端空閒時,向第一通訊終端傳送一個訊息, |SST, SHR=SS_GBK2[訊息]指示現正處於空閒狀態。
形成一個在導電構件與地之間連線的電流路徑A, |SST, SHR=SS_GBKn_R 該電流路徑A不經過電子源和驅動電路中的任何一個。
判斷小句之間是否存在共享關係,首先就要考察是否有小句存在語義塊預設的情況,如果有省略,一般優先考慮三種情況:共享上一個小句的最後一個塊;共享上一句的第一個塊;或共享第一個小句的第一個塊。需要根據上下文資訊具體判斷。
4.逗號的層級識別
一個句號中的多個逗號切分的小句,雖然形式上是一樣的,實質上它們之間有層次。我們把這種層次也作為一個屬性標示在SST符之上,用LEVEL屬性來表示。一般情況下,LEVEL=1,表示這個逗號前的小句是核心小句,一個句號中經常可以有多個LEVEL=1的小句。
下例中第一個小句是核心小句,其逗號後標示有LEVEL=1,第四個逗號和其後的句號,是“說明”的主體內容,標示有LEVEL=2,第二個和第三個逗號前的內容是一個小句,是後面小句“是”的指示物件,標示有LEVEL=3:
① 這裡要著重說明,|SST, LC_EXP=SS_CORE, QFC=SS_EP_ER, LEVEL=1
在社會主義市場經濟條件下,|DBT, LC_EXP=ABK
② 政府提出國內生產總值增長速度的目標,|SST, LC_EXP=SS, QFC=SS_DJ, LEVEL=3
③ 是一個預期性、指導性指標,|SST, LC_EXP=SS, QFC=SS_AND, LEVEL=2
④ 是提出財政預算、就業、物價等宏觀經濟指標的重要依據。 |SST, LC_EXP=SS, LEVEL=2
這裡的逗號的層次,如果翻譯成英文,看起來會更直觀一些,層次較低的小句,一般翻譯為英文的從句。示例對應的英文如下。
It is important to mention here that in a socialist market economy, a target for GDP growth set by the government is a guide and an indicator of the anticipated level. It serves as an important basis for setting macroeconomic targets for the budget, employment and prices.
逗號的層次識別,可以根據句間連詞等顯式標記詞來判定,如表因果關係的“因為......,所以......”,後一個小句的層次高於前一個小句。對沒有句間連詞的小句,只能透過上下文,來判斷小句間語義的包含關係或遞進關係。
5.語義關係的傳遞
在逗號的層次識別中,我們一般處理的是兩個相鄰小句之間的關係,從而給出相鄰小句兩兩之間的層次。如果有多個逗號的話,在相鄰兩兩關係確定後,對於每個小句和LEVEL=1的核心小句之間的語義關係,則需要利用其中的並列關係、遞進關係等來進行傳遞。
我們來看下上節例子中的傳遞。示例共有4個小句,發生了2次小句關係的傳遞。
首先,小句①的核心是“說明”,是核心小句,從語義上來說,它與後面的小句②構成SS_EP_ER關係,此時,小句①的LEVEL=1,小句②的LEVEL=2 。
其次,小句③中核心為“是”,語義上來說,小句②和小句③是SS_EG_EL關係,小句②的層次比小句③低一級,因此,把小句②與小句①之間的SS_EP_ER關係傳遞給小句③,即小句①與小句③的關係是SS_EP_ER關係,此時,小句②的LEVEL=3,小句③的LEVEL=2。
再次,小句③和小句④是並列關係,因此將小句①和小句③的關係SS_EP_ER傳遞給小句④。
上面的例子是小句關係向後傳遞的,也可以有向前傳遞。看下面示例。
① 建立鞏固的國防,|SST, QFC=SS_AND, LEVEL=2
② 建設強大的人民軍隊,|SST, QFC=SS_EG_EL LEVEL=2
③ 是社會主義現代化建設的戰略任務。|SST, LEVEL=1
示例共有3個小句,小句②和小句③是SS_EG_EL關係,其中,小句③是核心小句,其LEVEL=1。由於小句②和小句①是並列關係SS_AND,因此小句③和小句①也是SS_EG_EL關係。
透過上述五個環節的處理,我們可以對每個逗號,都標示出其切分功能(SST或DBT),並透過形式化屬性,給出逗號前小句的抽象描述(LC_EXP屬性),給出逗號之間的語義關係(QFC屬性),並給出逗號的層次。
四、逗號形式化處理的啟示
我們可以從上述逗號處理中得到如下啟示:
1、 我們需要充分認識每一個語言符號。即使如逗號這樣看似功能簡單、容易忽視的語言符號,也具有豐富的語言知識。這些知識可以幫我們將複雜的語言現象,分解為相對簡單的小句來處理,不僅簡化了NLP處理的複雜度,而且可以進一步推動深層次語義理解的能力。
2、我們不能把自然語言簡單的作為一個sequence序列來處理。自然語言是非線性的,有其內在結構。這一點,在以逗號切分的小句間,也是成立的。小句間的語言結構,不僅有層次性,而且其關係也可以傳遞。
3、NLP技術的研究開發,需要將語言知識與計算技術很好地融合。脫離語言知識,而追求演算法的普適性,是捨本求末。
認識、尊重每一個語言特徵,是NLP人必須具備的基本素養。
作者:晉耀紅博士,神州泰嶽首席科學家,人工智慧研究院院長,北京師範大學教授,博士生導師。