speech and language processing-----2.3--2.4

2.3 corpus

語(yǔ)料庫(kù)的變化維度:
(1) 語(yǔ)種:開(kāi)發(fā)出的算法,一般是適用于英語(yǔ)或者針對(duì)工業(yè)化大國(guó)的官方語(yǔ)言(漢語(yǔ)、西班牙語(yǔ)、日語(yǔ)、德語(yǔ)等)開(kāi)發(fā)的,但我們不希望將工具僅僅局限在這幾種語(yǔ)言上。
多數(shù)語(yǔ)言也有多個(gè)變種,即所謂的方言。
說(shuō)話者或?qū)懽髡咴趯?shí)際交流或?qū)懽鲿r(shí)同時(shí)使用多種語(yǔ)言是非常常見(jiàn)的,這種現(xiàn)象稱為語(yǔ)碼轉(zhuǎn)換(code switching).
(2) 體裁:新聞、小說(shuō)、會(huì)議紀(jì)要等等。
(3) 文本還反映了作者(或說(shuō)話人)的人口統(tǒng)計(jì)學(xué)特征:他們的年齡、性別、種族、社會(huì)經(jīng)濟(jì)階層都會(huì)影響我們所處理文本的語(yǔ)言屬性。
(4) 時(shí)間也很重要。語(yǔ)言會(huì)隨著時(shí)間的推移而變化。
由于語(yǔ)言是如此的具有情境性(situated),所以當(dāng)根據(jù)語(yǔ)料庫(kù)來(lái)開(kāi)發(fā)語(yǔ)言處理模型時(shí),為每個(gè)語(yǔ)料庫(kù)建立一個(gè)datasheet或datastatement。
需要包括:Motivation、Situation、Language variety、Speaker demographics、Collection process、Annotation process、Distribution。

2.4 Text Normalization

At least three tasks are commonly applied as part of any normalization process:

  1. Tokenizing (segmenting) words
  2. Normalizing word formats
  3. Segmenting sentences

2.4.1 用于粗略分詞和規(guī)范化的 Unix 工具

tr -sc 'A-Za-z' '\n' < sh.txt | tr A-Z a-z | sort | uniq -c | sort -n -r

2.4.2 分詞(Word Tokenization)

Unix 命令過(guò)濾了所有的數(shù)字和標(biāo)點(diǎn)符號(hào),但對(duì)于大多數(shù) NLP 應(yīng)用來(lái)說(shuō),我們需要在分詞任務(wù)中保留這些字符。我們往往想把標(biāo)點(diǎn)符號(hào)視作一個(gè)單獨(dú)詞;對(duì)于解析器來(lái)說(shuō),逗號(hào)是一個(gè)有用的信息。句號(hào)有助于指示句子的邊界。

一個(gè)常用的分詞標(biāo)準(zhǔn)是 Penn Treebank 分詞(Penn Treebank tokenization)標(biāo)準(zhǔn),用于語(yǔ)言數(shù)據(jù)聯(lián)盟(Linguistic Data Consortium)(LDC)發(fā)布的解析語(yǔ)料庫(kù)(treebanks),它是許多有用數(shù)據(jù)集的來(lái)源。
在實(shí)踐中,由于分詞需要在其他自然語(yǔ)言處理任務(wù)之前進(jìn)行,所以它必須非???。因此,分詞的標(biāo)準(zhǔn)方法是使用基于正則表達(dá)式的確定性算法,這些正則表達(dá)式被編譯成非常高效的有限狀態(tài)自動(dòng)機(jī)(finite state automata)。

2.4.3 用于分詞的字節(jié)對(duì)編碼(Byte-Pair Encoding for Tokenization)

NLP 算法通常會(huì)從一個(gè)語(yǔ)料庫(kù)(訓(xùn)練語(yǔ)料庫(kù))進(jìn)行學(xué)習(xí),從中提取一些關(guān)于語(yǔ)言的事實(shí),然后利用這些事實(shí)對(duì)另外一個(gè)測(cè)試語(yǔ)料庫(kù)進(jìn)行推理。

假設(shè)我們的訓(xùn)練語(yǔ)料庫(kù)中包含,比如說(shuō) low、new、newer 等詞,但不包含 lower,那么如果在測(cè)試語(yǔ)料庫(kù)中出現(xiàn)了 lower 這個(gè)詞,我們的系統(tǒng)就不知道該怎么處理它了。

為了處理這種未登錄詞的問(wèn)題,現(xiàn)代分詞器通常會(huì)自動(dòng)推導(dǎo)出包括比詞(words)更小的 token 集,稱為子詞(subwords)。子詞可以是任意的子串,也可以是有語(yǔ)義的單位如 -est 或 -er 這種語(yǔ)素。

大多數(shù)分詞方案有兩個(gè)部分:一個(gè) token 學(xué)習(xí)器(token learner)和一個(gè) token 分割器(token segmenter)。Token 學(xué)習(xí)器使用原始訓(xùn)練語(yǔ)料庫(kù)(有時(shí)會(huì)預(yù)先進(jìn)行粗略分詞,如使用空格),然后得到一個(gè)詞匯表(vocabulary),一個(gè) token 集合。Token 分割器將一個(gè)原始測(cè)試句子分割成詞匯表中的 token。有三種廣泛使用的算法:字節(jié)對(duì)編碼byte-pair encoding)、一元語(yǔ)法語(yǔ)言模型unigram language modeling) 和 WordPiece;還有一個(gè) SentencePiece 庫(kù),包含了這三種算法中前兩種的實(shí)現(xiàn)。
這里值得注意的是,BERT、T5等都是使用的WordPiece分詞器。

PBE算法詳解
BPE 的 token 學(xué)習(xí)器從一個(gè)初始詞匯表開(kāi)始,這個(gè)詞匯表只是所有單個(gè)字符(characters)的集合。然后它遍歷訓(xùn)練語(yǔ)料庫(kù),選擇兩個(gè)最常相鄰的符號(hào)(symbol)(比如說(shuō) ‘A’、‘B’),將兩者合并成一個(gè)新的符號(hào)‘AB’添加到詞匯表中,并將語(yǔ)料庫(kù)中每一個(gè)相鄰的‘A’‘B’替換為新的‘AB’。以此循環(huán)往復(fù),得到新的越來(lái)越長(zhǎng)的字符串,直到完成了 k次合并,創(chuàng)造了k個(gè)新的符號(hào);因此k是算法的一個(gè)參數(shù)。最終產(chǎn)生的詞匯表由原來(lái)的字符集加上k個(gè)新的符號(hào)組成。

The token learner part of the BPE algorithm

通常是在詞內(nèi)部運(yùn)行該算法(不會(huì)跨越詞邊界進(jìn)行合并),所以先將輸入語(yǔ)料庫(kù)進(jìn)行空格分割,得到一組字符串,每個(gè)字符串對(duì)應(yīng)一個(gè)詞的字符,再加上一個(gè)特殊的詞尾符號(hào) _,以及其頻數(shù)。我們以下面這個(gè)包含 18 個(gè) token 及其頻數(shù)的微型語(yǔ)料庫(kù)為例來(lái)說(shuō)明算法時(shí)如何運(yùn)行的(詞 low 出現(xiàn) 5 次,詞 newer 出現(xiàn) 6 次,以此類推),初始詞匯表有 11 個(gè)字符:

語(yǔ)料庫(kù):
5  l o w _
2  l o w e s t _
6  n e w e r _
3  w i d e r _
2  n e w _

詞匯表:
_, d, e, i, l, n, o, r, s, t, w

核心思想:獲取相鄰符號(hào)對(duì)頻數(shù)最高的進(jìn)行連接,加入詞匯表
具體步驟如下
e 和r 相鄰共現(xiàn)的頻次是最高的為9, 當(dāng)然了 r 和_ 也是9, 這里以e和r先共現(xiàn)為例子。

步驟序號(hào) 合并 最高相鄰共現(xiàn)詞頻 當(dāng)前詞匯表
1 (e, r) 9 _, d, e, i, l, n, o, r, s, t, w, er
2 (er, _) 9 , d, e, i, l, n, o, r, s, t, w, er, er
3 (n, e) 8 , d, e, i, l, n, o, r, s, t, w, er, er, ne
4 (ne, w) 8 , d, e, i, l, n, o, r, s, t, w, er, er, ne, new
5 (l, o) 7 , d, e, i, l, n, o, r, s, t, w, er, er, ne, new, lo
6 (lo, w) 7 , d, e, i, l, n, o, r, s, t, w, er, er, ne, new, lo, low
7 (new, er_) 6 , d, e, i, l, n, o, r, s, t, w, er, er, ne, new, lo, low, newer_
8 (low, _) 5 , d, e, i, l, n, o, r, s, t, w, er, er, ne, new, lo, low, newer_, low_

一旦我們學(xué)到了詞匯表,token 解析器(token parser)就會(huì)對(duì)測(cè)試句子進(jìn)行分詞。Token 解析器會(huì)按照詞匯表順序,貪婪地在測(cè)試數(shù)據(jù)上匹配我們從訓(xùn)練數(shù)據(jù)中學(xué)到的詞。
所以,首先我們把每個(gè)測(cè)試句子的詞分割成字符。然后我們會(huì)應(yīng)用第一條規(guī)則:將測(cè)試語(yǔ)料庫(kù)中的 e r 替換為 er,然后應(yīng)用第二條規(guī)則:將測(cè)試語(yǔ)料庫(kù)中的 er _ 替換為 er_,以此類推。到最后,如果測(cè)試語(yǔ)料庫(kù)中包含 n e w e r _這個(gè)詞,它將被分為一個(gè)完整的詞。但是,一個(gè)新的(未知)單詞,如 l o w e r ,將被分成兩個(gè) token:low er。

2.4.4 詞規(guī)范化,詞形還原和詞干提?。╓ord Normalization, Lemmatization and Stemming)

詞的規(guī)范化是將詞或者 token 轉(zhuǎn)成標(biāo)準(zhǔn)格式的任務(wù),對(duì)于有多種形式的詞,如 USA 和 US 或 uh-huh 和 uhhuh,選擇一個(gè)規(guī)范形式。
大小寫(xiě)折疊(Case folding)是另一種規(guī)范化方法。
詞形還原(Lemmatization)是確定兩個(gè)詞盡管表面存在差異但具有相同詞根(root)的任務(wù) 。形態(tài)學(xué)(Morphology)是研究詞是如何由較小的語(yǔ)義單位(稱為語(yǔ)素)構(gòu)成的。語(yǔ)素可以分為兩大類:詞干(stems)—— 詞的中心語(yǔ)素,詞的主要含義;詞綴(affixes)—— 增加各種“附加”(additional)意義。
詞形還原算法比較復(fù)雜。出于這個(gè)原因,我們有時(shí)會(huì)使用一種更簡(jiǎn)單但更粗糙的方法,主要是去掉詞尾后綴。這種形態(tài)學(xué)分析的 naive 版本被稱為詞干提?。╯temming)。

2.4.5 分句(Sentence Segmentation*)

分句Sentence segmentation)是文本處理的另一個(gè)重要步驟。將文本分割成句子最有用的線索是標(biāo)點(diǎn)符號(hào),如句號(hào)、問(wèn)號(hào)和感嘆號(hào)。問(wèn)號(hào)和感嘆號(hào)是相對(duì)明確的句子邊界標(biāo)記。而句號(hào)則比較含糊,既可以作為在句子邊界標(biāo)記,也可以作為縮寫(xiě)標(biāo)記如 Mr.Inc.你剛才讀到的上一句話顯示了這種歧義的更復(fù)雜的情況,其中 Inc. 的最后一個(gè)句號(hào)既表示縮寫(xiě),又表示句子邊界。因此,分句和分詞可以合并一起進(jìn)行。

一般來(lái)說(shuō),分句首先需要確定句號(hào)是詞的一部分還是句子邊界標(biāo)記(基于規(guī)則或機(jī)器學(xué)習(xí))??s略語(yǔ)詞典可以幫助確定句號(hào)是否是常用縮略語(yǔ)的一部分;詞典可以是手工建立的,也可以是機(jī)器學(xué)習(xí)到的 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容