自然語言處理 學習筆記(四)
個人學習nlp筆記:學習材料CS124、COSC572和《Speech and Language Processing》第三版
自然語言處理 學習筆記(四)
1. 資訊檢索
從文件中提取需要的資訊
info need步驟裡,把我們想要的資訊翻譯為搜尋框能夠理解的形式
query裡翻譯為搜尋引擎能理解的形式。這個過程中主要會出現兩種錯誤,本課主要關注第二種,即怎樣才能正確組織文字來送到搜尋引擎。我們選擇 how trap mice alive; how trap mice without killing或者是加上引號,都有不同效果。
如何評價是否很好地檢索到檔案
2. 詞彙-文字關聯矩陣
比如在所有文件種,我們想檢索A and B, but NOT C,我們可以用正則的方法,但是這對大的語料庫很慢,而且很多複雜操作不能用或不靈活,而且我們還要能對文件進行排序。
我們可以引入詞彙-文字關聯矩陣來解決上訴的那個要求,因為從矩陣種我們知道這些詞彙是否在某個文件種存在。
用其的二進位制形式表示,若為NOT,則取反,即101111就表示Calpurnia是否在這6個文件中出現,因為前面是NOT,所以010000取反。
在大文件中,100w個1000字的文件,而我們的term,有500k個,
得到一個巨大的文件,其中絕大多數都是0,因此需要更好的,比如只記錄1的資料結構。
3.倒排索引(Inverted Index)
若只是最普通的資料結構,因為文字出現的頻率不同,每個列表包含的內容長度不同。同時因為列表是有序的,所以插入資料時候也會很麻煩。
2.1 倒排索引的結構
第一步:
得到一個token和其的documentID
由詞彙進行排序(字母表中順序)
把同個文件中重複的token只考慮一個,對映到dictionary和postings中,同時在dictionary中記錄出現頻率(也就是這個詞在幾個文件中出現了)
2.2 用倒排索引的查詢處理(Query processing)
利用倒排索引完成查詢操作 AND,抽取Brutus和Caesar的postings,併合並
用指標進行元素間的對比,如Brutus出現第一個在2,而caesar在1,不同,則兩者小的指標向前一格。此時brutus在2,caesar也在2,兩者都前進一格。
虛擬碼
2.3 布林檢索模型
一個法律領域的檢索模型例子,所以說這個方法過時,但還是在一些地方適用:
在a and b and c的 query中,從短的開始,把全部都遍歷了
若存在多個or操作,先估計or的尺寸,先對小的(預測的,也就是直接or兩端的頻數相加)進行操作
如果是not呢
4.短語查詢
我們經常把stanford university或者san francisco當成一個短語,也就是一個不被分割的整體。這樣倒排索引就解決不了了。
4.1 雙詞索引(biwords indexes)
第一步的嘗試,就算建立一個兩個詞的逆序索引:
在大於2的短語中,比如stanford university palo alto,可以分為stanford university AND university palo AND palo alto,這樣就等同於前面單個詞的逆序索引了。但是也有一個問題,上文這4個詞若只找到同時連續出現才有意義(長短語),那文件不同地方分別出現就沒意義了,這也就是會導致positive falsely。不過其實問題不大
一種擴充套件的雙詞方法:
對編入索引的文字進行詞性標註,若詞(term)為名詞(N) 或冠詞/介詞(X),稱具有NX*N形式的詞項序列為擴充套件雙詞(extended biword),將這樣擴充套件詞對作為一個詞項放入詞典中。
比如索引catcher in the rye (麥田守望者)時,N X X N,符合NX*N,將查詢分析成N和X序列,將查詢切分成擴充套件雙詞,在索引中查詢catcher rye
字典太大,存在false positive問題,但是可以作為綜合的索引策略第一部分。
4.2 帶位置的索引
第二種方法,帶位置的索引
先對比是否同時出現在一個文件,然後進行對比,此處to要為be的位置-1。
這個方法同樣可以用到模糊搜尋上
帶位置資訊的索引特點,儲存要求大,不過很靈活而且可壓縮。
大小和文件長度有關,若文件不長,那和普通的posting差不多大小,若很大,比如書等大約100000詞,那就是其100倍。
總的來說,比無位置資訊大2~4倍,不過仍是原文字的35%~50%,無位置資訊的大致是10%
一種將biword和位置資訊的索引結合的辦法,省時,但費記憶體。
5.排序檢索
普通的布林檢索沒能滿足使用者的需要,尤其是同時返回上千個結果時候,這是我們需要對索引進行排序,給使用者最早看到最重要的內容。
5.1 Jaccard係數
例子:
但也存在問題,比如沒用單詞的出現次數,而且標準化的方式不大對
5.2 加權詞頻
但是這樣的模型沒有位置資訊,這樣 A is better than B和B is better than A的詞袋模型其實是一樣的:
intuition是詞頻和相關性是相關的,但不是線性的
評分就
5.3 逆文件頻率加權(Invrse document frequency weighting/IDF)
intuition: 檢索中,不常見的詞應當有更多資訊,應當賦予更高的權重。像it, and 這類停用詞,基本沒有什麼資訊。
所以使用詞在多少文件中出現,來表示其是否常見。
表示詞在多少文件中出現,N表示語料庫中的文件個數,則
,若詞在每個文件中都出現,那其的逆文件頻率/
為0。
且若語料庫是不變的,那麼我們得到的idf也是不變的,是一個對應每個詞的值
單詞檢索時候,idf只是一個點值(scalar),對檢索沒影響。但是在多個單詞的索引時,idf可以給諸如capricous person兩個詞賦權,少見的前者賦予更高的權重。
try和insurance雖然出現的頻率都差不多,但是try出現地很廣,而insurance出現的文章較少,因此雖然總頻數差不多,根據idf的原理,因賦予insurance更高權重
6.TF-IDF
TF-IDF是資訊檢索領域中最重要的加權方法之一。第一個係數
表示的是前文對詞出現頻率的加權方法log-frequency,其大小與詞出現次數成正相關,而後方的
指的是單詞在多少文件出現的反比,也就是前文的idf
總得分,所有單詞的tf-idf加合
7. 向量空間模型
前文我們把文件當作了一個向量,這是很稀疏的向量,同時佔據了很大的記憶體空間。
在查詢處,我們也將問題,轉換為向量,並於文件進行相似度對比,排序。相似度,約等於距離的倒數(越近越相似)
但通常使用的歐式距離有很多問題,比如向量的長度對距離大小影響很大,如下圖,儘管q和d2看似最相近,但是因此向量長度,導致查詢向量q和d1或d3最相似。
取而代之,我們可以使用cosines來計算,其在
中為減函式(值從1到-1),能滿足我們的需求
L2 正則,使文件文件大小的影響變小。
‘若文件和查詢向量都已標準化,直接使用下列式子
emmm,好像也可以用log詞頻來替代詞頻
8.TF-IDF的cosine得分
綜上所述,我們有很多種方法來做加權,這就像是一種組合。若我們使用log詞頻,逆文件詞頻加上L2 norm,則我們用的為ltc(smart notation),log詞頻適應於長文件
計算例項,注意,標準化時候,若前方使用的是加權詞頻,則標準化時候使用的就是加權後的詞頻。