1. 程式人生 > >TensorFlow-9-詞的向量表示

TensorFlow-9-詞的向量表示

這一節是關於 word2vec 模型的,可以用來學習詞的向量表達,也叫‘word embeddings’。

今天要看的是如何在 TensorFlow 中訓練詞向量,主要看一下這個程式碼:
tensorflow/examples/tutorials/word2vec/word2vec_basic.py

詞向量就是用一個具有一定維度的向量來表示一個單詞,這樣在分散式假設的思想下,我們可以認為出現在相同上下文情景中的詞彙都有類似的語義。

word2vec 可以很有效地從文字中學習出詞向量,主要有兩種演算法,Continuous Bag-of-Words model (CBOW) 和 Skip-Gram ,CBOW 根據上下文(’the cat sits on the’)來預測目標詞彙(例如,‘mat’),而 Skip-Gram 則相反,它通過已知的目標詞彙來預測上下文。

通常的 Neural probabilistic language 是通過極大似然法來條件概率:在給定前面語境的情況下,最大化目標詞的概率。
而在 word2vec 中不需要用全概率模型,而是用 logistic regression 來把真實的目標詞彙和製造的噪音詞彙分開

目標函式就是,這個也叫 Negative Sampling,

即現在的 loss function 只和隨機選出來的 k 個 噪聲單詞有關,而不是整個語料庫 V,這樣訓練比較快。

本節的程式碼就是用一個 Skip-gram 模型來訓練詞向量:

例如我們有資料集:
the quick brown fox jumped over the lazy dog
假設使用大小為1的視窗,這樣就得到這樣一個由(上下文, 目標單詞) 組成的資料集:
([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), …

Skip-Gram 模型是把目標單詞和上下文顛倒過來,因此資料集就變成由(輸入, 輸出)組成的:
(quick, the), (quick, brown), (brown, quick), (brown, fox), …

我們會計算每一對觀察值和噪聲值的損失函式,例如 sheep 就是個噪音:

整個計算的過程就是我們求出目標函式對 theta 的梯度,然後通過梯度下降法來更新 embedding parameters theta 來最大化目標函式,結果就是 embedding vectors 會不斷地移動,直到可以把真實單詞和噪聲單詞很好得區分開。

最後還可以用 t-SNE 來視覺化

最後的詞向量間的距離關係,可以發現具有相似資訊的單詞距離較近。

1. 先下載資料,words 有17005207 個單詞:

url = 'http://mattmahoney.net/dc/'
...
filename = maybe_download('text8.zip', 31344016)
...
words = read_data(filename)

count 就是要統計出 words 裡面最高頻的 5 萬個單詞。
dictionary 裡的 key 就是 count 裡的單詞,value 就是頻率的排序號。
data 裡存的是 words 中每個單詞在 dictionary 中的序號,如果不在 5 萬里面,就標記為 0.
reverse_dictionary 就是 key value 和 dictionary 裡面的互換一下位置:

2. 用 最大長度為 span 的 deque 做一個視窗:

span = 2 * skip_window + 1
buffer = collections.deque(maxlen=span)

從 data 中一個一個讀,先把一個視窗給讀滿。
要生成 batch_size 個樣本,
每個樣本是,先找到當前視窗的 target,然後在這個視窗中,隨機生成 num_skips 個 target-context 對,
即會生成:3084 originated -> 12 as 這樣的對。
每次生成完一個樣本後,視窗向後移動一位,
一直到生成完 batch_size 個。

embeddings 是先隨機生成 5萬*128 維,
3. NCE loss 就是訓練目標:

4. 用 SGD 優化器去優化目標,
valid_embeddings 是用來檢驗的 16 個單詞的詞向量表示,
similarity 是定義驗證單詞與詞彙表中所有單詞的相似度:

5. 然後就開始訓練模型,num_steps = 100001
每 2000 次迭代後,顯示一下平均 loss,
每 10000 次後,計算一下驗證單詞與所有單詞的相似度,並將最相似的 8 個單詞顯示出來:

6. 最後用 TSNE 將 128 維的詞向量降到 2 維,並展示頻率最高的 100 個單詞:

相關推薦

TensorFlow-9-向量表示

這一節是關於 word2vec 模型的,可以用來學習詞的向量表達,也叫‘word embeddings’。 今天要看的是如何在 TensorFlow 中訓練詞向量,主要看一下這個程式碼: tensorflow/examples/tutorials/w

word2vec 和 doc2vec 向量表示

ron 中心 con 線性 如果 存在 但是 標簽 word Word2Vec 詞向量的稠密表達形式(無標簽語料庫訓練) Word2vec中要到兩個重要的模型,CBOW連續詞袋模型和Skip-gram模型。兩個模型都包含三層:輸入層,投影層,輸出層。 1.Skip-Gr

FastText向量表示

論文《Enriching Word Vectors with Subword Information》 介紹 FastText的作者也就是word2vec的作者,所以兩者是一脈相承的。 目前的詞向量模型都是把每一個單詞作為單獨的向量,並沒有考慮詞語的內部結構,那麼F

[cs224n].2 向量表示word2vec

Part I:背景 Part II:訓練模式(CBOW,Skip Gram) Part III:優化方法(Negative Sampling,Hierarchical SoftMax) Part IV:詞向量衡量指標 Part I:背景 特徵表達是很基礎也很重要

CS224n | 向量表示word2vec

1 一是沒有相似性 二是太大 我們可以探索一種直接的方法 一個單詞編碼的含義是你可以直接閱讀的 我們要做的構建這樣的向量,然後做一種類似求解點積的操作。這樣我們就可以瞭解詞彙之間有多少相似性 分佈相似性是指 你可以得到大量表示某個詞彙含義的值,只需要通過

CS224n | 高階向量表示

試圖分析原理 如何更有效地捕捉word2vec的本質 關於詞向量表面的評估 最後,你們實際上會很清楚如何去評估詞向量 並且至少有兩種受驗方法來訓練他們 複習 函式是非凸的,所以初始值就很重要了 Skip -gram T對應需要遍歷語料庫的每個視窗

自然語言處理中傳統向量表示VS深度學習語言模型(三):word2vec向量

        在前面的部落格中,我們已經梳理過語言表示和語言模型,之所以將這兩部分內容進行梳理,主要是因為分散式的詞向量語言表示方式和使用神經網路語言模型來得到詞向量這兩部分,構成了後來的word2vec的發展,可以說是word2vec的基礎。1.什麼是詞向量       

向量表示:word2vec與嵌入

  在NLP任務中,訓練資料一般是一句話(中文或英文),輸入序列資料的每一步是一個字母。我們需要對資料進行的預處理是:先對這些字母使用獨熱編碼再把它輸入到RNN中,如字母a表示為(1, 0, 0, 0, …,0),字母b表示為(0, 1, 0, 0, …, 0)。如果只考慮小寫字母

Tensorflow教程-字向量表示

Vector Representations of Words 在本教程我們來看一下tensorflow/g3doc/tutorials/word2vec/word2vec_basic.py檢視到一個最簡單的實現。這個基本的例子提供的程式碼可以完成下載一些資料,簡單訓練後展示結果。一旦你覺得已經完全掌握

文本分布式表示(二):用tensorflow和word2vec訓練向量

sig 財經 left 調用 采樣 cto imp gensim average 博客園的markdown用起來太心塞了,現在重新用其他編輯器把這篇博客整理了一下。 目前用word2vec算法訓練詞向量的工具主要有兩種:gensim 和 tensorflow。gensim

CS224n筆記2 向量表示:word2vec

present 技術分享 思想 相對 自然語言 -h padding erro bat 如何表示一個詞語的意思   先來看看如何定義“意思”的意思,英文中meaning代表人或文字想要表達的idea。這是個遞歸的定義,估計查詢idea詞典會用meaning去解釋它。   中

[Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec向量模型

www. 頻率 cbo homepage 算法 文章 有一個 tro 概率 閱讀目錄 1. 詞向量 2.Distributed representation詞向量表示 3.詞向量模型 4.word2vec算法思想 5.doc2vec算法思

paddle向量表示

Word2vec演算法 詞頻出現的越多,越接近根節點 引數更新不僅要更新0,還要更新輸入X word2vec DOC2Vec     &n

TensorFlow學習指南6:向量

word2vec # -*- coding: utf-8 -*- """ Created on Thu Dec 29 00:39:23 2016 @author: tomhope """ import os import math import numpy as np i

文字深度表示模型——word2vec&doc2vec向量模型(轉)

  深度學習掀開了機器學習的新篇章,目前深度學習應用於影象和語音已經產生了突破性的研究進展。深度學習一直被人們推崇為一種類似於人腦結構的人工智慧演算法,那為什麼深度學習在語義分析領域仍然沒有實質性的進展呢?   引用三年前一位網友的話來講:   “Steve Renals算了一下icassp錄取文章題目中包含

[Algorithm & NLP] 文字深度表示模型——word2vec&doc2vec向量模型

  深度學習掀開了機器學習的新篇章,目前深度學習應用於影象和語音已經產生了突破性的研究進展。深度學習一直被人們推崇為一種類似於人腦結構的人工智慧演算法,那為什麼深度學習在語義分析領域仍然沒有實質性的進展呢?   引用三年前一位網友的話來講:   “Steve Renals算了一下icassp錄取文章題目中

tensorflow : 使用預訓練向量

目前使用深度網路進行文字任務模型訓練時,第一步應該是將文字轉為詞向量進行處理。但一般詞向量的效果跟語料的大小有關,而處理任務的語料不足支援我們的實驗,這時就需要使用網上公開的大規模語料訓練詞向量。 1、下載 網上公開的詞向量下載地址:https://gi

tensorflow如何正確加載預訓練向量

global color news doc ... elf import loading initial 使用預訓練詞向量和隨機初始化詞向量的差異還是挺大的,現在說一說我使用預訓練詞向量的流程。   一、構建本語料的詞匯表,作為我的基礎詞匯   二、遍歷該詞匯表,從預訓練詞

向量原始碼解析:(1)向量表示)簡單介紹

  在未來的一段時間內,我會全面細緻的解析包括word2vec, GloVe, hyperwords, context2vec, ngram2vec等一系列詞向量(詞表示)工具包。用合理的向量去表示單詞是自然語言處理(NLP)領域中很經典很基本的一個任務。 一份高質量的詞向

2 語言模型和向量 tensorflow向量

----------------------------大綱-------------------------- 1 隨著模型不斷更新 2 直接使用預先訓練好的詞向量如word2vec, glove 3 測試檔案向量化 ---------------------