LSI:即SVD(奇異值)分解,X≈UΣVT(VT代表V的轉置),設X為n×m矩陣,***m個文檔,每個文檔由n個詞構成,而Σ為s×s矩陣,代表s個主題,V為m×s,每行代表每個文檔分別和每個主題的相似度。通常文本分類用到V矩陣。U矩陣即n×s,每行代表每個詞和每個主題的相似度。U和V分別成為左、右奇異矩陣。PS:我們知道PCA是對XTX求特征值和特征向量,設X=UΣVT,由於U和V都是正交陣,則XTX=VΣ?VT,即右奇異矩陣就是PCA分解後的特征矩陣,XXT→左奇異矩陣也是同理。
Word2Vec: 最常用的自然語言的數字化表達,簡而言之就是若***100篇文章,vocabulary_size=10000,那麽每個詞都可以用10000維的one-hot向量表達,而經過word2vec的embedding後,每個詞都可以用例如300維向量表示,不僅降了維度,而且相似詞義的詞將擁有更接近的向量表示。word2vec分為兩種模型,CBOW - 根據上下文預測詞語,SkipGram - 根據詞語預測上下文。
CBOW:對C個上下文的詞語每個詞用C組不同的權重W全連接映射到壹個N維的隱層上,得到C個N維隱層值,取平均,再對這個平均的N維隱層用權重W'的全連接+softmax對V個詞語賦予概率值,V即vocabulary_sizee。W和W'分別是V×N和N×V的矩陣(全連接?左乘權重矩陣的轉置),假設某詞word是Vocabulary的第j個詞,那麽W的第j行稱為word的輸入詞向量,W'的第j列向量為word的輸出詞向量。 點此 查看原論文,不過我沒看懂所謂的word embedding最終輸出的到底是哪個向量,輸入、輸出、還是隱層。
SkipGram: CBOW的反向操作。
兩者都是用BP算法更新。
LSTM:假設輸入壹句話長度10,每個詞用32維向量展示,則LSTM將這個[10, 32]的向量轉化為[k]的輸出(hidden state),k可以是小於32的任意整數。也可輸出每個time_step的輸出([10,32]),和最後的cell state。並可對輸出的k維向量加壹個全連接降維或再加壹個softmax實現分類。LSTM和RNN的區別在於有門控制,主要是通過忘記門來保留長期記憶,避免梯度消失。
Seq2Seq:Seq2Seq本來有著非常廣闊的定義,但通常是指壹個基於神經網絡與 LSTM 的 經典seq2seq模型 ,後續流行的Transformer、BERT、GPT3等都是基於此。大致功能是實現機器翻譯,通過encoder將原文轉換為壹個理解的矩陣後,用decoder壹詞壹詞地根據這個理解輸出目標語言對應的句子。結構大致是先將原文每個詞embedding後輸入壹個名為encoder的LSTM,並將其輸出(即LSTM的最後壹個cell的h和c)作為對原文的理解。然後壹個名為decoder的LSTM會將這個理解轉化為答案,decoder用BOS代表句子開始,EOS代表結束。訓練時,例如將“我愛妳”翻譯為“I love you”,第壹個輸入是BOS,embedding後經過cell(用之前得到的h和c初始化)後用softmax激活得到第壹個輸出“I”,“I”作為第二個輸入再次embedding經過cell後softmax激活得到第二個輸出“love”,同理得到第三個輸出“you”,最後得到EOS。通過BP梯度下降訓練完成後,以同樣的方式完成機器翻譯的預測任務。
Attention:最早用於Seq2Seq模型。例如要將“我愛妳”翻譯為“I love you”時,首先根據encoder獲得對原文每個詞的理解,即encoder_output。decoder每次輸出時,對當前輸入找壹個合適的attention分布,即權重(所謂更註意的地方,即權重更高的地方),該權重點乘encoder_output後求和即經過註意力機制後當前的輸入。簡而言之,在decoder每次輸出時,會根據輸入對encoder_output給予壹個不同的attention分布。( 此段話尚未驗證,需讀過論文後修正 )
Self-Attention: 第壹次出現在Transformer,由於Transformer沒有使用傳統s2s所用的RNN或LSTM,所以自稱Attention is all you need (You don't need RNN or LSTM)。Self-Attention和Attention的區別有很多,首先對它而言可以不需要decoder直接在encoder內完成自註意力,其次它沒有關註序列信息,因此需要額外先進行Positional Encoding,添加序列信息。它的重點在於在關註壹個詞時,可以將它和上下文的其他詞聯系到壹起計算,對關聯較大的詞賦予更多的關註(權重)。計算方法是通過三個不同的權重矩陣來乘輸入X,獲得Q K V三個矩陣,即將原文X拆分為了3部分:問題、目錄、內容,通過QKT除以壹個常數(原論文是根號dk,這個數越大則概率分布越平均,越小則越極端,也會導致梯度消失)後softmax,來找到和Q對應的K,再通過這個K找到相應的V,即代表此時的關註的內容。
Transformer( 論文 及 較好的壹篇介紹 ): 雖然也有encoder和decoder,但後續的發展改進通常只用encoder,而encoder的主要部分是self-attention。整體結構是6個encoder層接6個decoder層。每個encoder層大致結構是輸入X經Positional Encoding後,經self-attention加工和自身殘差連接後相加並norm(所謂殘差連接相當於給了X兩個通道,壹個是直接輸入,壹個是經過attention輸入),隨後再通過前向網絡分別對每個輸出全連接處理後(壹方面避免直接concat維度太大,壹方面可以並行計算)與自身殘差相加並norm。decoder大致相同,就在中間多了壹個Mask的Self Attention來接受encoder的輸入,mask是因為decoder按順序輸出,需要把後面的mask掉。