把一句話按照句法邏輯組織成一棵樹,由人來做這件事是可行的,但是由機器來實現是不可思議的,然而演算法世界就是這麼神奇,把乙個十分複雜的過程抽象成僅僅幾步操作,甚至不足10行**,就能讓機器完成需要耗費人腦幾十億腦細胞的工作,本文我們來見識一下神奇的句法分析樹生成演算法
先來解釋一下句法分析。句法分析分為句法結構分析和依存關係分析。
句法結構分析也就是短語結構分析,比如提取出句子中的名次短語、動詞短語等,最關鍵的是人可以通過經驗來判斷的短語結構,那麼怎麼由機器來判斷呢?
(有關依存關係分析的內容,具體可以看《自己動手做聊天機械人 十二-教你如何利用強大的中文語言技術平台做依存句法和語義依存分析》)
樣子如下:
-吃(v)-
我(rr) 肉(n)
分為基於規則的分析方法和基於統計的分析方法。基於規則的方法存在很多侷限性,所以我們採取基於統計的方法,目前最成功的是基於概率上下文無關文法(pcfg)。基於pcfg分析需要有如下幾個要素:終結符集合、非終結符集合、規則集。
相對於先敘述理論再舉例項的傳統講解方法,我更傾向於先給你展示乙個簡單的例子,先感受一下計算過程,然後再敘述理論,這樣會更有趣。
例子是這樣的:我們的終結符集合是:∑=,這個集合表示這三個字可以作為句法分析樹的葉子節點,當然這個集合裡還有很多很多的詞
我們的非終結符集合是:n=,這個集合表示樹的非頁子節點,也就是連線多個節點表達某種關係的節點,這個集合裡也是有很多元素
我們的規則集:r=表示乙個句子,其中的ω表示乙個詞(word),利用動態規劃演算法計算非終結符a推導出w中子串ωiωi+1ωi+2……ωj的概率,假設概率為αij(a),那麼有如下遞迴公式:
αij(a)=p(a->ωi)
αij(a)=∑∑p(a->bc)αik(b)α(k+1)j(c)
以上兩個式子好好理解一下其實就是上面「我吃肉」的計算過程
以上過程理解了之後你一定會問,這裡面最關鍵的的非終結符、終結符以及規則集是怎麼得來的,概率又是怎麼確定的?下面我們就來說明
這部分就是機器學習的知識了,有關機器學習可以參考《機器學習教程》
首先我們需要大量的樹庫,也就是訓練資料。然後我們把樹庫中的句法規則提取出來生成我們想要的結構形式,並進行合併、歸納等處理,最終得到上面∑、n、r的樣子。其中的概率引數計算方法是這樣的:
先給定引數為乙個隨機初始值,然後採用em迭代演算法,不斷訓練資料,並計算每條規則使用次數作為最大似然計算得到概率的估值,這樣不斷迭代更新概率,最終得出的概率可以認為是符合最大似然估計的精確值。
句法分析樹生成演算法是基於統計學習的原理,根據大量標註的語料庫(樹庫),通過機器學習演算法得出非終結符、終結符、規則集及其概率引數,然後利用動態規劃演算法生成每一句話的句法分析樹,在句法分析樹生成過程中如果遇到多種樹結構,選擇概率最大的那一種作為最佳句子結構
機器學習之十八 聚類演算法
聚類是無監督學習中最常用的演算法,常用的聚類演算法總結。1 k means k均值 聚類 對於輸入樣本d k means聚類演算法如下 1 從d中隨機選擇k個class center,u1,u2,uk 2 對於每個樣本xi,將其標記為距離類別中心最近的類別,即 yi argmin xi uj 1 j...
1757 神奇的口袋(2 7基本演算法之演算法效率)
總時間限制 10000ms 記憶體限制 65536kb 描述 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個...
演算法系列之十八 海量資料處理之BitMap
一 簡介 所謂的bitmap就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此在儲存空間方面,可以大大節省。二 基本思想 我們用乙個具體的例子來講解,假設我們要對0 7內的5個元素 4,7,2,5,3 排序 這裡假設這些元素沒有重複 那麼我們...