
我們?cè)谄饺盏纳钪兴f(shuō)的話語(yǔ),如何使用計(jì)算機(jī)自動(dòng)構(gòu)造出來(lái)呢?
一.探究我們?cè)谡f(shuō)一句話時(shí),無(wú)形中做了什么
1.人類語(yǔ)言通俗剖析
我想吃晚飯
??通過(guò)以上內(nèi)容,我們可以把句的意思拆分為:我·想·吃·晚飯。
我們通常在說(shuō)“我”的時(shí)候,大腦其實(shí)是在思考下一個(gè)詞,即“想”,然后說(shuō)了“想”了同時(shí),開始思考下一個(gè)詞“吃”,以此類推。
??也就是說(shuō),我們每一次說(shuō)出下一個(gè)詞的時(shí)候,是基于上一個(gè)詞說(shuō)的是什么而定的,這樣才能在表達(dá)出自己意思的同時(shí)能順利組織成一句話。
??這種思想很像條件概率?沒有錯(cuò),這種思想確實(shí)可以用條件概率表達(dá)出來(lái):
此處的P(S)被稱為語(yǔ)言模型,也用來(lái)計(jì)算一個(gè)句子的概率。
??通過(guò)以上式子可看出,每次新出現(xiàn)的詞匯,都和之前已經(jīng)出現(xiàn)的詞匯有很強(qiáng)的關(guān)聯(lián)(條件概率嘛),所以越到后面的詞匯,所需要的條件概率越稀疏,并且參數(shù)巨大(每個(gè)詞都是一個(gè)參數(shù)喲!)
- 數(shù)據(jù)過(guò)于稀疏
- 參數(shù)空間太大
2.-N-gram模型的出現(xiàn)
??而事實(shí)上,當(dāng)一個(gè)句子非常非常長(zhǎng)的時(shí)候(特別是中文),后面出現(xiàn)的詞匯很有可能和前面說(shuō)的東西,產(chǎn)生的因果關(guān)系不大了。那么我們就可以進(jìn)行如下假設(shè):
我們每個(gè)詞匯出現(xiàn)的概率,只和前面一個(gè)詞匯相關(guān):
我們每個(gè)詞出現(xiàn)概率,只和前面兩個(gè)詞相關(guān):
以此類推,還可以每個(gè)詞和前面3個(gè)相關(guān),4個(gè)等等....(對(duì)于處女座,這種玩法太難受了,但確實(shí)把問(wèn)題化簡(jiǎn)了很多!)
??這種玩法就是傳說(shuō)中的-N-gram模型,其中N代表的就是和前面N個(gè)詞條件相關(guān)。
??假設(shè)語(yǔ)料庫(kù)的規(guī)模是N,相關(guān)詞匯量是n,模型的參數(shù)量級(jí)為。由此我們可以看到,隨著相關(guān)n的增長(zhǎng),參數(shù)規(guī)模增長(zhǎng)是十分迅速的。所以在進(jìn)行模型設(shè)計(jì)時(shí),要考慮到小伙伴電腦的牛逼程度才行,目前主流計(jì)算機(jī)能支持到n=10的程度。一般讓n=4,5都是ok的。
二.詞向量
1.Hierarchical softmax
①CBOW(Continuous Bag-of-Words)
根據(jù)上下文預(yù)測(cè)出某個(gè)空的詞是的內(nèi)容
-
根據(jù)詞頻,對(duì)語(yǔ)句進(jìn)行哈夫曼樹的構(gòu)造(由底至上濟(jì)寧構(gòu)建),詞頻即為哈夫曼權(quán)值。
構(gòu)造過(guò)程
2.開始進(jìn)行計(jì)算啦!
在計(jì)算之前,首先解釋一下各個(gè)參數(shù)含義:
:從根節(jié)點(diǎn)出發(fā)到達(dá)w對(duì)應(yīng)葉子節(jié)點(diǎn)的路徑。
:路徑中包含的葉子節(jié)點(diǎn)個(gè)數(shù)。
:
中的各個(gè)節(jié)點(diǎn)。
:
上的第n個(gè)節(jié)點(diǎn)上對(duì)應(yīng)的編碼
:
非葉子節(jié)點(diǎn)對(duì)應(yīng)的參數(shù)
哈夫曼樹是一種二叉樹結(jié)構(gòu),也就是說(shuō),利用二分類可以一步一步找到葉子節(jié)點(diǎn),我們這里使用sigmod進(jìn)行二分類。所以:
正例:
負(fù)例:
通過(guò)以上兩個(gè)公式,我們找到目標(biāo)的過(guò)程,無(wú)非可總結(jié)為以下兩種情況:
- 走向正例時(shí):
- 走向負(fù)例時(shí):
程序每次下尋找一次,都會(huì)經(jīng)歷上述兩個(gè)公式其中之一,最終會(huì)找到目標(biāo)詞匯,同時(shí)會(huì)留下一條路徑,把路徑的每一部都連乘起來(lái)就是:
在累乘計(jì)算時(shí),計(jì)算可能會(huì)比較困難,我們把上述等式兩邊同時(shí)取對(duì)數(shù):
從公式可知,這里的概率值越大越好!所以此題目為求解梯度上升。
對(duì)求導(dǎo),得:
由梯度上升可知,更新形式為:
同樣,對(duì)投影層的進(jìn)行求導(dǎo):
投影中的并不是單獨(dú)的詞向量,而是由詞向量拼接而成的一個(gè)大向量,然而,2013年google粗暴的將這個(gè)導(dǎo)數(shù)更新到各個(gè)詞向量中:
②Skip-Gram模型
其實(shí)就是把CBOW的流程倒過(guò)來(lái),回推出各個(gè)詞向量。
2. 負(fù)采樣
??當(dāng)語(yǔ)料庫(kù)非常龐大的時(shí)候,將會(huì)構(gòu)造出非常龐大的哈夫曼樹,這樣仍然會(huì)增加計(jì)算機(jī)的壓力,影響計(jì)算速度。如何解決呢?那么我們下回分解!
