[NLP] 自然語言處理和語料庫介紹

NLP是什麼?

自然語言處理(Natural Language Processing, NLP)主要目的在於使用人工智慧的方法讓電腦能夠理解人類的語言。

NLP基本上會拆解成兩大項:自然語言理解(Natural Language Understanding, NLU)以及自然語言生成(Natural Language Generation, NLG),這兩者組合起來構成NLP。

自然語言理解(Natural Language Understanding, NLU)

在這個部分中我們會設法將人類的語言分解成電腦可讀的格式,也就是資料分析前期有個步驟叫做「預處理」,這個階段除了方便未來我們做資料分析外,也能夠協助後續的機器學習或是深度學習的模型訓練

自然語言生成(Natural Language Generation, NLG)

這個部分有點像是上面的步驟反過來,需要將電腦的語言轉變為人類的語言,用專業一點的說法就是從結構化的數據生成文本。

語料庫

介紹

語料庫(corpus)可以解釋成整體性的語言資料,隨機取樣且符合制定好的語言規則,並且擁有大量文本。我以前因為怕英文不好寫不出論文,跑去修學校的英文課,在那堂課程中也建置了屬於自己的「論文英文語料庫」。老師那時候相當強調一定要找到和自己相關的文章,並使用一些方法或軟體解析出屬於自己領域的 corpus(印象中老師講這個字聽起來很好吃),這樣自己寫論文時,才可以參照不同情況下,通常自己領域的學界都會用怎麼樣的動詞、怎麼形容特定情況、什麼樣的片語等等。所以廣義來說,我們都有可能在任何時候建置所需要的 corpus。

噢對了,如果是規模較大的語料庫,我們會需要有特定格式或是標記,讓電腦有辦法檢索以及分析。這些資料要能夠處理,才算是一項有用的資源,否則僅僅是文字堆砌而已。

另外語料庫除了語言上的不同外,還有目的性的差別,我們建立一個語料庫背後一定會有原因,像是我上述講的:需要建立一個和我自己論文相關的語料庫,這個語料庫就很明顯無法被他人所使用(除非和我寫差不多主題的同學)。所以接下來操作自然語言處理,自然也應當依據狀況去選擇適合的語料庫。

哪裡可找到語料庫

依據特徵,語料庫還可以再分為單語語料庫、雙語語料庫、平行語料庫等等。由來源分類,也能分為書面語語料庫、口語語料庫等等。這部份可以參考維基百科上提供的列表,可以看到相當多種類的語料庫。

建置技術

格式

  • 目前的語料庫大多是純文字格式,這樣比較容易被各種文字編輯器所用,也很容易被其他程式存取。也有的語料庫是使用資料庫形式,使用方法上就比較不一樣,或許較為麻煩,但篩選或排序等操作上會較為容易(我自己覺得對於人類來說比較直觀)。
  • Unicode,又稱作萬國碼,算是目前資訊界的通用編碼。因為很多語言都需要不同的編碼來記錄不同的字型,Unicode 目前被多數語料庫所採用。

建置過程

建置過程可分為語言的規則制定、以及人工標註(人員須經一定訓練)。在眾多數據的取樣上,也很重要,要取多少、要放那些資料進去(口語?書面?)、要收集的語料是普遍的還是稀有的,會不會過少、不同的文體和領域需要包括嗎(平衡性),以及這個語料庫是否足以代表整體語言,代表程度大概到哪(代表性)。

語料庫和自然語言處理

好了,講了一些基本概念後,就要談談自然語言處理到底和語料庫有什麼關係?自然語言處理主要目的在於使用人工智慧的方法讓電腦能夠理解人類的語言。既然要讓電腦能夠理解人類語言,勢必需要一個知識庫讓電腦能夠參照。

另外人的語言隨著歷史發展也會有不同的表達方式,因此面對這大量且多元的資料,若想進行訓練就非常仰賴語料庫的建立與使用。也就是說,若我們需要進行分詞、標註、模型訓練,就會使用到語料庫。所幸目前有相當多公開的語料庫可以使用,也有許多程式套件將語料庫寫入程式碼當中,使用上相當便利。

讓我知道你在想什麼!