Stefan Evert 在Corpora and collocations裡頭指出了三種詞語搭配(collocation)的計算方式,包括有表面式共現(surface cooccurrence)、文本式共現(textual cooccurrence)、以及句法式共現(syntax cooccurrence)這三種。現有的語料庫套裝軟體多具備第一種詞語搭配的計算,以一個節點詞,向前後延伸幾個單位的跨距,構成片段的文本。至於第二種和第三種共現詞的計算,則多半要使用相當客制化的程序來實現。說白了,要自己寫程式才能做到。
在現行的版本中,Concise的詞語搭配仍是以表面式共現作為基礎。然而,這種計算方法無法準確計算contingency table(列聯表,又稱條件次數表),過於貼近的節點詞會被重複計算。用下面這個句子來做個說明:
這隻 | 狗 | 和 | 那隻 | 狗 | 不是 | 同 | 一隻 | 狗
當我們使用表面上的共現,以左右跨距四個詞的方式進行搜尋時,Concise或大部份的軟體,都會將結果計算成:
這隻 | 狗 | 和 | 那隻 | 狗 | 不是 這隻 | 狗 | 和 | 那隻 | 狗 | 不是 | 同 | 一隻 | 狗 狗 | 不是 | 同 | 一隻 | 狗
結果,原本出現次數僅有三次的「狗」,它出現次數變成了七。原來的一個文本,也被視為三個不同的文本分別計算。就這樣,僅能算出Evert列出的簡單關聯測量(simple association measures),也就是MI、MI3、t-score、z-score、simple-ll這幾種統計數字。簡單關聯測量僅需要運用共現次數(cooccurrence)的期望值即可進行估計,可以參考Evert的Corpora and collocations文章,也可以看某德國大學列出的Collocation Analysis。若進行Evert所稱的統計關聯測量(statistical association measures),如Odds Ratio、Dice coefficient、Log-Likelihood等統計數值,極容易出現誤差。
改採文本式共現(textual cooccurrence)來計算,可以避免表面式共現的缺點。進行文本式共現計算的第一步,是要從整份文件中取出一個個文本。在文章裡頭,進行文本式共現計算的文本通常會是一個完整句子。之後,再去計算節點詞和搭配詞出現在多少個文本,也就是多少個句子當中。
拿Evert那篇Corpora and collocations的例子來看,hat和over這一組搭配,它們的共現次數(cooccurrence)是1,但hat本身的出現次數是3,over則存在於兩個文本中,總文本數(Sample Size)是5。這樣的計算方式,捨棄了搭配詞的位置資訊,因此搭配詞是位在節點詞的哪一個方向,便不得而知。
同一段文字,若用表面式共現的計算方式,把跨距設為4,那麼共現次數會是2(最後一句有兩個),hat出現次數為3,over的出現次數也是3,樣本大小則是79(總字數)。
文本式共現的結果,可以直接拿來計算contingency table,但表面式的就需要調整。詳細的內容請自行參考Evert那篇Corpora and collocations。
現階段在測試中的Concise,已經可以處理文本式共現的計算方式,也能處理Dice coefficient、Odds Ratio、Chi-squared (corr)、Log-Likelihood這些Evert稱為統計相關測量的指標。下面附上同一個文本使用不同共現方式的計算結果。
表面式共現 Surface Cooccurrence |
文本式共現 Textual Cooccurrence |
你應當發現,不同的計算方式對於排序是有影響的,計算出的次數和統計量也不相同。另外,使用表面式共現計算時,Odds Ratio會出現NaN無法計算的狀況發生。至於兩種不同共現的使用時機,我也還在研究。如果你已經有了一點心得,麻煩分享給我知道。
留言
張貼留言