一、簡單介紹
? ? ? ? NLP(Natural Language Processing):自然語言處理是人工智能和語言領域的一個分支,它涉及計算機和人類語言之間的相互作用。
二、NLP基礎概念
? ? ? ? 詞表(詞庫):文本數據集出現的所有單詞的集合;
? ? ? ? 語料庫:用于自然語言處理NLP的文本數據集合,可以是書籍、文章、網頁等;
注意:
詞庫需去重:避免冗余,確保每個詞匯的屬性記錄唯一。
語料庫無需刻意去重:保留重復以反映真實語言使用規律,支撐統計分析。
? ? ? ? 詞嵌入:將單詞、文本映射到低維度的連續向量空間的技術,用于捕捉單詞的語義和語法信息;? ?
三、NLP的特征工程
3.0特征工程提出的必要? ? ? ? ?
? ? ? ? 在NLP中,我們處理的對象通常是文本資料,但是計算機只能識別數字信息。因此,特征工程是一種必要的手段:特征工程將文本數據轉換為適合機器學習模型使用的數值表示過程,即將文本信息轉換為數字信息的過程。
3.1詞向量
? ? ? ? 詞向量也稱為詞嵌入(word embedding):指的是將文本資料轉換為低維連續向量的過程。這些向量能夠體現詞語之間的語義關系。
? ? ? ? 通過詞嵌入這種方式,每一個單詞都有唯一的詞向量,將文本數據信息轉換為了數字信息,這樣機器就可以對單詞進行計算,如利用余弦相似度公式,可以得出單詞之間的相似度,相似度越高,兩個單詞在向量空間中靠的越近,夾角越小。
3.2傳統的NLP特征工程
3.2.1one-hot獨熱編碼
? ? ? ? one-hot:將每一個類別表示為一個向量,它的組成只能由0,1組成,并且在表示一個單詞的時候,只能有一個單詞為1,其他單詞必須全部為0。
? ? ? ? 因此,我們可以發現,如果單純利用獨熱編碼表示向量,
(1)我們寫的文本資料多有少個字,那向量就有多長,這樣會導致計算量巨大;
(2)想表示一段話的時候,最多不超過30個字,這時候其他的位置就必須全部為0,向量矩陣過于稀疏。
3.2.2詞頻-逆文檔頻率(TF-IDF)
????????詞頻TF:在給定文檔中,單個單詞在文章中出現的頻率-----出現次數/該文檔的總詞數
? ? ? ? 逆文檔頻率IDF:用于衡量一個單詞的重要程度,是將類似詞頻取倒數并取對數的值;
注意:
IDF 大的詞,說明它在多數文檔中不出現,僅在特定文檔中出現,因此能有效區分不同主題的文檔
? ? ? ? TF-IDF:綜合考慮了詞頻和逆文檔頻率,取值為詞頻與逆文檔頻率的乘積結果。
3.3深度學習中NLP的特征輸入
3.3.1稠密編碼
? ? ? ? 稠密編碼的方式通常在特征嵌入中出現:將離散或高維稀疏數據轉化為低維的連續、密集向量。
? ? ? ? 特點:
(1)低維度:轉換為低維度的向量之后,減少了計算和存儲成本;
(2)語義相似度:引入余弦相似度公式計算語義相似性;
(3)可微學習:通過神經網絡進行學習,反向傳播算法進行優化。
3.3.2詞嵌入算法
3.3.2.1embedding layer
? ? ? ? 嵌入層用于神經網絡的前端,并采用反向傳播算法進行監督(更新優化)。向量矩陣以小的隨機數進行初始化。
? ? ? ? 它主要是用來實現輸入詞的向量化的。
????????API:nn.Embedding(len(set_word),embedding_dim)
?將輸入詞轉換為詞向量的步驟:
(1)對文本進行分詞;
(2)構建映射詞表,這里必須用去重的句子;
(3)使用嵌入層,調用nn.Embedding.
代碼:
import torch
import torch.nn as nn
sentences = 'I like a dog , it is cute'
#分詞
sentences = sentences.split(' ')#去重
sentences = list(set(sentences))#映射
word_index = {word:index for index,word in enumerate(sentences)}
index_word = {index:word for index,word in enumerate(sentences)}#向量化
embedding = nn.Embedding(len(sentences),4)
index = word_index['dog']
output = embedding(torch.tensor([index]))
print(output)
結果:
tensor([[-0.1077, -1.3688, -0.5193, -0.2856]], grad_fn=<EmbeddingBackward0>)
3.3.2.2word2vec
? ? ? ? word2vec是一種高效訓練詞向量的模型。一般分為CBOW模型和Skip-Gram模型:
(1)CBOW:根據周圍詞來預測中心詞;
(2)Skip-Gram:根據中心詞預測周圍詞。
API:from gensim.model import Word2Vec
gensim庫需要自行下載:pip install gensim
model = Word2Vec(sentences,vector_size,window,min_count,sg)
參數介紹:
sentences:二維list。
vector_size:特征信息維度。
window:當前詞與預測詞在一個句子中最大的距離。
min_count:可以對字典做截斷,詞頻少于min_count次數的單詞會被丟棄掉,默認值為5。
sg:設置為0,對應CBOW算法;設置為1對應Skip-Gram算法。
四、總結
? ? ? ? 大致了解了NLP的簡單術語,以及如何通過嵌入層實現對文本進行向量化,還可以利用現成模型word2vec對單詞向量化。主要是了解一下大致知識就行,過過代碼就可以了。本節內容要求沒有嚴格。