2022年9月4日 星期日

[筆記] 詞彙的建立

在 IR 系統的前處理中,因為我們想要把資料建成 posting list,會需要先有相關的詞彙,才有辦法依據詞彙建立相應的 posting list。不過這時會有幾個常見的問題需要處理。

這篇會簡要紀錄一下書中提到的考量點。

1. Tokenization

Tokenization 是把句子分割並萃取的技術,萃取出來的單位被稱為 token,或者也可能被稱為 word、term,但事實上有時候我們可能會想要把 token 跟其他名詞做一點定義上的區分。以下是書中對於 token 的定義:

A token is an instance of a sequence of characters in some particular document that are grouped together as a useful semantic unit for processing.

除了 token 以外,另外還有 typeterm 這兩個名詞。書中提供的定義分別如下:

A type is the class of all tokens containing the same character sequence.

A term is a (perhaps normalized) type that is included in the IR system’s dictionary.

直接用書中提供的例子應該會比較好懂。舉例來說,如果我們想對下述的句子做 tokenization:

to sleep perchance to dream

此時,會有 to, sleep, perchance, to, dream 共 5 個 token;但只會有 4 個 type:to, sleep, perchance, dream,因為有兩個 to 是重複的;而如果 IR 系統中有處理 stop words,我們可能會把 to 視為是 stop words 而將它移除,此時最終在 IR 系統中被 index 的 term 就只會有 3 個:sleep, perchance, dream

那麼我們通常會如何做 tokenziation 呢?初步看起來,似乎就是直接針對空白做分割,然後可能把標點符號什麼的都去除掉就可以了?然而現實上,還是會出現一些比較困難的問題,導致我們可能還需要考慮別的因子。例如:

  • ' 在英文中,可以代表所有格關係、也可以代表縮寫。
  • 不同語言有自己的語言特徵。
  • 特定領域可能有自己特殊的 type。
  • - 在英文中也存在多種不同用法。
  • 多個字組成的詞彙無法單純用空白切割來處理。

以下會分別針對這些狀況做點簡單的描述。

1.1. Apostrophe (‘)

' 這個符號在英文中有多種用法,例如以下這個句子:

Mr. O'Neill thinks that the boys' stories about Chile's capital aren't amusing.

這裡同時出現了三種不同的用法:

  • O’Neill 中的 ' 是名字的一部分。
  • boys’ 和 Chile’s 中的 ' 是所有格。
  • aren’t 中的 ' 是縮寫。

此時針對 ' 做的處理的不同,可能會導致後續 IR 系統的 matching 受到影響。例如如果我們將 ' 拆開的話,aren't 被拆成 arent 看起來就會很奇怪。同時,O'Neill 被拆成 ONeill 會導致搜尋時使用 o'neil 會無法 match 到相應的 token。

1.2. 語言特徵

tokenization 的行為往往跟語言有很大的關係,不同語言的 tokenization 作法會有蠻大的不同。例如中文和日文就沒有空白分隔的特性,每個字都是連在一起的。

1.3. 領域特徵

在特定領域,有可能有領域內專屬的詞彙需要能夠被識別成 term,例如 C++C#、或者飛機型號 B-52(戰略轟炸機)。另外網際網路中的 URL(https://xxx)、e-mail(abc@abc.com)、IP 位址(a.b.c.d)等等可能也會需要能夠被視為是獨立的 term。

1.4. 連字符號 Hyphenation (-)

英文中連字符號的處理可能會很複雜,書中舉出幾種連字符號的用法:

  • 分隔單字之間的母音,像是 co-education。這個例子實際上它代表的是 coeducaion
  • 將多個名詞連接成一個新的名稱,例如 Hewlett-Packard
  • 多個詞語的組成結果,例如 the hold-him-back-and-drag-him-away maneuver。這個例子應該要被拆解成各自獨立的 term。

1.5. 特殊詞彙

這類的資訊其實我覺得也可以算是領域特徵的一種。例如書中舉的一個例子是 New York University(紐約大學)跟 York University(約克大學)。如果他們沒有被獨立視為 term,而是純粹依據空白拆開的話,那麼搜尋 York University 時就會 match 到 New York University 了,但這顯然並非是使用者想找的東西。

2. Stop Words

停用詞(Stop Words)的目的,是去除出現頻率過高、但又跟文件本身關係不大的詞彙。不過由於去除停用詞的行為,有時會導致意義的流失,所以現代的 IR 系統比較會考慮不去除停用詞,改為將停用詞賦予較低的權重,使其影響變小。舉例來說,flights to London 如果把 to 給去除了,flights to London 的意義就流失了。


其實還有兩個小節,不過等有空時再補筆記了…。
是說搜尋是個在現代非常常見的行為,但最近的研究總覺得這個領域有點冷門?