文本預(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)行講解.
學(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)注.