NLP中建立的訓練集詞表 字典 的目的是什麼呢?和已經預訓練好的詞向量之間有什麼關係?

時間 2021-05-14 09:42:32

1樓:阿良

首先明確題主的問題:為什麼我們要構建訓練集的詞表(字典)?這個詞表和已經訓練好的詞向量之間的關係是什麼?

為什麼要構建訓練集的詞表?

構建詞表的目的是對字串表示的詞進行向量化。因為當前的自然語言處理模型都是基於統計機器學習,只能在數學上進行各種計算,這樣就勢必要求將字串表示的文字數位化。假設我們有一堆詞,如何將詞數位化、向量話?

目前的方法就是先構建乙個詞表,將所有的詞囊括進來,然後在文字中對每乙個詞都能夠在這個詞表裡面查到它的索引。類似我們小學時每人都有一本新華字典,遇到不認識的詞可以去字典里查。機器也一樣,它需要乙個字典將去查每個詞的索引。

最後對這個索引深度學習有個詞向量的表示。這個向量化的表示就像新華字典中詞的釋義存放了詞的語義資訊。這是我們為什麼要構建構建詞典的原因,那為什麼只對訓練集構建詞典呢?

因為對機器而言,驗證集和測試集是不可見的。就像考試前我們只能看到模擬題和往年的試題,不知道當年考試的真題一樣。

這個詞表和已經訓練好的詞向量之間的關係?

這個詞表是我們這個訓練集中所有涉及到的詞,假設為V1.已經訓練好的詞向量是用來訓練這個詞向量所使用的資料集中的所有的詞,假設為V2. 所以通常我們會遍歷一遍V2,如果V2中的詞同時也會出現在V1中,我們就把它載入進來。

2樓:磐石

建立詞表的目的是為了對映到int型的index上面,建立索引,這樣每個單詞都有乙個整數索引號,這個索引號也就是詞向量矩陣中的行,比如""我"的索引號對應是0,那麼詞向量矩陣中第0行就是詞語我的向量表示

字典對應的索引號應該和已經訓練好的詞向量對應,就是同乙個詞語對應的索引號應該是相同的

3樓:

嵌入層就是一張詞向量表,如果設定嵌入層引數在訓練過程中不更新,則需要傳入預訓練詞向量矩陣,如果設定嵌入層更新(應該是大部分深度學習庫的預設設定)那麼嵌入層引數會隨著訓練過程更新,此時既可以傳入預訓練詞向量矩陣,也可以不傳入,即使傳入了,更新過程也會執行,也就是說會調整預訓練詞向量矩陣的元素值。

4樓:打我丿我就跑

訓練好的詞向量裡面已經沒有任何詞語了,就是純數字。

這時候,你怎麼將你輸入的文字中的詞用詞向量嵌入,你對應不上了啊這個時候,詞典的作用就來了,比如,詞典中'',這樣在製作好的詞向量文件中,索引第100行資料,就是蘋果對應的詞向量啦。

而且一般不是所有的詞都需要的,一般去除一些停用詞,詞頻較低的詞,剩下的詞,製作詞典;

詞向量文件也按詞典詞順序,儲存詞向量值。

這樣用的記憶體也少些,程式讀入少費些時間。

我以前練手的demo中,在資料處理中有用這種方法的,你可以看看。

5樓:成長的羊

NLP中詞向量可以是用預先訓練好的,也可以是在訓練模型的時候隨機初始化--將詞向量也變成神經網路的引數去訓練。

如果是載入已經訓練好的詞向量,那麼訓練集詞表的目的是讓詞向量和詞一一對應。

訓練的時候只需要載入在訓練集詞表中出現詞的詞向量,但是需要給未登入詞(詞表中沒有的詞)賦予乙個新的向量。Tensorflow2.0裡形如:

table=tf

.lookup

.StaticVocabularyTable

(table_init

,num_oov_buckets

)具體可以看這篇:從零開始用Tensorflow2.0 Keras 完成NLP分類任務並使用serving進行部署

雜湊表 字典 二維陣列的區別是什麼?

漁歌 這個就是是乙個二維矩陣,或者說是乙個二維座標系,當橫縱座標x,y都確定的話,那座標系上的那個點的位置也就確定。例如 array i j 就是乙個二維陣列當中,第i行第j列儲存的乙個值。這個就是一種方式吧,對二維矩陣進行使用的一種 方式 比較難以區分的是雜湊表和字典,在這個回答中也看到了兩個完全...

在nlp語言模型中線性插值的目的是什麼?

做線性插值是為了同時利用不同階的資訊。在ngram語言模型裡,n越大利用的上下文也越多,但估計概率起來也越稀疏。由於稀疏,經常會出現某個高階ngram從來沒在語料裡出現過的情況。這時候就這樣認為其概率為零顯然不合適,相對更好的辦法就是回退到 n 1 gram,如此類推 不高興 最近再看http ww...

心理學 NLP 中的 anchor 是什麼?

子陽 賦難者 anchor,從字面意思來看,是 錨 的意思。那什麼是 錨 呢?不就是乙個前端為鉤狀物後端是繩子的東西,這個東西和容易讓人聯想起來用它勾著周圍的物體,從而和自身建立起聯絡。其實,anchor類似於心理學和生理學中條件反射這個概念,行為主義的觀點就是我們通過各種條件反射與周圍世界形成聯絡...