1. 程式人生 > >詞嵌入:探索解釋和利用

詞嵌入:探索解釋和利用

詞嵌入定義:對於一系列語言建模和特徵學習技術的集合名稱,在自然語言處理領域中文字庫中詞或短語被對映到一個實值向量。
這個向量反映了就形態學/ 詞-內容表達/ 全域性語料統計/ 詞層次結構/文字建的關係和他們包含的項之間的詞結構。
所有詞嵌入的思想是去捕獲其語義/形態/內容/層次資訊等等。在實踐中特定任務中可能某一個方法會比其他的都好,例如LSA在處理低維空間來自相同領域的文字,其已經被處理成term-document矩陣。

one-hot encoding (CountVectorizing)
最基本和樸素的方法對於轉化詞到向量是數數在每個文字中詞的出現頻次。這個稱為countvectorizing或者one-hot encoding。思想是首席一系列文件(可以是詞,句子,段落,或者文章)並數數每個詞的出現頻次。得到的結果矩陣中列是詞, 行是文字。

from sklearn.feature_extraction.text import CountVectorizer
# create CountVectorizer object
vectorizer = CountVectorizer()
corpus = [
‘This is the first document’,
‘This is the second document’,
‘This is the last document’
]
X = vectorizer.fit_transform(corpus)
vectorizer.get_feature_names() == (
[‘first’, ‘second’, ‘last’, ‘the’, ‘document’]
)
X.toarray()
vectorizer.transform([‘This is a new document’]).toarray()

這種方式的輸出有時候稱為稀疏矩陣,當X大多數元素都是0。
TF-IDF 轉化
這個方法的思想是通過利用有用的統計度量稱為tf-idf來權衡term。 有大量語料時,例如’a’, ‘the’, ‘is’這些出現很頻繁但沒有具體含義。使用Onehot 編碼方法我們會看到這些詞不是那麼稀疏,這些詞很重要並帶有大量資訊。一種方法去解決這個問題是停用詞過濾,但這個解是離散的,對領域不固定。
對停用詞的一個樸素解是使用統計量,
tfidf(term,document)=tf(term,document)idf(term)
第一項稱為term frequency詞頻,也就是簡單的平均在所有文件中該詞出現的次數:

tf(term,document)=niVk=1nk
第二項是idf,表示文件頻率的逆,也就是文件數的倒數,取個對數:
idf(term)=logNnt
在之前方法中,我們i行j列的詞在文件出現n次,我們採用相同的CountVectorizer矩陣計算,使用tf-idf分數來代替之前所有元素。

from sklearn.feature_extraction.text import TfidfTransformer
# create tfidf object
transformer = TfidfTransformer(smooth_idf = False)
#X 從之前片段中使用X.toarray()轉化得到
X = [[4,0,1], [2,0,2], [3,4,0],[2,0,2], [3,1,0], [3,0,2]]
#從詞彙表中學習並存儲tf-idf稀疏矩陣
tfidf = transformer.fit_transform(counts)
tfidf.toarray()

Word2Vec
Word2Vec是第一個神經嵌入模型,被大家廣泛使用。它演化出Doc2Vec,也是對段落表達很流行的模型。
有三種Word2vec型別的引數學習,所有都是基於神經網路模型。
One-word context
這個思想是我們考慮每個上下文環境考慮一個詞(我們基於給定的一個詞來預測一個詞),這個方法經常指的是CBOW模型,神經網路架構是我們有one-hot 編碼的向量作為V*1的輸入,輸入層到隱藏層的權重矩陣W 大小為V*N, 隱藏層到輸出層權重W’ 大小為N*V, 最後一步啟用使用softmax函式。我們目標是計算下面的概率分佈,下標I詞的向量表達:p(wj|wI)
我們假設輸入向量x, 全為0, 並且在k位置有一個1,隱藏層h為:h=WTx=vTWI
現在我們可以稱h為詞x的輸入向量。詞彙表中每個詞都有輸入和輸出表達;權重W的i行是詞i的輸入向量表達。
神經網路的下一步,我們使用h向量並做以下運算:
uj=vTwjh
v’表示詞w下標為j的輸出向量,對於每個實體u下標為j我們做這個乘法操作。
啟用步驟使用標準softmax函式(之後會替代為負取樣或者層次softmax技術):

p(wj|wI)=yj=exp(uj)Vj=1exp(uj)
這裡寫圖片描述
Multi-word context
這個模型和one-word context沒有差別,除了我們想得到的概率分佈型別和隱藏層的型別。多詞上下文的解讀是我們希望預測多項式分佈給定超過一個context次而且許多儲存了關於目標詞和其他詞之間的關係。
我們的概率分佈:p(wO|w1,1,,wi,c)
我們改變隱藏層函式為:h=1CW(x1+x2++xC)

代價函式為:

logp(wO|w1,1,,wi,c)
這裡寫圖片描述
skip-gram model
和CBOW多詞模型相反:我們預測c個上下文詞,只有一個目標詞作為輸入。然後我們的目標函式為:1Tt=1Tcjclogp(wt+j|wt)

-c和c表示上下文視窗的限制,下標t的詞是遍歷語料庫中每個詞。
我們的第一步是得到隱藏層:h=WTx=vTwI
輸出層(沒有啟用)得到:

uc,j=uj=vTwjh
在輸出層,我們計算c個多項式分佈;每個輸出平面共享相同的權重從隱藏層到輸出層權重W’,輸出值的啟用函式使用softmax,根據c個平面改變一點記號:p(wc,j=wO,c|wI)=yc,j=exp(uc

相關推薦

嵌入探索解釋利用

詞嵌入定義:對於一系列語言建模和特徵學習技術的集合名稱,在自然語言處理領域中文字庫中詞或短語被對映到一個實值向量。 這個向量反映了就形態學/ 詞-內容表達/ 全域性語料統計/ 詞層次結構/文字建的關係和他們包含的項之間的詞結構。 所有詞嵌入的思想是去捕獲其語

機器學習探索資料資料預處理

機器學習之預測房價系列: 機器學習實戰 第一篇:探索資料和資料預處理   探索資料是指研究資料,發現數據的結構。資料集由資料物件構成,一個數據物件代表一個實體,實體由屬性構成,屬性是一個數據欄位,表示資料物件的一個特徵,通常,在資料分析和機器學習中,屬性、維度、特徵和變數這四個術語可以互換。 用

pytorch嵌入n-gram

本文學習於《深度學習入門之Pytorch》       對於影象分類的問題,我們會使用one-hot方式進行分類,但是對於NLP中的問題,處理單詞這種十分多種類的問題時,使用one-hot是行不通的,這個時候就引入了詞嵌入。   &nbs

NLP之WE之Skip-Gram基於TF利用Skip-Gram模型實現嵌入並進行視覺化、過程全記錄

NLP之WE之Skip-Gram:基於TF利用Skip-Gram模型實現詞嵌入並進行視覺化 輸出結果 程式碼設計思路     程式碼執行過程全記錄 3081 originated -> 12 as 3081 originated

前沿綜述細數2018年最好的嵌入嵌入技術

from:http://3g.163.com/dy/article/DJRJDB9S0511D05M.html   在任何一種基於深度學習的自然語言處理系統中,詞嵌入和句子嵌入已成為重要組成部分。它們使用固定長度的稠密向量對詞和句子進行編碼,從而大幅提升通過神經網路處理文字資

Angular4.0踩坑之路探索子路由懶加載

ati clas per 而是 配置 trap child property one 參考文章: Angular4路由快速入門 http://www.jianshu.com/p/e72c79c6968e Angular2文檔學習的知識點摘要——Angular模塊(NgMo

C#_關鍵字Lock的解釋使用

使用 ffd 代碼塊 ID pre C# 互斥鎖 由於 new 定義   lock關鍵字,互斥鎖,通過鎖住某一對象從而將語句塊({})裏面的代碼設置為臨界區。   線程在線性執行代碼時若遇到互斥鎖,必須先申請互斥鎖的訪問權,若訪問成功,則繼續線性訪問互斥鎖後的臨界區代碼塊

前面一篇,我們介紹如何下載利用jsonorg提中興堅持就是勝利

天才 sca 收集 decimal org 之一 四舍五入 AAT 地址 3常見的DBMS:Orcale、MySQL、SQLServer、DB2、Sybase 4DBMS = 管理程序 + 多個數據庫(DB) 5DB = 多個able(不只是able,但這裏先不介紹其他組成

區塊鏈在認證領域的應用案例公證通Factom利用區塊鏈構建可信賴的認證公證服務

效率 基於 新的 結構 存儲 發的 建設 如果 所有 Factom是一家致力於利用區塊鏈技術來進行文件認證、數據管理、檔案記錄的保存與驗證的公司,可應用於資信證明、專利保護、身份證明、產權保護、醫療檔案、審計等領域。 Factom的名字來源於拉丁文,意思是“事情的陳述和確定

C++探索std::mapstd::unordered_map中的新增操作

std::map和std::unordered_map主要提供如下幾種新增操作: try_emplace ()   (C++17) emplace () insert() [] = 下面給出一段測試程式碼,觀察物件在新增到std::map中時,

搜尋框架搭建1elasticsearch安裝視覺化工具kibana、分外掛jieba安裝

elasticsearch安裝和視覺化工具kibana、分詞外掛jieba安裝 1 Windosw環境 1.1 java環境安裝 1.2 elasticsearch安裝 1.3 視覺化介面kibana安裝 1.

C++探索std::mapstd::unordered_map中最高效的新增操作

std::map和std::unordered_map主要提供如下幾種新增操作: try_emplace ()   (C++17) emplace () insert() 下面給出一段測試程式碼,觀察物件在新增到std::map中時,構造物件過程中會有什麼區別: #i

利用Python進行資料分析》——Chapter9資料聚合分組

對資料集進行分組並對各組應用一個函式,這是資料分析的一個重要環節,將資料集準備好後,接下來的任務就是計算分組統計或深成透視表 GroupBy技術(分組) 建立一個GroupBy物件,再呼叫GroupBy的各種方法計算相關資料 df = pd.DataFrame(

Kubernetes(k8s)中文文件 名詞解釋Security ContextPSP_Kubernetes中文社群

Security Context Security Context的目的是限制不可信容器的行為,保護系統和其他容器不受其影響。 Kubernetes提供了三種配置Security Context的方法: Container-level Security Context:僅應用到指定的容器 Pod-

無監督學習嵌入or向量(Word Embedding)

  National Taiwan University (NTU)李巨集毅老師的《Machine Learning》的學習筆記,因此在全文對視訊出現的內容多次引用。初出茅廬,學藝不精,有不足之處還望大家不吝賜教。   歡迎大家在評論區多多留言互

吳恩達Coursera深度學習課程 deeplearning.ai (5-2) 自然語言處理與嵌入--程式設計作業(一)向量運算

Part 1: 詞向量運算 歡迎來到本週第一個作業。 由於詞嵌入的訓練計算量龐大切耗費時間長,絕大部分機器學習人員都會匯入一個預訓練的詞嵌入模型。 你將學到: 載入預訓練單詞向量,使用餘弦測量相似度 使用詞嵌入解決類別問題,比如 “Man is to

嵌入向量(Word Embedding)的原理生成方法

Word Embedding 詞嵌入向量(WordEmbedding)是NLP裡面一個重要的概念,我們可以利用Word Embedding將一個單詞轉換成固定長度的向量表示,從而便於進行數學處理。本文將介紹Word Embedding的使用方式,並講解如何通過神經網路生成W

[機器學習入門] 李巨集毅機器學習筆記-15 (Unsupervised Learning: Word Embedding;無監督學習嵌入

[機器學習入門] 李巨集毅機器學習筆記-15 (Unsupervised Learning: Word Embedding;無監督學習:詞嵌入) PDF VIDEO

Android系統資訊獲取 之三IMSI號IMEI解釋

IMSI號: IMSI是國際移動使用者識別碼的簡稱(International Mobile Subscriber Identity)  它是在公眾陸地行動電話網(PLMN)中用於唯一識別移動使用者的一個號碼。在GSM網路,這個號碼通常被存放在SIM卡中 IMSI共有15位,其結構如下:  MCC

吳恩達Coursera深度學習課程 deeplearning.ai (5-2) 自然語言處理與嵌入--程式設計作業(二)Emojify表情包

Part 2: Emojify 歡迎來到本週的第二個作業,你將利用詞向量構建一個表情包。 你有沒有想過讓你的簡訊更具表現力? emojifier APP將幫助你做到這一點。 所以不是寫下”Congratulations on the promotion! L