每個語言當中的某些單字存在「歧義」(ambiguity),也就是同一個單字有不同的意思,有些意思的本質相似,但是有些定義卻幾乎沒有任何關聯。
舉個經典的例子:
英文當中的 bank 可以是「銀行」也可以是「河岸」,因此如果我們這邊有一句話:
I went to the bank yesterday.
這邊的 bank 到底是指銀行還是河岸呢?
對於電腦來說,這就是一個需要解決的難題,而這項任務叫做 Word Sense Disambiguation (WSD,詞義消歧)。
Word Sense Disambiguation (WSD) 的任務就是,在特定語境中,判斷一個詞的正確意思,可以想一下其實我們人類聽到一個歧義字的時候,也是需要靠語境來去判斷該詞的意思。
這個問題在自然語言處理(NLP)裡非常重要,因為詞的意義不同會直接影響到像是機器翻譯(Machine Translation)、資訊檢索(Information Retrieval)跟問答系統(Question Answering)。
WSD 主要可以分為三類:
Knowledge-based:利用像是字典之類的知識庫
Supervised:需要有標註好的語料來訓練模型
Unsupervised:不需要事先進行人工標記,機器透過關聯性去歸類、找出潛在規則與套路、形成集群
在 knowledge-based 方法裡,有一個經典又直觀的演算法,就是今天要介紹的 Lesk Algorithm。
選定目標詞(要消除歧義的詞)
找出上下文(context window,例如周圍 2~3 個單字)
查字典的定義:列出目標詞與上下文單字的所有定義
計算重疊:比對不同定義之間的詞彙重疊程度
選出最佳定義:重疊度最高的定義就是預測的詞義
假設我們的目標詞是 court 這個詞,上下文是 basketball court。
若想消除歧義,知道court的意思,先列出court的所有意思:
接著列出basketball的意思:
**從重疊最多的定義,就可以知道這邊的court指的不是法庭,而是球場
**
定義來源:Cambridge Dictionary
Lesk Algorithm 基本上是透過上下文(語境)來消除詞義歧義的一種 knowledge-based 方法。雖然它的準確率並不完美,容易受限於字典定義的重疊度與 context window 的大小,但它的概念讓我們清楚看到語境在理解詞義中的重要性!