fastText學習以及對embedding的理解

2021-10-10 06:32:49 字數 1948 閱讀 9466

部落格:

fasttext原理及實踐

wordembedding系列(三)fasttext

**:

enriching word vectors with subword information

bag of tricks for efficient text classification

embedding理解:

背景:embedding的流行,歸功於google提出的word2vec。

本質:使距離相近的向量對應的物體有相近的含義,比如 embedding(復仇者聯盟)和embedding(鋼鐵俠)之間的距離就會很接近,但 embedding(復仇者聯盟)和embedding(亂世佳人)的距離就會遠一些。embedding能夠用低維向量對物體進行編碼,還能保留其含義。

數學含義: embedding在數學上表示乙個maping, f: x -> y, 也就是乙個function。word embedding,就是找到乙個對映或者函式,將單詞word生成在乙個新的空間上的表達,該表達就是word representation。來自知乎 寒蟬鳴泣 的回答

性質:embedding向量之間具有一定的資料運算關係,比如embedding(馬德里)-embedding(西班牙)+embedding(法國)≈embedding(巴黎)。

fasttext速度快的原因:

傳統的神經網路詞向量語言模型,需要計算每個類別的概率,這部分的計算量非常大,而fasttext採用霍夫曼樹替代了從隱藏層到輸出層的對映,只需要計算一條路徑的概率,使得計算量從|v|降到了二叉樹的高度log|v|。

fasttext的輸入:

整個sentence的詞向量、n-gram特徵以及單詞字元級別的n-gram向量。fasttest的輸入特徵已經被雜湊函式進行了embedding,這一點與cbow不同,cbow的輸入單詞是被onehot編碼。

subword 資訊的作用

為了解決乙個word出現的次數少,學到的vector質量不理想的問題,**enriching word vectors with subword information提出了用 word n-gram 的向量之和來代替簡單的詞向量的方法。

什麼是subword呢?比如說乙個單詞,word,它的subword也就是單詞本身的所有n-gram詞,比如word的2gram,就是wo,or,rd。方法中一般會加入前字尾,於是就可能變為#word#,那麼它的所有2gram就是#w,wo,or,rd,d#。

fasttext中embedding的處理過程:

把這些subword構成乙個詞典,把這些ngrams通過雜湊函式對映成整數1到k,同時也會使用word作為它自己的乙個ngram來學習它自己本身的詞向量,對word也構建乙個詞典。乙個單詞由word dictionary中的index和它的ngrams的雜湊值組成。最常用的p個詞不使用ngrams,當p和單詞表大小一樣大的時候,就退化為skip-gram的word2vec。

但是在實際操作**時,embedding出來的詞彙還是稠密向量的形式,所以實際應用的時候應該只是把index編碼作為查詢向量的key,最終輸出的還是向量。

putchar與getchar以及對緩衝區的理解

getchar 由巨集實現 define getchar getc stdin getchar有乙個int型的返回值.當程式呼叫getchar時.程式就等著使用者按鍵.使用者輸入的 字元被存放在鍵盤緩衝區中 直到使用者按回車為止 回車字元也放在緩衝區中 當使用者鍵入回車之後,getchar才開始從s...

陣列以及對其常用的操作

陣列 本身就是乙個容器,用來儲存資料。特點 是固定長度的。好處 給元素進行編號,從零開始。同時也可以通過length屬性獲取陣列長度。什麼時候使用陣列呢?當資料較多時,通常為了方便操作這些資料都需要進行臨時儲存。習慣 通常運算元組都需要進行遍歷。獲取陣列中的元素需要乙個指標。通過對指標的值的改變就可...

對團隊專案的意見以及對專案需求分析

團隊專案意見 1.專案介紹 2.開發背景 隨著時代的發展與進步,會聯網給人們帶給了人們知識的極大豐富,人們在享受著網路給我們帶來的好處,但也在不斷忽略自身健康的重要性,當今社會,人們普遍存在身體肥胖,視力下降,總喜歡躺著刷微博等,這些都有害身體健康,所以需要乙個智慧型化的軟體來時刻提醒我們健康的生活...