在 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 以外,另外還有 type
和 term
這兩個名詞。書中提供的定義分別如下:
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
被拆成 aren
跟 t
看起來就會很奇怪。同時,O'Neill
被拆成 O
跟 Neill
會導致搜尋時使用 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
的意義就流失了。
其實還有兩個小節,不過等有空時再補筆記了…。
是說搜尋是個在現代非常常見的行為,但最近的研究總覺得這個領域有點冷門?