接下來我們要將學習詞嵌入這一問題具體化,當你應用演算法來學習詞嵌入時,實際上是學習乙個嵌入矩陣,我們來看一下這是什麼意思。
假設我們字典含有10000個單詞,有a,aaron等單詞,可能還有乙個未知詞標記。我們要做的就是學習乙個嵌入矩陣e,它將是乙個300
∗10000
300*10000
300∗10
000的矩陣,如果加上未知詞,就是300
∗10001
300*10001
300∗10
001維的矩陣。這個矩陣的各列代表的是字典中10000個不同的單詞所代表的不同向量。
假設orange的單詞編號是6257,代表字典中第6257個單詞,我們用符號o
6527
o_o6
527
來表示這個one-hot向量,這個向量除了在6257處為1,其餘各處都為0。顯然它是乙個10000維的列向量,它只有乙個位置為1,。
假如這個嵌入矩陣叫做矩陣e,注意如果用e去乘於orange的one-hot向量o
6527
o_o6
527
,那麼就會得到乙個300維的向量,要計算這個向量的第乙個元素,你需要做的是把e的第一行和o的整列相乘,不過o的所有元素都是0,只有6257位置上是1,最後你得到的這個向量的第乙個元素就是矩陣中orange這一列下的數字,然後我們要計算這個向量的第二個元素,就是把這個o
6527
o_o6
527
和矩陣e的第二行相乘。以此類推,直到你得到這個向量剩下的所有元素。
這就是為什麼把矩陣e和這個one-hot向量相乘,最後得到的其實就是矩陣中某乙個300維的列,對應於orange,它對應於e
6257
e_6257
e6257
,這個符號是我們用來表示這個300∗1
300*1
300∗
1嵌入向量的符號,它表示的單詞是orange,推而廣之,假如說有某個單詞w,那麼e
we_w
ew就代表單詞w的嵌入向量。推而廣之,e∗o
je*o_j
e∗oj,o
jo_j
oj就是只有在第j個位置是1的one-hot向量,得到的結果就是e
je_j
ej,它表示的是字典中單詞的嵌入向量。
這一節中我們的目標是學習乙個嵌入矩陣e,在以後的學習中我們將隨機地初始化矩陣e,然後使用梯度下降法來學習這個300
∗10000
300*10000
300∗10
000的矩陣中的各個引數。e乘於這個one-hot向量會得到嵌入向量。
再多說一點,當我們動手實現,用大量的矩陣和向量相乘來計算它,效率是很低下的。因為one-hot向量是乙個維度非常高的向量,並且幾乎所有元素都是0,所以矩陣向量相乘效率太低。因為我們要乘於一大堆0,所以在實踐中你會使用乙個專門的函式來單獨查詢矩陣e中的某一列,而不是用通常的矩陣乘法,但是在畫示意圖的時候這樣寫比較方便。
但是例如在keras中,就有乙個嵌入層,然後我們用這個嵌入層更有效地從嵌入矩陣中提取出你需要的列,而不是對矩陣進行很慢很複雜的乘法運算。
自然語言處理
自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...
自然語言處理
前言 自然語言處理 natural language processing 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...
自然語言處理
一 字串操作 去空格及特殊符號 s hello,world 預設把左右空格去掉 print s.strip print s.lstrip hello,print s.rstrip 查詢字元 0 為未找到 sstr1 strchr sstr2 tr 找到返回目標子串開始下標 npos sstr1.in...