1. 程式人生 > >論文分享-->word2Vec論文總結

論文分享-->word2Vec論文總結

一直以來,對word2vec,以及對 tensorflow 裡面的wordEmbedding底層實現原理一直模糊不清,由此決心閱讀word2Vec的兩篇原始論文,EfficientEstimationofWordRepresentationsinVectorSpaceDistributedRepresentationsofWordsandPhrasesandtheirCompositionality,看完以後還是有點半懂半不懂的感覺,於是又結合網上的一些比較好的講解(Word2Vec Tutorial - The Skip-Gram Model),以及開源的實現程式碼理解了一遍,在此總結一下。
這裡寫圖片描述

下面主要以 skipgram 模型來介紹word2Vec

word2vec工作流程

  1. word2Vec只是一個三層 的神經網路。
  2. 餵給模型一個word,然後用來預測它周邊的詞。
  3. 然後去掉最後一層,只儲存input_layerhidden_layer
  4. 從詞表中選取一個詞,餵給模型,在hidden_layer 將會給出該詞的embeddingrepesentation
import numpy as np
import tensorflow as tf
corpus_raw = 'He is the king . The king is royal . She is the
royal queen ' # convert to lower case corpus_raw = corpus_raw.lower()

上述程式碼非常簡單和易懂,現在我們需要獲取inputoutputpair,假設我們現在有這樣一個任務,餵給模型一個詞,我們需要獲取它周邊的詞,舉例來說,就是獲取該詞前n個和後n個詞,那麼這個n就是程式碼中的window_size,例如下圖:

這裡寫圖片描述

注意:如果這個詞是一個句子的開頭或結尾,window 忽略窗外的詞。

我們需要對文字資料進行一個簡單的預處理,建立一個word2int的字典和int2word的字典。

words = []
for word
in corpus_raw.split(): if word != '.': # because we don't want to treat . as a word words.append(word) words = set(words) # so that all duplicate words are removed word2int = {} int2word = {} vocab_size = len(words) # gives the total number of unique words for i,word in enumerate(words): word2int[word] = i int2word[i] = word

來看看這個字典有啥效果:

print(word2int['queen'])
-> 42 (say)
print(int2word[42])
-> 'queen'

好,現在可以獲取訓練資料啦

data = []
WINDOW_SIZE = 2
for sentence in sentences:
    for word_index, word in enumerate(sentence):
        for nb_word in sentence[max(word_index - WINDOW_SIZE, 0) : min(word_index + WINDOW_SIZE, len(sentence)) + 1] : 
            if nb_word != word:
                data.append([word, nb_word])

上述程式碼就是切句子,然後切詞,得出的一個個訓練樣本[word,nb_word],其中word就是模型輸入,nb_word就是該詞周邊的某個單詞。

data打印出來看看?

print(data)
[['he', 'is'],
 ['he', 'the'],
 ['is', 'he'],
 ['is', 'the'],
 ['is', 'king'],
 ['the', 'he'],
 ['the', 'is'],
 ['the', 'king'],
.
.
.
]

現在我們有了訓練資料了,但是需要將它轉成模型可讀可理解的形式,這時,上面的word2int字典的作用就來了。

來,我們更進一步的對word進行處理,並使其轉成onehot向量

i.e., 
say we have a vocabulary of 3 words : pen, pineapple, apple
where 
word2int['pen'] -> 0 -> [1 0 0]
word2int['pineapple'] -> 1 -> [0 1 0]
word2int['apple'] -> 2 -> [0 0 1]

那麼為啥是onehot特徵呢?稍後將解釋。

# function to convert numbers to one hot vectors
def to_one_hot(data_point_index, vocab_size):
    temp = np.zeros(vocab_size)
    temp[data_point_index] = 1
    return temp
x_train = [] # input word
y_train = [] # output word
for data_word in data:
    x_train.append(to_one_hot(word2int[ data_word[0] ], vocab_size))
    y_train.append(to_one_hot(word2int[ data_word[1] ], vocab_size))
# convert them to numpy arrays
x_train = np.asarray(x_train)
y_train = np.asarray(y_train)

利用tensorflow建立模型

# making placeholders for x_train and y_train
x = tf.placeholder(tf.float32, shape=(None, vocab_size))
y_label = tf.placeholder(tf.float32, shape=(None, vocab_size))

這裡寫圖片描述

由上圖,我們可以看出,我們將input轉換成embedding_representation,並且將

相關推薦

論文分享-->word2Vec論文總結

一直以來,對word2vec,以及對 tensorflow 裡面的wordEmbedding底層實現原理一直模糊不清,由此決心閱讀word2Vec的兩篇原始論文,EfficientEstimationofWordRepresentationsinVectorSp

DNN論文分享 - Item2vec: Neural Item Embedding for Collaborative Filtering

其中 img 比較 類別 直接 表示 max函數 res 給定 前置點評: 這篇文章比較樸素,創新性不高,基本是參照了google的word2vec方法,應用到推薦場景的i2i相似度計算中,但實際效果看還有有提升的。主要做法是把item視為word,用戶的行為序列視為一個集

轉【研究生第一篇學術論文常犯問題總結

摘要與結論幾乎重合 “他們論文中摘要部分與結論部分重複率超過70%。就原因而言,個人認為是他們對摘要和結論的“作用”沒有太多認識。”   對於摘要而言,首先要用一小句話引出為什麼做這個研究 然後,簡單地概述採用了那些研究方法 然後,直接了當地說出這篇論文的最重要結果,而不是所有的結果,最後

Miccai論文分享(一)Deep Multi-instance Networks with Sparse Label Assignment for Whole Mammogram Classific

多示例學習(multi-instance learning) 本科畢業答辯結束!這個系列主要分享一些Miccai這一醫學影像分析頂級會議上論文~ 為什麼講這個? 看到了miccai2017年的一篇挺有意思的論文,所以查閱了相關研究資料,分享給大家。 什麼是多示例學習

論文分享-- >From RankNet to LambdaRank to LambdaMART: An Overview

嚴格來說,這並不是一篇論文,只是一個reportreportreport ,裡面系統的介紹了三個比較著名的排序模型RankNet、LambdaRank、LambdaMARTRankNet、LambdaRank、LambdaMARTRankNet、LambdaRa

研究生第一篇學術論文常犯問題總結【喻海良箴言】

在過去幾個月裡面,我幫助不少研究生修改過學術論文。其中有一些人的論文的研究內容和結果非常好,但是,在他們論文撰寫過程中存在不少問題。現在回國了,我想應該是時候把這些問題總結一下,希望將來研究生們能夠

研究生第一篇學術論文常犯問題總結

 在過去幾個月裡面,我幫助不少研究生修改過學術論文。其中有一些人的論文的研究內容和結果非常好,但是,在他們論文撰寫過程中存在不少問題。抽空把這些問題總結一下,希望將來研究生們能夠避免這些問題,提高科研論文寫作效率。摘要與結論幾乎重合這一條是我見過研究生論文中最常出現的事情,很

Latex論文排版技巧再總結

1、Q:幾個作者同時共享機構地址,怎麼搞? A:拿ACM的模版為例, Yes, and we suggest you do the following... Insert this piece of coding just before the \begin{do

論文分享--- >Learning to Rank: From Pairwise Approach to Listwise Approach

本篇博文分享和總結下論文LearningtoRank:FromPairwiseApproachtoListwiseApproachLearning\ to\ Rank: From\ Pairwise\ Approach\ to\ Listwise\ Approa

研究生第一篇學術論文常犯問題總結[轉]

1. 摘要與結論幾乎重合 摘要:首先要用一小句話引出為什麼做這個研究,然後,簡單地概述採用了那些研究方法,然後,直接了當地說出這篇論文的最重要結果,而不是所有的結果,最後說說在這些工作之外重點討論了一個什麼現象就可以。 結論:正常情況下,應該直接明白地概述所

第一次寫論文後的經驗總結和新手攻略

兩天前論文剛剛投出去,想記一下寫論文過程中遇到的坑,算是給自己留檔,也算是給第一次投論文的同學們的新手教程吧。 這篇寫的是計算機專業論文相關,其他專業同學可以繞道了,也歡迎吃瓜。 寫前準備 論文呢雖然可以一邊做實驗一邊寫,而且如果時間緊的話這樣做是比較推薦

看懂資訊檢索和網路資料探勘領域論文的必備知識總結

資訊檢索和網路資料領域(WWW, SIGIR, CIKM, WSDM, ACL, EMNLP等)的論文中常用的模型和技術總結 引子:對於這個領域的博士生來說,看懂論文是入行了解大家在做什麼的研究基礎,通常我們會去看一本書。看一本書固然是好,但是有一個很大的缺點

轉載[研究生第一篇學術論文常犯問題總結]

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能

AAAI 2020論文分享:通過識別和翻譯互動打造更優的語音翻譯模型

2月初,AAAI 2020在美國紐約拉開了帷幕。本屆大會百度共有28篇論文被收錄。本文將對其中的機器翻譯領域入選論文《Synchronous Speech Recognition and Speech-to-Text Translation with Interactive Decoding》進行解讀。 h

論文分享:用於模型解釋的對抗不忠學習

## 前言 本文介紹一篇發表在 KDD 2020 的論文《Adversarial Infidelity Learning for Model Interpretation》。該工作提出了一種高效的模型無關的例項特徵選擇(IFS)方法,其目標在於解決現有IFS方法中存在的 完備性(sanity)、組合捷徑(co

[論文分享] DHP: Differentiable Meta Pruning via HyperNetworks

--- authors: Yawei Li1, Shuhang Gu, etc. comments: ECCV2020 cite: [[2003.13683\] DHP: Differentiable Meta Pruning via HyperNetworks (arxiv.org)](https:/

iOS友盟分享的使用總結

現在幾乎所有的APP都會整合分享,為了可以更好的推廣自己的APP. 目前市面上常用的分享無非就三個: 1.友盟分享; 2.shareSDK(mob); 3.蘋果原生. 由於蘋果原生的分享使用起來不方便,或者說很多人不會使用,不像第三方的那麼方便.所有用的人比較的少.而我平時自己的專案中多使用的是友盟

1109Appium app自動化測試經驗分享-Xpath定位總結

在我看來,自動化測試中元素定位的倚天劍和屠龍刀莫過於 Xpath和CSS,但CSS只用於Web(之前已經分享過),這次就分享下Xpath的定位方法。本期講的是Xpath定位運用到App。 一)Xpath定位 XPath即為XML Path 的簡稱,它是一種用來確定XML文件中某部分位

1105Selenium web自動化測試經驗分享-CSS定位總結

最近重拾web自動化測試的知識,打算寫個QQ郵箱的指令碼練練手,之後全心去搞Jmeter。今天先分享下自己整理的CSS定位的一些知識。 一)CSS定位 CSS(Cascading Style Sheets)是一種語言,它用來描述HTML和XML的元素顯示樣式;在CSS語言中有CSS選

電子電氣工程師必知必會(第二版)分享讀後總結 -- 模擬部分

偶然看到一本好書《電子電氣工程師必知必會(第二版)》,整個中秋都在拜讀名師的 大作,真的是覺得寫的非常非常好,所以分享一下,隨便寫些總結,當然極少部分 有一些自己的“悟”。  書籍下載連結:連結:https://pan.baidu.com/s/13j0tUJIDcvoI3GmdIX