tf_idf
詞向量句向量
seq2seq 語言生成模型
cnn的語言模型
語言模型的注意力
transformer 將注意力發揮到極致
elmo 一詞多義
gpt 單向語言模型
bert 雙向語言模型
nlp模型的多種應用
使用深度學習的計算機在理解任何事物之前,都是將這件事物轉換成一種數學的表達形式。在ai從業人員看來,ai技術,都是將這些以數字記錄的資料,通過ai模型將其轉化成一串數字。
我們看到的就是原始的資料儲存在計算機中的樣子,中間的模型將當做輸入,然後輸出成右邊的數字,我們稱其為向量。這個向量,就是模型對於這張的理解。你可能會在想,我們不是在說人類的語言嗎?這和有什麼關係?當然是有關係的,機器學習是一類方法,可以運用在上的演算法,我們也能將其拓展到語言上,甚至語言模型用在上的也不少見。我們只需要將這裡的訊號源,從切換到語言就好了。
現在右邊的向量,就是我們通過模型,得到的機器對於一句話的理解。對於這個理解,也就是向量,使用的方法不止一種。
舉個例子,我們可以將其放在空間中,對比這句話與其它同樣轉化成向量的句子的不同含義。那我們又是如何具體得到這些向量理解的呢?我們人類理解句子的前提是理解句子中每個詞語的含義,然後將詞語組成句,看似我們已經找到了一條通往理解句子的光明大道。可是即便計算機能夠通過w2v
拿到對詞語的向量化理解,我們要怎麼使用,才能把它變成對句子的理解呢?
也就是說,我們需要找到一種方法,將這些離散的詞向量
,加工成句向量
。有一種簡單粗暴的方法,試試直接將所有詞向量
相加怎麼樣?
也不是不行,不過我們依舊是在詞向量
的空間上理解句子,如果句子和詞語是有本質區別的事物,那麼他們所屬的空間應該也不同。直接使用加法,沒有辦法創造出乙個全新的空間。那我們還能怎麼辦?用乘法呢?這說對了一半,我們的確可以用乘法來轉移空間屬性,比如使用線性代數的方法,讓乙個空間的向量,在另乙個空間以不同形式表達。而我們現在最常見的方案就是使用神經網路做這樣的複雜乘法運算。在神經網路中,我們常常將這個過程叫做encoding,編碼
。
這個過程類似壓縮
的過程,將大量複雜的資訊,壓縮成少量經典的資訊,通過這個途徑找到資訊的精華部分。我們待會再聊聊能用這個精華部分做些什麼有趣的事情。現在我們聚焦在如何通過神經網路的方法得到這個精華部分。乙個人說話是存在順序資訊的,如果將詞語的順序顛倒,我們可能會得到完全不同的資訊。
可見我們的模型必須要將順序資訊
完全考慮起來。恰好,我們之前提過,迴圈神經網路
最擅長做這件事情。
迴圈神經網路在詞向量上,從前到後,乙個個詞語閱讀,閱讀完整句後,模型擁有了對這句話整體的理解,也就有能力產生出乙個基於整句理解的向量,encoding
句向量的過程也順理成章地完成了。那麼有了這個句子的理解,我們又能幹嘛呢?這時就是開腦洞的時刻了。因為只要我們能夠向量化的事物,都可以在這個過程中應用起來。與encoding
對應的,我們還有乙個叫decoding
的過程。如果說encoding
是編碼,是壓縮,那麼decoding
就是解碼,是解壓。與傳統的壓縮解壓不同,我們不僅能解壓出原始的檔案,我們還能基於這種計算機壓縮過的理解,轉化成更多數位化形式。
比如根據這個理解生成機械人下一輪對話,生成一張愛心圖案,判斷這句話是積極狀態, 這些都是可以被計算機數位化的過程。下面我們就來舉乙個簡單的生成對話任務,來介紹一下機器是如何通過大資料學習理解句子,並可以和人對話的吧。
首先我們通過前面介紹的方式,拿到迴圈神經網路對句子的理解,通過encoding
過程,得到句向量。 用另乙個迴圈神經網路,作為decoder
,解碼器,基於句向量生成下文。
簡而言之,encoder負責理解上文,decoder負責將思考怎麼樣在理解的句子的基礎上做任務。這一套方法就是在自然語言處理中風靡一時的seq2seq框架。不得不說,分工合作的這套機制,在深度學習中十分普遍且有效。
NLP(四)詞向量
關於word2vec的原理網上很詳細了 本文 共2種詞向量轉換方式 1 獨熱編碼 2 word2vec from sklearn.preprocessing import labelencoder one hot labelencoder 輸入為列表好像也可以 word vector one hot...
詞向量與句向量概述
比較常見的詞向量表示方式 glove fasttext wordrank tfidf bow word2vec 詞向量一般看作是文件特徵,不同詞向量有不同用法,主要有四類詞向量 1.hash演算法及衍生 2.bow演算法延伸 3.word2vec延伸 4.lda主題延伸 乙個詞一列向量 hash演算...
BERT 輸出 句向量,字元向量
有什麼區別?bert輸出的句向量是什麼樣的?output layer model.get sequence output 這個獲取每個token的output 輸出 batch size,seq length,embedding size 如果做seq2seq 或者ner 用這個 output la...