梳理一下個人對於自然語言處理的理解和思路。
不打算按照現有的迴圈神經網路的套路去分析,我覺得這個技術已經有很多大牛在搞了,如果有希望的話他們一定可以成功的。
以下是我對於自然語言處理的另一種思路:既然是個人都可以聽和說(讀和寫要求高一點),那麼基於現有的計算機能力,應該可以做到的。
雖然人類的視覺是二維的,但是語言一直是一維的。有點像網際網路上的資料傳輸:都得壓扁成字串流進行傳輸。
語言有意思的點是,雖然其表現是一維的(乙個時間點你只能蹦出乙個音節),但其表達的資訊確是富有層次的,多維的。所以儲存語音是一種一維的,類似磁帶機的方式;但是如果通過人類的解讀,大概可以儲存成類似python語法那樣,具有多個層詞縮排的多行文字。
現在關鍵的問題是,計算機如何有效的處理這些層次。目前迴圈神經網路的處理有點不太管這些,所以天然的會造成誤差,以及計算量過大。
hmm(隱馬爾科夫模型)在80年代就曾用於語音識別,取得了不錯的結果(後來被神經網路取代)。或許在獲取語音上,神經網路更容易捕捉到其他特徵吧,hmm後來似乎沒大有人提起了(好像和神經網路結合了)。
但實際上我覺得對於語義分析來說,hmm的模型假設是非常好的。通常使用離散的隱馬爾科夫比較簡單,也足夠用,以下就不去區分了。
hmm假設有顯示狀態(observe)和隱藏(hidden)狀態,例如當我說』ok』的時候你聽到了,這是可觀察的;但我內心裡爽不爽,這個你只能猜(hidden)。還有當我同意的時候我會說』ok』, 『好』, 』可以』,這意味著同一的意思(hidden)會有不同的表達(observe)。
我覺得到這裡基本上就夠了,語言的理解和溝通不就是這樣嗎?
可能存在的問題是隱藏狀態是單層的,還是乙個網路。為了簡化分析,我們先假設觀察到的是乙個序列,隱藏狀態也是乙個序列(有點像dna雙螺旋)。
我覺得最小的表達完整意思的單元是乙個句子吧,當然這個句子可能只有乙個字:『好』。通常可以按會話(session)->段落(paragraph)->句子(sentence)這三個層級進行分析,跨session的對話可以比較順暢的拓展,暫時不提;句子更往下的則是分詞的處理和分析。
首先按照時間、段落留白等強規則分割(當然也會碰到一些分割錯誤),然後再加上弱規則進行修正。這裡會有不少的工作量,假設我們可以正確的分隔session, 並且每個session裡的段落和句子都按照層級分割好了。
這裡的結構有點像網頁的瀏覽和跳轉,session裡儲存了本次會話的通用設定,然後每段落就像是乙個頁面,而每句話都像乙個超連結。
按上面的假設,我們可以認為語義分析就是確定每句話(超連結)的標籤,以及跳轉功能。乙個句子可能既具有通訊控制功能,也具有邏輯功能。通訊有可能是單向的,也可能是雙向的,或者是廣播(多個雙向)的。要確定句子的具體功能,這時候就需要對句子內的內容進行分析。
此時的分析物件已經變成了某個句子,本質上只需要泛謂詞和泛名詞就可以了。這個地方有很大的工作量,如何把一些文字分為泛謂詞,另一些分為泛名字呢?
如果是單方面的陳述,那麼自然語言表達的語義無非是,「有什麼」和「怎麼樣」。這個很像物件導向的程式設計。
「有什麼」的例子(屬性):
「怎麼樣」的例子(方法):
這裡的關鍵是知道乙個句子裡的每一部分代表了什麼,這塊ner(實體識別)已經做的很好了。假設我們區分了每一類實體,我們就能通過邏輯構造乙個關係圖。
某種程度上,我們已經可以讓機器理解語義了。
簡單來說,就是為了應對無法窮舉的情況,去猜語言發起者的態度、意圖。
嗯,就到這裡,有緣再續。
自然語言處理系列 開篇
前幾天在網上意外搜到了自然語言處理 natural language processing,nlp 的學習路線圖 roadmap,點這裡 一共四張,分別介紹了概率 統計 機器學習 文字挖掘 nlp背景 和基於深度學習的自然語言處理,仔細看下來,既欣喜又慚愧。欣喜的是地圖內容全面而有條理,通篇下來幾無...
自然語言處理的語義建模介紹
摘要 本文主要是簡單介紹了自然語言處理 nlp 的語義建模思想。在本文中,我將簡單介紹自然語言處理 nlp 的語義建模思想。語義建模 或語義語法 通常與語言建模 或語言語法 相比較,我們現在從二者的定義和對比來理解語義建模。語義語法和語言語法都定義了理解自然語言句子的形式。語言語法涉及名詞 動詞等語...
深入機器學習系列之自然語言處理
資料猿官網 www.datayuan.cn 自然語言處理 nlp 是電腦科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。隨著深度學習在影象識別 語音識別領域的大放異彩,人們對深度學習在nlp的價值也寄予厚望。自然語言處理作為人工智慧領域的認知...