4.1 文本預(yù)處理

文本預(yù)處理

1.1 認(rèn)識文本預(yù)處理

學(xué)習(xí)目標(biāo):

了解什么是文本預(yù)處理及其作用.

了解文本預(yù)處理中包含的主要環(huán)節(jié).

文本預(yù)處理及其作用:

文本語料在輸送給模型前一般需要一系列的預(yù)處理工作, 才能符合模型輸入的要求, 如: 將文本轉(zhuǎn)化成模型需要的張量, 規(guī)范張量的尺寸等, 而且科學(xué)的文本預(yù)處理環(huán)節(jié)還將有效指導(dǎo)模型超參數(shù)的選擇, 提升模型的評估指標(biāo).

文本預(yù)處理中包含的主要環(huán)節(jié):

????????????????文本處理的基本方法

????????????????文本張量表示方法

????????????????文本語料的數(shù)據(jù)分析

????????????????文本特征處理

????????????????數(shù)據(jù)增強(qiáng)方法

文本處理的基本方法:

????????????????分詞

????????????????詞性標(biāo)注

????????????????命名實體識別

文本張量表示方法:

????????????????one-hot編碼

????????????????Word2vec

????????????????Word Embedding

文本語料的數(shù)據(jù)分析:

????????????????標(biāo)簽數(shù)量分布

????????????????句子長度分布

????????????????詞頻統(tǒng)計與關(guān)鍵詞詞云

文本特征處理:

????????????????添加n-gram特征

????????????????文本長度規(guī)范

數(shù)據(jù)增強(qiáng)方法:

????????????????回譯數(shù)據(jù)增強(qiáng)法

重要說明:

在實際生產(chǎn)應(yīng)用中, 我們最常使用的兩種語言是中文和英文, 因此, 文本預(yù)處理部分的內(nèi)容都將針對這兩種語言進(jìn)行講解.

1.2 文本處理的基本方法

學(xué)習(xí)目標(biāo):

了解什么是分詞, 詞性標(biāo)注, 命名實體識別及其它們的作用.

掌握分詞, 詞性標(biāo)注, 命名實體識別流行工具的使用方法.

什么是分詞:

分詞就是將連續(xù)的字序列按照一定的規(guī)范重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符, 分詞過程就是找到這樣分界符的過程.

舉個栗子:

工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機(jī)等技術(shù)性器件的安裝工作

['工信處', '女干事', '每月', '經(jīng)過', '下屬', '科室', '都', '要', '親口', '交代', '24', '口', '交換機(jī)', '等', '技術(shù)性', '器件', '的', '安裝', '工作']

分詞的作用:

詞作為語言語義理解的最小單元, 是人類理解文本語言的基礎(chǔ). 因此也是AI解決NLP領(lǐng)域高階任務(wù), 如自動問答, 機(jī)器翻譯, 文本生成的重要基礎(chǔ)環(huán)節(jié).

1.2.1流行中文分詞工具jieba:

愿景: “結(jié)巴”中文分詞, 做最好的 Python 中文分詞組件.

jieba的特性:

????????支持多種分詞模式

????????????????精確模式

????????????????全模式

????????????????搜索引擎模式

? ? ? ? 支持中文繁體分詞

????????支持用戶自定義詞典

jieba的安裝:

pip install jieba

jieba的使用:

精確模式分詞:

試圖將句子最精確地切開,適合文本分析.

>>> import jieba

>>> content = "工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機(jī)等技術(shù)性器件的安裝工作"

>>> jieba.cut(content, cut_all=False) # cut_all默認(rèn)為False

# 將返回一個生成器對象

<generator object Tokenizer.cut at 0x7f065c19e318>

# 若需直接返回列表內(nèi)容, 使用jieba.lcut即可

>>> jieba.lcut(content, cut_all=False)

['工信處', '女干事', '每月', '經(jīng)過', '下屬', '科室', '都', '要', '親口', '交代', '24', '口', '交換機(jī)', '等', '技術(shù)性', '器件', '的', '安裝', '工作']

全模式分詞:

把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能消除 歧義.

>>> import jieba

>>> content = "工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機(jī)等技術(shù)性器件的安裝工作"

>>> jieba.cut(content, cut_all=True) # cut_all默認(rèn)為False

# 將返回一個生成器對象

<generator object Tokenizer.cut at 0x7f065c19e318>

# 若需直接返回列表內(nèi)容, 使用jieba.lcut即可

>>> jieba.lcut(content, cut_all=True)

['工信處', '處女', '女干事', '干事', '每月', '月經(jīng)', '經(jīng)過', '下屬', '科室', '都', '要', '親口', '口交', '交代', '24', '口交', '交換', '交換機(jī)', '換機(jī)', '等', '技術(shù)', '技術(shù)性', '性器', '器件', '的', '安裝', '安裝工', '裝工', '工作']

搜索引擎模式分詞:

在精確模式的基礎(chǔ)上,對長詞再次切分,提高召回率,適合用于搜 索引擎分詞.

>>> import jieba

>>> content = "工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機(jī)等技術(shù)性器件的安裝工作"

>>> jieba.cut_for_search(content)

# 將返回一個生成器對象

<generator object Tokenizer.cut at 0x7f065c19e318>

# 若需直接返回列表內(nèi)容, 使用jieba.lcut_for_search即可

>>> jieba.lcut_for_search(content)

['工信處', '干事', '女干事', '每月', '經(jīng)過', '下屬', '科室', '都', '要', '親口', '交代', '24', '口', '交換', '換機(jī)', '交換機(jī)', '等', '技術(shù)', '技術(shù)性', '器件', '的', '安裝', '工作']

# 對'女干事', '交換機(jī)'等較長詞匯都進(jìn)行了再次分詞.

中文繁體分詞:

針對中國香港, 臺灣地區(qū)的繁體文本進(jìn)行分詞.

>>> import jieba

>>> content = "煩惱即是菩提,我暫且不提"

>>> jieba.lcut(content)

['煩惱', '即', '是', '菩提', ',', '我', '暫且', '不', '提']

使用用戶自定義詞典:

添加自定義詞典后, jieba能夠準(zhǔn)確識別詞典中出現(xiàn)的詞匯,提升整體的識別準(zhǔn)確率.

詞典格式: 每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒.

詞典樣式如下, 具體詞性含義請參照附錄: jieba詞性對照表, 將該詞典存為userdict.txt, 方便之后加載使用.

云計算 5 n

李小福 2 nr

easy_install 3 eng

好用 300

韓玉賞鑒 3 nz

八一雙鹿 3 nz

>>> import jieba

>>> jieba.lcut("八一雙鹿更名為八一南昌籃球隊!")

# 沒有使用用戶自定義詞典前的結(jié)果:

>>> ['八', '一雙', '鹿', '更名', '為', '八一', '南昌', '籃球隊', '!']

>>> jieba.load_userdict("./userdict.txt")

# 使用了用戶自定義詞典后的結(jié)果:

['八一雙鹿', '更名', '為', '八一', '南昌', '籃球隊', '!']

1.2.2流行中英文分詞工具h(yuǎn)anlp:

中英文NLP處理工具包, 基于tensorflow2.0, 使用在學(xué)術(shù)界和行業(yè)中推廣最先進(jìn)的深度學(xué)習(xí)技術(shù).

hanlp的安裝:

# 使用pip進(jìn)行安裝

pip install hanlp

使用hanlp進(jìn)行中文分詞:

>>> import hanlp

# 加載CTB_CONVSEG預(yù)訓(xùn)練模型進(jìn)行分詞任務(wù)

>>> tokenizer = hanlp.load('CTB6_CONVSEG')

>>> tokenizer("工信處女干事每月經(jīng)過下屬科室都要親口交代24口交換機(jī)等技術(shù)性器件的安裝工作")

['工信處', '女', '干事', '每', '月', '經(jīng)過', '下', '屬', '科室', '都', '要', '親口', '交代', '24口', '交換機(jī)', '等', '技術(shù)性', '器件', '的', '安裝', '工作']

使用hanlp進(jìn)行英文分詞:

# 進(jìn)行英文分詞, 英文分詞只需要使用規(guī)則即可

>>> tokenizer = hanlp.utils.rules.tokenize_english

>>> tokenizer('Mr. Hankcs bought?hankcs.com?for 1.5 thousand dollars.')

['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.']

1.3什么是命名實體識別:

命名實體: 通常我們將人名, 地名, 機(jī)構(gòu)名等專有名詞統(tǒng)稱命名實體. 如: 周杰倫, 黑山縣, 孔子學(xué)院, 24輥方鋼矯直機(jī).

顧名思義, 命名實體識別(Named Entity Recognition,簡稱NER)就是識別出一段文本中可能存在的命名實體.

舉個栗子:

魯迅, 浙江紹興人, 五四新文化運動的重要參與者, 代表作朝花夕拾.

魯迅(人名) / 浙江紹興(地名)人 / 五四新文化運動(專有名詞) / 重要參與者 / 代表作 / 朝花夕拾(專有名詞)

命名實體識別的作用:

同詞匯一樣, 命名實體也是人類理解文本的基礎(chǔ)單元, 因此也是AI解決NLP領(lǐng)域高階任務(wù)的重要基礎(chǔ)環(huán)節(jié).

使用hanlp進(jìn)行中文命名實體識別:

>>> import hanlp

# 加載中文命名實體識別的預(yù)訓(xùn)練模型MSRA_NER_BERT_BASE_ZH

>>> recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)

# 這里注意它的輸入是對句子進(jìn)行字符分割的列表, 因此在句子前加入了list()

# >>> list('上海華安工業(yè)(集團(tuán))公司董事長譚旭光和秘書張晚霞來到美 國紐約現(xiàn)代藝術(shù)博物館參觀。')

# ['上', '海', '華', '安', '工', '業(yè)', '(', '集', '團(tuán)', ')', '公', '司', '董', '事', '長', '譚', '旭', '光', '和', '秘', '書', '張', '晚', '霞', '來', '到', '美', '國', '紐', '約', '現(xiàn)', '代', '藝', '術(shù)', '博', '物', '館', '參', '觀', '。']

>>> recognizer(list('上海華安工業(yè)(集團(tuán))公司董事長譚旭光和秘書張晚霞來到美國紐約現(xiàn)代藝術(shù)博物館參觀。'))

[('上海華安工業(yè)(集團(tuán))公司', 'NT', 0, 12), ('譚旭光', 'NR', 15, 18), ('張晚霞', 'NR', 21, 24), ('美國', 'NS', 26, 28), ('紐約現(xiàn)代藝術(shù)博物館', 'NS', 28, 37)]

# 返回結(jié)果是一個裝有n個元組的列表, 每個元組代表一個命名實體, 元組中的每一項分別代表具體的命名實體, 如: '上海華安工業(yè)(集團(tuán))公司'; 命名實體的類型, 如: 'NT'-機(jī)構(gòu)名; 命名實體的開始索引和結(jié)束索引, 如: 0, 12.

使用hanlp進(jìn)行英文命名實體識別:

>>> import hanlp

# 加載英文命名實體識別的預(yù)訓(xùn)練模型CONLL03_NER_BERT_BASE_UNCASED_EN

>>> recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN))

# 這里注意它的輸入是對句子進(jìn)行分詞后的結(jié)果, 是列表形式.

>>> recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "House"])

[('Obama', 'PER', 1, 2), ('White House', 'LOC', 6, 8)]

# 返回結(jié)果是一個裝有n個元組的列表, 每個元組代表一個命名實體, 元組中的每一項分別代>表具體的命名實體, 如: 'Obama', 如: 'PER'-人名; 命名實體的開始索引和結(jié)束索引, 如: 1, 2.

1.4什么是詞性標(biāo)注:

詞性: 語言中對詞的一種分類方法,以語法特征為主要依據(jù)、兼顧詞匯意義對詞進(jìn)行劃分的結(jié)果, 常見的詞性有14種, 如: 名詞, 動詞, 形容詞等.

顧名思義, 詞性標(biāo)注(Part-Of-Speech tagging, 簡稱POS)就是標(biāo)注出一段文本中每個詞匯的詞性.

舉個栗子:

我愛自然語言處理

我/rr, 愛/v, 自然語言/n, 處理/vn

rr: 人稱代詞

v: 動詞

n: 名詞

vn: 動名詞

詞性標(biāo)注的作用:

詞性標(biāo)注以分詞為基礎(chǔ), 是對文本語言的另一個角度的理解, 因此也常常成為AI解決NLP領(lǐng)域高階任務(wù)的重要基礎(chǔ)環(huán)節(jié).

使用jieba進(jìn)行中文詞性標(biāo)注:

>>> import jieba.posseg as pseg

>>> pseg.lcut("我愛北京天安門")

[pair('我', 'r'), pair('愛', 'v'), pair('北京', 'ns'), pair('天安門', 'ns')]

# 結(jié)果返回一個裝有pair元組的列表, 每個pair元組中分別是詞匯及其對應(yīng)的詞性, 具體詞性含義請參照[附錄: jieba詞性對照表]()

使用hanlp進(jìn)行中文詞性標(biāo)注:

>>> import hanlp

# 加載中文命名實體識別的預(yù)訓(xùn)練模型CTB5_POS_RNN_FASTTEXT_ZH

>>> tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)

# 輸入是分詞結(jié)果列表

>>> tagger(['我', '的', '希望', '是', '希望', '和平'])

# 結(jié)果返回對應(yīng)的詞性

['PN', 'DEG', 'NN', 'VC', 'VV', 'NN']

使用hanlp進(jìn)行英文詞性標(biāo)注:

>>> import hanlp

# 加載英文命名實體識別的預(yù)訓(xùn)練模型PTB_POS_RNN_FASTTEXT_EN

>>> tagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN)

# 輸入是分詞結(jié)果列表

>>> tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.'])

['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']

小節(jié)總結(jié):

學(xué)習(xí)了什么是分詞:

分詞就是將連續(xù)的字序列按照一定的規(guī)范重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡單劃界,唯獨詞沒有一個形式上的分界符, 分詞過程就是找到這樣分界符的過程.

學(xué)習(xí)了分詞的作用:

詞作為語言語義理解的最小單元, 是人類理解文本語言的基礎(chǔ). 因此也是AI解決NLP領(lǐng)域高階任務(wù), 如自動問答, 機(jī)器翻譯, 文本生成的重要基礎(chǔ)環(huán)節(jié).

學(xué)習(xí)了流行中文分詞工具jieba:

支持多種分詞模式: 精確模式, 全模式, 搜索引擎模式

支持中文繁體分詞

支持用戶自定義詞典

學(xué)習(xí)了jieba工具的安裝和分詞使用.

學(xué)習(xí)了流行中英文分詞工具h(yuǎn)anlp及其安裝和分詞使用.

學(xué)習(xí)了什么是命名實體識別:

命名實體: 通常我們將人名, 地名, 機(jī)構(gòu)名等專有名詞統(tǒng)稱命名實體. 如: 周杰倫, 黑山縣, 孔子學(xué)院, 24輥方鋼矯直機(jī).

顧名思義, 命名實體識別(Named Entity Recognition,簡稱NER)就是識別出一段文本中可能存在的命名實體.

命名實體識別的作用:

同詞匯一樣, 命名實體也是人類理解文本的基礎(chǔ)單元, 因此也是AI解決NLP領(lǐng)域高階任務(wù)的重要基礎(chǔ)環(huán)節(jié).

學(xué)習(xí)了使用hanlp進(jìn)行命名實體識別.

學(xué)習(xí)了什么是詞性標(biāo)注:

詞性: 語言中對詞的一種分類方法,以語法特征為主要依據(jù)、兼顧詞匯意義對詞進(jìn)行劃分的結(jié)果, 常見的詞性有14種, 如: 名詞, 動詞, 形容詞等.

顧名思義, 詞性標(biāo)注(Part-Of-Speech tagging, 簡稱POS)就是標(biāo)注出一段文本中每個詞匯的詞性.

學(xué)習(xí)了詞性標(biāo)注的作用:

詞性標(biāo)注以分詞為基礎(chǔ), 是對文本語言的另一個角度的理解, 因此也常常成為AI解決NLP領(lǐng)域高階任務(wù)的重要基礎(chǔ)環(huán)節(jié).

學(xué)習(xí)了使用jieba和hanlp進(jìn)行詞性標(biāo)注.

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

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