網(wǎng)站空間和數(shù)據(jù)庫空間seo基礎(chǔ)入門視頻教程
文章目錄
- 1、本章目標(biāo)
- 2、n-gram特征
- 2.1、概念
- 2.2、舉個例子
- 2.3、代碼
- 3、文本長度規(guī)范及其作用
- 4、小結(jié)
🍃作者介紹:雙非本科大三網(wǎng)絡(luò)工程專業(yè)在讀,阿里云專家博主,專注于Java領(lǐng)域?qū)W習(xí),擅長web應(yīng)用開發(fā)、數(shù)據(jù)結(jié)構(gòu)和算法,初步涉獵人工智能和前端開發(fā)。
🦅個人主頁:@逐夢蒼穹
📕所屬專欄:人工智能
🌻gitee地址:xzl的人工智能代碼倉庫
? 您的一鍵三連,是我創(chuàng)作的最大動力🌹
1、本章目標(biāo)
- 了解文本特征處理的作用.
- 掌握實現(xiàn)常見的文本特征處理的具體方法.
- 文本特征處理的作用:
- 文本特征處理包括為語料添加具有普適性的文本特征,如n-gram特征;
- 以及對加入特征之后的文本語料進(jìn)行必要的處理,如長度規(guī)范;
- 這些特征處理工作能夠有效的將重要的文本特征加入模型訓(xùn)練中,增強(qiáng)模型評估指標(biāo)
- 常見的文本特征處理方法:
- 添加n-gram特征
- 文本長度規(guī)范
2、n-gram特征
2.1、概念
給定一段文本序列,其中n個詞或字的相鄰共現(xiàn)特征即n-gram特征,常用的n-gram特征是bi-gram和tri-gram特征,分別對應(yīng)n為2和3。
2.2、舉個例子
這個示例講解了如何從詞匯列表生成數(shù)值特征并擴(kuò)展到 N-gram 特征
首先,理解 N-gram 特征的一些基本概念:
- 詞匯列表:是一個包含文本中所有詞的列表。例如,給定一個句子 “是誰 鼓動 我心”,其詞匯列表為
["是誰", "鼓動", "我心"]
。 - 數(shù)值映射列表:通常用于將每個詞映射到一個唯一的數(shù)字(索引)。例如,可以將
["是誰", "鼓動", "我心"]
映射為[1, 34, 21]
。
N-gram 特征的意思是將文本中的相鄰詞對作為特征。例如,Bigram(2-gram)就是由兩個相鄰的詞組成的特征。
假設(shè)有一個詞匯列表 ["是誰", "鼓動", "我心"]
,對應(yīng)的數(shù)值映射列表為 [1, 34, 21]
。
這些數(shù)值可以被視為單個詞匯的特征(Unigram),即每個詞在序列中的獨立存在。
現(xiàn)在,假設(shè)你要考慮 Bigram 特征(2-gram),即兩個相鄰詞的組合。
步驟:
- 識別相鄰的詞對:在列表中,“是誰” 和 “鼓動” 是相鄰的,“鼓動” 和 “我心” 也是相鄰的。
- 為每個相鄰詞對生成新的特征值:
- 假設(shè)數(shù)字
1000
代表 “是誰” 和 “鼓動” 的相鄰關(guān)系。 - 假設(shè)數(shù)字
1001
代表 “鼓動” 和 “我心” 的相鄰關(guān)系。
- 假設(shè)數(shù)字
結(jié)果:
- 原始的數(shù)值映射列表
[1, 34, 21]
現(xiàn)在擴(kuò)展為包含 Bigram 特征的[1, 34, 21, 1000, 1001]
。
在這個例子中,N-gram 特征的引入使得特征表示不僅僅是詞匯本身,還包括詞匯之間的相鄰關(guān)系(如 “是誰” 和 “鼓動” 的相鄰)。通過引入這些特征,模型可以更好地捕捉詞匯之間的上下文關(guān)系。
具體來說:
- 原來的
[1, 34, 21]
僅表示單個詞匯。 - 添加了 Bigram 特征后,特征列表變?yōu)?
[1, 34, 21, 1000, 1001]
,表示不僅有單個詞匯的信息,還有相鄰詞對的信息。
2.3、代碼
提取n-gram特征:
# -*- coding: utf-8 -*-
# @Author: CSDN@逐夢蒼穹
# @Time: 2024/8/12 21:51
# TODO 一般n-gram中的n取2或者3, 這里取2為例
def create_ngram_set(input_list):# 使用 zip 和列表推導(dǎo)式生成 n-gram 特征ngram_set = set(zip(*[input_list[i:] for i in range(ngram_range)]))return ngram_setif __name__ == '__main__':ngram_range = 2example_input = [1, 4, 9, 4, 1, 4]print(create_ngram_set(example_input))# Output: {(4, 9), (4, 1), (1, 4), (9, 4)}
輸出效果:
# 該輸入列表的所有bi-gram特征
{(3, 2), (1, 3), (2, 1), (1, 5), (5, 3)}
3、文本長度規(guī)范及其作用
一般模型的輸入需要等尺寸大小的矩陣,因此在進(jìn)入模型前需要對每條文本數(shù)值映射后的長度進(jìn)行規(guī)范,
此時將根據(jù)句子長度分布分析出覆蓋絕大多數(shù)文本的合理長度,
對超長文本進(jìn)行截斷,對不足文本進(jìn)行補(bǔ)齊(一般使用數(shù)字0),這個過程就是文本長度規(guī)范
文本長度規(guī)范的實現(xiàn):
# -*- coding: utf-8 -*-
# @Author: CSDN@逐夢蒼穹
# @Time: 2024/8/12 22:39
# 從 Keras 的 preprocessing 模塊中導(dǎo)入 sequence,用于序列處理
from keras.preprocessing import sequence
# 根據(jù)數(shù)據(jù)分析中句子長度的分布,確定覆蓋 90% 左右語料的最短長度
# 這里假定 cutlen 為 10,意味著我們將所有的句子統(tǒng)一處理為長度為 10 的序列
cutlen = 10
def padding(x_train):"""description: 對輸入文本張量進(jìn)行長度規(guī)范,確保所有文本的長度一致:param x_train: 文本的張量表示, 形如: [[1, 32, 32, 61], [2, 54, 21, 7, 19]]這是一個二維列表,其中每個子列表表示一條文本的詞匯索引序列:return: 進(jìn)行截斷補(bǔ)齊后的文本張量表示,輸出的形狀為 (len(x_train), cutlen)如果文本長度小于 cutlen,則補(bǔ)齊至 cutlen;如果文本長度大于 cutlen,則截斷至 cutlen"""# 使用 sequence.pad_sequences 函數(shù)對序列進(jìn)行補(bǔ)齊(或截斷)# pad_sequences 會將每個序列截斷或補(bǔ)齊到相同的長度 cutlen# 默認(rèn)情況下,較短的序列會在前面補(bǔ) 0(默認(rèn)補(bǔ)在序列的左側(cè)),# 較長的序列會從前面截斷(即保留序列的最后 cutlen 個元素)return sequence.pad_sequences(x_train, cutlen)if __name__ == '__main__':# 假定 x_train 里面有兩條文本,一條長度大于 10,一條長度小于 10x_train = [[1, 23, 5, 32, 55, 63, 2, 21, 78, 32, 23, 1], # 長度為 12,超過了 cutlen[2, 32, 1, 23, 1] # 長度為 5,少于 cutlen]# 調(diào)用 padding 函數(shù),對 x_train 中的序列進(jìn)行補(bǔ)齊(或截斷)res = padding(x_train)# 輸出處理后的結(jié)果# 預(yù)期輸出:# array([[ 5, 32, 55, 63, 2, 21, 78, 32, 23, 1], # 第1條序列被截斷至長度10# [ 0, 0, 0, 0, 0, 2, 32, 1, 23, 1]]) # 第2條序列前面補(bǔ)5個0至長度10print(res)
輸出:
E:\anaconda3\python.exe D:\Python\AI\自然語言處理\7-文本長度規(guī)范.py
2024-08-12 22:44:53.195415: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2024-08-12 22:44:54.269741: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
[[ 5 32 55 63 2 21 78 32 23 1][ 0 0 0 0 0 2 32 1 23 1]]Process finished with exit code 0
4、小結(jié)
- 學(xué)習(xí)了文本特征處理的作用:
- 文本特征處理包括為語料添加具有普適性的文本特征,如:n-gram特征,以及對加入特征之后的文本語料進(jìn)行必要的處理,如:長度規(guī)范. 這些特征處理工作能夠有效的將重要的文本特征加入模型訓(xùn)練中,增強(qiáng)模型評估指標(biāo)
- 學(xué)習(xí)了常見的文本特征處理方法:
- 添加n-gram特征
- 文本長度規(guī)范
- 學(xué)習(xí)了什么是n-gram特征:
- 給定一段文本序列,其中n個詞或字的相鄰共現(xiàn)特征即n-gram特征,常用的n-gram特征是bi-gram和tri-gram特征,分別對應(yīng)n為2和3
- 學(xué)習(xí)了提取n-gram特征的函數(shù):create_ngram_set
- 學(xué)習(xí)了文本長度規(guī)范及其作用:
- 一般模型的輸入需要等尺寸大小的矩陣,因此在進(jìn)入模型前需要對每條文本數(shù)值映射后的長度進(jìn)行規(guī)范,此時將根據(jù)句子長度分布分析出覆蓋絕大多數(shù)文本的合理長度,對超長文本進(jìn)行截斷,對不足文本進(jìn)行補(bǔ)齊(一般使用數(shù)字0),這個過程就是文本長度規(guī)范.
- 學(xué)習(xí)了文本長度規(guī)范的實現(xiàn)函數(shù):padding