1. 程式人生 > >word2vec 入門基礎(一)

word2vec 入門基礎(一)

一、基本概念

word2vec是Google在2013年開源的一個工具,核心思想是將詞表徵映
射為對應的實數向量。

目前採用的模型有一下兩種

  • CBOW(Continuous Bag-Of-Words,即連續的詞袋模型)
  • Skip-Gram

二、背景知識

詞向量

詞向量就是用來將語言中的詞進行數學化的一種方式,顧名思義,詞向量
就是把一個詞表示成一個向量。這樣做的初衷就是機器只認識0 1 符號,換句話說,在自然語言處理中,要想讓機器識別語言,就需要將自然語言抽象表示成可被機器理解的方式。所以,詞向量是自然語言到機器語言的轉換。

詞向量有一下兩種

  • One-hot Representation

向量的長度為詞典的大小,向量的分量只有一個 1,其他全為 0, 1 的位置對應該詞在詞典中的位置,例如

“話筒”表示為 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]

“麥克”表示為 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]

優點: 如果使用稀疏方式儲存,非常簡潔,實現時就可以用0,1,2,3,...來表示詞語進行計算,這樣“話筒”就為3,“麥克”為8.

缺點:1.容易受維數災難的困擾,尤其是將其用於 Deep Learning 的一些演算法時;2.任何兩個詞都是孤立的,存在語義鴻溝詞(任意兩個詞之間都是孤立的,不能體現詞和詞之間的關係)。

  • Distributional Representation

最早是 Hinton 於 1986 年提出的,可以克服 one-hot representation的缺點。解決“詞彙鴻溝”問題,可以通過計算向量之間的距離(歐式距離、餘弦距離等)來體現詞與詞的相似性

其基本想法是直接用一個普通的向量表示一個詞,這種向量一般長成這個樣子:[0.792, −0.177, −0.107, 0.109, −0.542, ...],常見維度50或100。

優點:解決“詞彙鴻溝”問題

缺點:訓練有難度。沒有直接的模型可訓練得到。所以採用通過訓練語言模型的同時,得到詞向量

當然一個詞怎麼表示成這麼樣的一個向量是要經過一番訓練的,訓練方法較多,word2vec是其中一種。值得注意的是,每個詞在不同的語料庫和不同的訓練方法下,得到的詞向量可能是不一樣的。

詞向量在機器翻譯領域的一個應用,就是google的TomasMikolov 團隊開發了一種詞典和術語表的自動生成技術,該技術通過向量空間,把一種語言轉變成另一種語言,實驗中對英語和西班牙語間的翻譯準確率高達90%。

論文http://arxiv.org/pdf/1309.4168.pdf在介紹演算法工作原理的時候舉了一個例子:考慮英語和西班牙語兩種語言,通過訓練分別得到它們對應的詞向量空間 E 和 S。從英語中取出五個詞 one,two,three,four,five,設其在 E 中對應的詞向量分別為 v1,v2,v3,v4,v5,為方便作圖,利用主成分分析(PCA)降維,得到相應的二維向量 u1,u2,u3,u4,u5,在二維平面上將這五個點描出來,如下圖左圖所示。類似地,在西班牙語中取出(與 one,two,three,four,five 對應的) uno,dos,tres,cuatro,cinco,設其在 S 中對應的詞向量分別為 s1,s2,s3,s4,s5,用 PCA 降維後的二維向量分別為 t1,t2,t3,t4,t5,將它們在二維平面上描出來(可能還需作適當的旋轉),如下圖右圖所示:



觀察左、右兩幅圖,容易發現:五個詞在兩個向量空間中的相對位置差不多,這說明兩種不同語言對應向量空間的結構之間具有相似性,從而進一步說明了在詞向量空間中利用距離刻畫詞之間相似性的合理性。

語言模型

語言模型其實就是看一句話是不是正常人說出來的。意義在於機器翻譯、語音識別得到若干候選之後,可以利用語言模型挑一個儘量靠譜的結果。在 NLP 的其它任務裡也都能用到。

用數學符號描述為:給定一個字串"w1,w2,...,wt",計算它是自然語言的概率P(w1,w2,…,wt)。w1到wT 依次表示這句話中的各個詞。有個很簡單的推論是:

p(s)=p(w1,w2,wT)=p(w1)p(w2|w1)p(w3|w1,w2)p(wt|w1,w2,wT1)

上面概率公式的意義為:第一次詞確定後,看後面的詞在前面次出現的情況下出現的概率。

例如,有個句子“大家喜歡吃蘋果”,一共四個詞"大家,喜歡,吃,蘋果"

P(大家,喜歡,吃,蘋果)=p(大家)p(喜歡|大家)p(吃|大家,喜歡)p(蘋果|大家,喜歡,吃)

p(大家)表示“大家”這個詞在語料庫裡面出現的概率;

p(喜歡|大家)表示“喜歡”這個詞出現在“大家”後面的概率;

p(吃|大家,喜歡)表示“吃”這個詞出現在“大家喜歡”後面的概率;

p(蘋果|大家,喜歡,吃)表示“蘋果”這個詞出現在“大家喜歡吃”後面的概率。

把這些概率連乘起來,得到的就是這句話平時出現的概率。

如果這個概率特別低,說明這句話不常出現,那麼就不算是一句自然語言,因為在語料庫裡面很少出現。如果出現的概率高,就說明是一句自然語言

為了表示簡單,上面的公式用下面的方式表示

p(s)=p(w1,w2,wT)=i=1Tp(wi|Contexti)

其中,如果Contexti是空的話,就是它自己p(w),另外如“吃”的Context就是“大家”、“喜歡”,其餘的對號入座。

現有模型有

  • N-gram模型
  • N-pos模型
  • ...
  • Bengio的NNLM
  • C&W 的 SENNA
  • M&H 的 HLBL
  • Mikolov 的 RNNLM
  • Huang 的語義強化

N-gram 模型

接下來說 p(wi|Contexti)

的計算方法,上面看的是跟據這句話前面的所有詞來計算,這樣計算就很複雜,像上面那個例子得掃描四次語料庫,這樣一句話有多少個詞就得掃描多少趟。語料庫一般都比較大,越大的語料庫越能提供準確的判斷。這樣計算開銷太大。
可以想到的優化方法就是提前將p(wi|Contexti)
提前算好了,那麼根據排列組上面的來算,對於一個只有四個詞的語料庫,總共就有4!+3!+2!+1!個情況要計算,那就是24個情況要計算;換成1000個詞的語料庫,就是i=11000i!

個情況需要統計,對於計算機來說,這根本不可能。

所以誕生了N-gram模型是大詞彙連續語音識別中常用的一種語言模型,對中文而言,我們稱之為漢語語言模型(CLM, Chinese Language Model)。漢語語言模型利用上下文中相鄰詞間的搭配資訊,在需要把連續無空格的拼音、筆畫,或代表字母或筆畫的數字,轉換成漢字串(即句子)時,可以計算出最大概率的句子,從而實現從到漢字的自動轉換,無需使用者手動選擇,避開了許多漢字對應一個相同的拼音(或筆畫串、數字串)的重碼問題。

我們給定一個詞,然後猜測下一個詞是什麼。當我說“豔照門”這個詞時,你想到的下一個詞時什麼?我想大家很有可能會想到“陳冠希”,基本上不會有人想到“陳志傑”吧。N-Gram模型的主要思想就是這樣的。

上面的context都是這句話中這個詞前面的所有詞作為條件的概率,N-gram就是隻管這個詞前面的n-1個詞,加上它自己,總共n個詞,計算p(wi|Contexti)

只考慮用這n個詞來算,換成數學的公式來表示,就是 p(wi|Contexti)=p(wi|win+1,win+2,,wi1)


一般來說,n取2或者3

假設詞表中詞的個數 |V| = 20,000 詞,那麼有下面的一些資料。


照圖中的資料看去,取n=3是目前計算能力的上限了。在實踐中用的最多的就是bigram和trigram了,而且效果也基本夠了。

如果一個詞的出現僅依賴於它前面出現的一個詞,那麼我們就稱之為bigram。即

P(T) = P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)

如果一個詞的出現僅依賴於它前面出現的兩個詞,那麼我們就稱之為trigram。

那麼我們怎麼得到P(Wn|W1W2…Wn-1)呢?一種簡單的估計方法就是最大似然估計(Maximum Likelihood Estimate)了。即P(Wn|W1W2…Wn-1) = (C(W1 W2…Wn))/(C(W1 W2…Wn-1))
下面我們用bigram舉個例子。假設語料庫總詞數為13,748



 P(I want to eat Chinese food)

=P(I)P(want|I)P(to|want)P(eat|to)P(Chinese|eat)*P(food|Chinese)

=(3437/13748)*(1087/3437)*(786/1215)*(860/3256)*(19/938)*(120/213)

=0.000154171

N-gram模型也會有寫問題,總結如下:

1、n不能取太大,取大了語料庫經常不足,所以基本是用降級的方法

2、無法建模出詞之間的相似度,就是有兩個詞經常出現在同一個context後面,但是模型是沒法體現這個相似性的。

3、有些n元組(n個詞的組合,跟順序有關的)在語料庫裡面沒有出現過,對應出來的條件概率就是0,這樣一整句話的概率都是0了,這是不對的,解決的方法主要是兩種:平滑法(基本上是分子分母都加一個數)和回退法(利用n-1的元組的概率去代替n元組的概率)

相關推薦

word2vec 入門基礎

一、基本概念 word2vec是Google在2013年開源的一個工具,核心思想是將詞表徵映 射為對應的實數向量。 目前採用的模型有一下兩種 CBOW(Continuous Bag-Of-Words,即連續的詞袋模型)Skip-Gram 二、背景知識 詞向量 詞向量就是用

Python中的Flask入門基礎

#1.匯入Flask擴充套件. from flask import Flask#匯入我們的Flask框架 from flask import render_template#我們的返回值有兩種,如果要返回html,就需要匯入這個模組 #2.建立Flask應用程式例項,需要傳入_name_,作用是

小白nlp入門基礎--nlp簡介

nlp學習筆記一 編者:楊柳依依 日期:2018年9月25日 隨同公司的培訓,對nlp有了初步的理解,小白整理後的筆記如下: 自然語言的發展 語言隨社會一同發展,出現 一詞多義:蘋果(水果),蘋果(喬布斯公司) 多詞一義:北京市,北京 簡略詞、縮寫詞:安徽,徽 新

docker入門基礎

目錄 一、簡介 1、docker架構 2、docker的概念 二、docker的安裝和管理 1、docker安裝 2、docker配置阿里雲映象加速 3、基礎命令 一、簡介 參考 https://www.cnblog

angular.js入門基礎

 AngularJS簡介 AngularJS  誕生於 2009 年,由 Misko Hevery  等人建立,後為 Google 所收購。是一款優秀的前端 JS 框架,已經被用於 Google 的多款產品當中。AngularJS 有著諸多特性,最為核心的是:MVC、模組

【Java】入門基礎

Java的歷史1995年,Oak語言更名為Java,Sun公司在Sun world會議上正式釋出Java和HotJava瀏覽器。1996年,Sun公司釋出了Java的第一個開發工具包(JDK 1.0)

資料視覺化系列--svg入門基礎

一、前言 1、SVG(Scalable Vector Graphics)可伸縮向量圖形 特點: (1)使用xml格式來定義圖形; (2)用來定義web上的使用的向量圖; (3)改變影象尺寸,圖片質量不受損; (4)所有元素屬性可以使用動畫; (5)繼承了W3C標準,在html中使用方式,html

小白學 Python 爬蟲33:爬蟲框架 Scrapy 入門基礎

人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門 小白學 Pyth

Kotlin基礎Kotlin快速入門

語法 note 初始 字母 文件中 create 列表 orange 快的 Kotlin快速入門 一、函數 1 /* 2 * 1.函數可以定義在文件最外層,不需要把它放在類中 3 * 2.可以省略結尾分號 4 * */ 5 fun main(args: Ar

JavaScript基礎入門教程

構造 圖片 def type 屬於 string 意思 原則 原始類型 js的數據類型   雖然js屬於弱類型語言,但其總共有6種數據類型。弱類型的意思是定義的變量沒有類型的區分,比如先執行 var num=123; 定義了一變量num存儲整數,可接下來執行 num="he

Docker基礎入門實戰

art The 開機自啟動 inf 應用程序 51cto 管理 x86 正在 Docker基礎入門實戰第1章 docker簡介1.1 what is DockerDocker是一個開源的應用容器引擎,基於Go語言並遵從Apache2.0協議開源,源代碼部

Python基礎簡介&入門&條件&循環

優點 words ctr 查看 pytho type 運行速度 賦值 人工智 一、機器語言(解釋型語言和編譯型語言)介紹   1、編譯型語言:編譯型語言即把寫好的編程編譯成機器語言再執行,在運行之前一次性編譯,比如C、C++。           優點:運行速度快,缺點

OpenCV3入門教程基礎知識

------韋訪 20181011 1、概述 想學習影象處理,不管是機器學習也好,深度學習也好,不會點OpenCV好像有點說不過去吧?所以,現在開始OpenCV的學習。 2、讀寫圖片 先從圖片的讀寫開始,opencv讀取圖片的函式是imread,預設情況下,imrea

Python-matplotlib-入門教程-基礎圖表繪製

0.摘要 本教程主要介紹使用python第三方庫matplotlib繪製各種統計圖表,教程從簡單到複雜,逐步遞進。 本章主要介紹常見圖表的繪製方法,並以儘可能簡單的方式實現,主要以突出函式功能為目的,防止讀者被複雜的引數分散了注意力。鑑於函式的引數的相似性,讀者只需要知道引數的含義並結合he

MongoDB入門系列基礎概念和安裝

概述   MongoDB是目前非常流行的一種非關係型資料庫,作為入門系列的第一篇本篇文章主要介紹Mongdb的基礎概念知識包括命名規則、資料型別、功能以及安裝等。 環境: OS:Windows Version:3.4 一、安裝 1.下載解壓 在官網下載對應作業系統版本的安裝包,然後解壓;

Python基礎入門筆記

前言(認識Python) 既然學習 Python,那麼至少得了解下這門語言,知道 Python 程式碼執行過程吧。Python 的歷史有興趣的百度百科下就有,這個不多說了。 1、我們先來了解下什麼是解釋型語言和編譯型語言? 計算機是不能夠識別高階語言

Mybatis入門示例基礎程式碼

本文為轉載內容 一、開發環境及前期準備: win7 、JDK1.7、 Intellij Idea、mybatis3.2.8 1、前期資料準備: 新建一個名字叫mybatis的資料庫,建立一個User表,匯入一條資料。 建表指

ECMAScript 6.0基礎入門教程-ES6基礎入門教程

ECMAScript 6.0基礎入門教程(一) 1、ES6簡介 1.1 ES6的歷史 ECMAScript簡稱ECMA或ES ECMAScript與JavaScript的關係   ECMA是European Computer Manu

salesforce 零基礎開發入門學習Salesforce功能介紹,IDE配置以及資源下載

目前國內已經有很多公司做salesforce,但是國內相關的資料確是少之又少。上個月末跳槽去了新公司,主要做的就是salesforce,不過當時想要看一些相關資料確實比較難。為了避免想要零基礎學習的人少走一點彎路,所以整理一下這幾天學到的簡單的東西,包括登入salesforce後如何操作,如何下載配置IDE

大資料入門之Linux基礎

Vmware、Linux 基礎1.VMware 虛擬網路1.1.虛擬網絡卡、虛擬交換機當使用VMware Workstation安裝一個虛擬機器時就會自動安裝一塊虛擬網絡卡,此外還可手動給虛擬機器新增多塊虛擬網絡卡。 交換機用於電(光)訊號的轉發。可以為接入交換機的任意兩個網