計算機雖然有了人工智能的程序支持,但事實上也不能將其機器學(xué)習(xí)的功能等同于像人類那樣。至少,到目前還不是這樣。那么,向Google的圖片識別或者Facebook的M應(yīng)用等一類系統(tǒng),它們是怎么能夠理解自然語言或視覺的呢?下面,是人工智能系統(tǒng)Josh的自我獨白:
簡而言之,我們將單詞和短語的含義以數(shù)字的形式儲存在計算機上。目前,市場上有許多這類產(chǎn)品,比如將單詞轉(zhuǎn)換成向量形式的工具word2vec,該工具使用淺人工神經(jīng)網(wǎng)絡(luò)來計算文字嵌入。此外也有一些諸如記憶網(wǎng)絡(luò)的技術(shù),能夠自主學(xué)習(xí)文本,進行一些簡單有限的問答。
在過去的幾年中,由于先進的人工神經(jīng)網(wǎng)絡(luò)算法有了許多驚人的成果,圖像識別和數(shù)字信號處理技術(shù)異常火爆。但是相比較之下,同是人工智能領(lǐng)域的理解自然語言方面似乎顯得困難得多,為什么呢?
自然語言處理本質(zhì)上是另一種約束關(guān)系的問題
研究自然語言是困難的,很多時候甚至超過了我們的想象——因為語言永遠(yuǎn)不變的是改變,因為全世界有千萬種語言……無論你的觀點是什么,自然語言難以為算法所處理的最大原因是——我們沒有足夠多的樣本。
確實,我們擁有大量的文本資源,包括書籍、博客、社交媒體等。但即便如此,我們得到的用以分析的文本相對來說還顯得不足。看一看以下圖片:
當(dāng)我們分析音頻數(shù)據(jù),或者圖像數(shù)據(jù)時,事實上我們得到的數(shù)據(jù)信息比人類意識中的要多。以佳能5D Mark III相機為例,攝影領(lǐng)域的人通常會說這是一個令人尊敬的相機,因為它有著5760 x 3840的分辨率。因為每個顏色像數(shù)都分別由紅、藍(lán)、綠、α值(RGBA)來表示,所以每個像素?fù)碛?個標(biāo)準(zhǔn)數(shù)值。在其原始格式當(dāng)中,一張這種像素的圖片大約含有 88.47 MB數(shù)據(jù)。相比較之下,莎士比亞的所有作品也只有4.4 MB。一個像數(shù)等于4個字節(jié),一個字符則占一個字節(jié)。
這意味著:
1、解析文本的時候,每一個令牌(字詞的NLP術(shù)語)更多的是影響文本的整體分析。
2、生成文本的時候,每一個被選出來的令牌才能影響結(jié)果。
換句話說,在文本當(dāng)中,字符和令牌才是占據(jù)主要成分的元素,和像素不同。
好了,那我們是如何處理文本的呢?在一個嚴(yán)格的解析系統(tǒng)中,我們需要用數(shù)值格式來表示文本,提示為向量形式。現(xiàn)在我們還是要繼續(xù)理解很簡單的向量表示,而未來則可以處理更為復(fù)雜的表達(dá)了。
我們來以幾個詞組為例:
1. Turn on the lights(開燈)
2. Power on the lights(打開燈的電源)
3. What time is it?(現(xiàn)在幾點?)
4. What is the current time?(當(dāng)前時間是幾點?)
我們需要做的是創(chuàng)建一個叫詞典的東西。換句話說,我們想要將現(xiàn)有的詞組用特有的令牌技術(shù)來創(chuàng)建一個詞匯表。然后,我們需要對信息做一些隱式預(yù)處理,去掉標(biāo)點符號等。最后,我們給每一個唯一碼賦予其各自的索引,從而生成自己的詞匯向量:
0 turn
1 on
2 the
3 lights
4 power
5 what
6 time
7 is
8 it
9 current
由于每一個字代表一個索引,因此我們可以使用反向散列數(shù)據(jù)結(jié)構(gòu)來得到每個單詞的索引,然后無論是否每一個字都是給定文本,我們都可以將這些字表示為一系列的布爾值(布爾值:是“真” True 或“假” False 中的一個)。比如,上述例句就可以表示為:
1. { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }
2. { 0, 1, 1, 1, 1, 0, 0, 0, 0, 0 }
3. { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 }
4. { 0, 0, 1, 0, 0, 1, 1, 1, 0, 1}
有了這些向量,我們可以使用向量點積得到一個粗略的相似度計算。所謂點積,就是接受在實數(shù)R上的兩個向量并返回一個實數(shù)值標(biāo)量的二元運算。
所以,上述前兩個例句的點積就是:
1 * 0 = 0
1 * 1 = 1
1 * 1 = 1
1 * 1 = 1
0 * 0 = 0
0 * 0 = 0
0 * 0 = 0
0 * 0 = 0
0 * 0 = 0
0 * 0 = 0
這些數(shù)值加起來和是3。而如果將第一個和第三個句子做同樣的處理:
1 * 0 = 0
1 * 0 = 0
1 * 0 = 0
1 * 0 = 0
0 * 0 = 0
0 * 1 = 0
0 * 1 = 0
0 * 1 = 0
0 * 1 = 0
0 * 0 = 0
那么和為0。這就是說,“Turn on the lights”和“What time is it”沒有絲毫的相似。
你也許會發(fā)現(xiàn),我們目前的詞匯處理規(guī)模小到只有10個詞。不過,未來當(dāng)我們探索更多語義詞嵌入時,我們還可以壓縮向量,獲得更準(zhǔn)確的上下文理解和表達(dá)。