自然語言處理 (NLP) -1 簡述

自然語言處理(Natural Language Processing),一般縮寫成NLP,是人工智慧和語言學的一個分支學科,前面提到的自然語言,指的是人類口說、書寫和理解用的文字;在這領域中,主要探討怎麼讓電腦可以理解自然語言(NLU),讀懂文字後,往下進行相對應流程處理;又有一方面是探討怎麼讓電腦可以做自然語言生成(NLG),可以透過電腦擷取,甚至產生新的文章。

而這門學科也可以和語音、圖像辨識,做為銜接,完成比較全面的應用,譬如執行日常對話,甚至描述所見場景等,對大眾來說,NLP的相關應用還蠻容易引起人們廣泛興趣,比較常見的就是聊天機器人(Chat Bot),聊天機器人本身可以涵蓋幾種技術面向如下;

  1. 自然語言理解,理解使用者輸入的語句和問題。
  2. 文字檢索,理解語句和問題後,在資料庫中進行尋找,找出相應的回應或是解決方式。
  3. 自然語言生成,承上找出的回應或解決方式,因為可能多是片段和連結,必須重新產生成合理的回應方式。

當然在日常我們看到的自然語言理解,多半不會把上述三個面向都做得很完整,我也是偷吃步居多,主要是因為除了文字檢索外,語言理解和處理(生成),都需要面對比較多的學術研究,以我先前使用微信API做的智能機器人來說,我選擇的方式就是擷取輸入關鍵字,接著用關鍵字去檢索可能的資訊,並和用戶再次確認,最後丟出檢索結果。

然臉皮很厚但也算是ChatBot,只是差別在腳踏車和豪華客機的差別就是了,只是那時我也就意識到自然語言理解和生成的難度,才興起想研究的好奇心。

I will be back.

寫到一個段落才發現自己好像有點偏題,花了比較多的篇幅在講NLP,不過想想既然都寫了,還是要說的完整一點才行,前面大致描述了NLP的內容,還有常見應用,以及目前的發展狀況,雖然市面上有很多相關產品出現,但是他們多少存在一些問題,就NLP的相關研究來說,目前最常遇到的痛點如下;

  • 單詞邊界
    • 面對口語時,我們經常需要去界定什麼是獨立的單詞,這樣的情況在漢文中相當常見,譬如這段文字「台南市長今天參加台南市長榮中學畢業典禮」,在文章中,詞與詞之間通常是連貫的,但我們如何找出台南市長、今天、參加、台南市、長榮中學、畢業典禮,就是一個很有趣的研究,目前則大多仰賴字典檔來解決這個問題。
  • 詞義消歧
    • 在文章中,單一個詞通常有多個不同意思,如何消除歧異,讓文章通順,像這類情況我們必須考慮上下文,然後試圖找出一個最通順的解釋。
  • 句法模糊性
    • 這裡指的是自然語言的文法通常很模稜兩可,而我們怎麼在一句模糊的句子中解析出最合理的意思,就很值得玩味,通常需要考慮上下文,但這類難度通常比另一半說「我沒有生氣」還低一點,但是也是相當複雜。
  • 不受規範的輸入
    • 譬如拼寫錯誤,或是不照標準模式,更口語化的輸入,這類問題相當多變,並且不可控,Google或是Office有做輸入校正的功能,多半也是為了解決這個問題,譬如我在搜尋引擎上輸入「image embed free」,我想要的可能是可免費嵌入的圖片,但引擎幫我找出來的可能是免費的嵌入圖片(image type=embed)。
  • 語言行為與計劃
    • 指的是產生文字時,通常需要考慮完整的敘述讓詞意更通順,當然在一般對話中可能不會有此顧慮,但是在回答問題時,我們通常不會只回答「好」、「不」,而是會確實描述好、不好的原因。
javascript code
Photo by Markus Spiske on Pexels.com

綜合前述,不難發現自然語言處理(Natural Language Processing)還有很長的路要走,其實NLP的發展非常早,至少在50年代就有類似研究,是關於俄文和英文之間翻譯的議題(你沒看錯,翻譯也是其中一環),做法也從最早的Rule based轉變為機器學習,慢慢地也從Rule Driven進階到Data Driven;NLP的研究主題其實包山包海,而我自己的研究主題則多著重在文本摘要(Text Summarization)上,後面會隨著進度來更新。

在〈自然語言處理 (NLP) -1 簡述〉中有 3 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *