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