• 沒有找到結果。

NTU CSIE 100-2

N/A
N/A
Protected

Academic year: 2022

Share "NTU CSIE 100-2"

Copied!
10
0
0

加載中.... (立即查看全文)

全文

(1)

NTU CSIE 100-2

Information Retrieval and Extraction Final Project Report - Subtopic Mining

R00922156 陳子筠 B97902012 邱彥賓 B97902030 林運生 B97902064 曹嘉慶

指導老師: 陳信希 教授

日期:2012.06.14

(2)

一、動機

在日常生活中,當我們需要尋找各種資訊,很容易想到並且使用的方 法就是利用網路上已有的搜尋引擎來獲取所需的相關資訊,使用者在輸 入關鍵字的同時,搜尋引擎事先運用許多技巧使我們可以快速的取得網 路上的資訊,在為了瞭解以及實作背後技術的狀況下,應用 Information Retrieval and Extraction 課堂上所教的各種知識及實作技巧,便是這 次 project 的主要目標。

二、概述

首先匯入大量實際的網路資訊(網頁內容),利用網頁內的各種資訊 (tag,javascript)理解實際網頁所涵蓋的資料,依 project 需求對於所 得到的資訊對網頁建立 Index,並且根據使用者所輸入的搜尋條件找出相 關的網頁資訊,輸出高度相關的網頁、簡易的相關內容。

挑選和搜尋條件高度相關網頁的方法,我們首先使用既有的工具,

先找出和搜尋條件有關的所有網頁,接著再結合上課所學的 Tf-idf 方 法,對找到的所有網頁的所有字詞,進行字詞在某文章中出現的頻率統 計,以及字詞在所有相關網頁的出現頻率的計算,得出這個字詞的權 重,權重愈高,相關度愈高。

有了高度相關網頁的集合後,接著便是輸出網頁的內容。

三、設計流程

(一) DB 建立流程

(3)

(二) Query 流程

(一) DB 建立流程

一開始的網頁資料編碼方式不盡相同,所以我們先將所有的網頁編 碼轉成 UTF-8,再根據一開始建立好的 Stopwords dictionary 移除 stopwords,透過檢查 Regular Expression 的方式移除 html 的 tag

(包含<script>、<a>、<table>等),得到初步的文章內容。

依據建立好的詞庫,針對文章內容作 Chinese Lexical

Analysis,parsing 出一堆適宜的中文字詞,建立出 Database。

(二) Query 流程

使用者輸入 Query,因為輸入的字符可能與我們要求的編碼不一 樣,所以先經過轉碼以及 Parsing 的動作,得到新的 Query term 進 入 Searching 步驟。

首先我們找與 Query term 相關的文章,計算其內文和標題的詞的 tf-idf 並且做 ranking,最後將選出的 Subtopic Term 以及選出的

(4)

Document ID 回傳給 Subtopic system,最後由 Subtopic System 產 生出符合規格的 Result。

四、開發環境(Unparsed)

我們使用 eclipse 來編譯所寫的 Java code,eclipse 本身只是一 個框架平台,但是因為可以掛載許多外掛程式,使得 eclipse 擁有較 好的靈活性,我們使用的 lucene.jar、weka.jar 以及

IKAnalyzer.jar 便是在 eclipse 上所使用的。

Lucene: Lucene 是一個全文搜索框架,檢索方法屬於索引檢索 (index),也就是用空間來換取時間,對需要檢索的文件(Document Collection)進行全文索引(Indexing),在檢索(Retrival)的時候對 索引進行快速的檢索,得到檢索位置,這個位置記錄檢索詞出現的文 件路徑或者某個關鍵詞,lucene 主要適用於文件集的全文檢索,以 及大量數據庫的模糊檢索,特別是對數據庫的 xml 或者大數據的資料 類型。

在這次的 Project 中,我們使用的是 Lucene-3.6。

IKAnalyzer: IKAnalyzer 主要是用來補足 Lucene 在中文檢索方面的 不足。這次的 Project 中有許多的簡體中文,而 Lucene 對於中文的 Analysis 不是強項,加上 IKAnalyzer 有自己的中文字典,在中文的 分詞能力有其獨特之處,所以 Project 的文字處理部份,就用

IKAnalyzer 來處理。在這次的 Project 中,我們使用的是 IKAnalyzer-3.2。

weka: weka 是一個公開的 data mining 工作平台,集合了大量能 承擔 data mining 任務的 machine learning 演算法,包括對數據進 行預處理(data pre-processing)、分群(clustering)、分類

(classification)、回歸(regression)、關聯規則(association rule),其中對於這次 project 最重要的是分群、分類的使用,並且 找出需要輸出的結果。

五、實作方式 (一) DB 建立

Transform to UTF-8

透過 Linux 系統的 iconv 指令,並配合 shellscript 做大量的 I/O 產生出新的轉碼結果

Index

(5)

在讀出文件之後,我們首先去除包含<script>...</script>和

<a>...</a>的文字內容,因為前者不是主要會顯示在網頁上的文章 資訊,後者通常包含許多廣告連結,都會影響最後我們 Search 的 結果,所以我們先把文件做初步的過濾。接著我們利用 Regular Expression,排除掉 Html 的標籤(tag),例如:<table>、<tr>等 雜訊。最後我們使用 lucene3.6 和 IKAnalyzer 對過濾後的文章資 訊,進行分析詞彙的工作,並建立 index,以便日後 Retrieval 時,不必重新分析 Document Collection,就能直接進行搜尋。

(二) Query 流程 (1) Preprocessing

當 User 下了一個 Query,假設是「資訊檢索與擷取」好了,系 統不可能直接拿這個 Query Term 進行檢索的工作,因為這麼做通 常會導致搜尋到的文章不夠深入,得到不甚精確的檢索結果。因 此,如同我們對 Document Collection 建 Index 的步驟一樣,我們 也需要對 Query Term 進行分析詞彙的步驟,進一步分析出實際上 有意義的字詞,排除對檢索沒有大貢獻的詞彙(stopwords),例 如:「的」、「一」等單字或字詞,接下來才能準確地和已經建好 的 Index term 進行 match 的工作,找出相似度高的 Document。以

「資訊檢索與擷取 」為例,就會被分成 「資訊」、「檢索 」和

「擷取 」等具有意義的小字詞,這就是 Query Term 的 Pre- processing。

(2) Searching Find Docs

使用 Query Term 對已經分析建好 Index 的文件 Title 和 Contents,進行 Similarity 的比較工作,找出在 Document Collection 中,與 Query 相似度最高的 Document Set 出來,其中 Similarity 的比較方法,我們使用 Lucene-3.6 內建好的 class 來 使用。

Calculating tf-idf

對搜尋到的 Document 的每個 index term,計算其 tf-idf,並儲 存起來。

(6)

Determine subtopic

採取三個步驟

首先是把某個 term 在此次搜尋結果中所有出現的狀況的 tf- idf 加總,然後根據加總的大小做出一個 term rank list。

其次是用某個 term 在此次搜尋結果中最高的 tf-idf 大小做一 個 term rank list,並限制此 term 至少要在超過某個 threshold 數量的搜尋結果中的網頁中出現。

最後是做反向搜尋,把前面兩個 rank list 前面的 term 當作 新 query 去找結果涵蓋原本 query 的比例得到 term rank list。

最後用上面三個 rank list 的評分合起來做計算幫某個 term 打分數,決定要輸出哪幾個 term 當 subtopic,其 中每個

parameter 和 threshold 都根據嘗試得到,多次 實驗之後,找出 最好效果的參數。

(3) Generating Output

得到 subtopic term 之後,我們會選擇在有此 term 的網頁 中,此 term 的 tf-idf 最高的網頁來當作 output 的相關網頁,並 且擷取此網頁內文中有 query 又有 subtopic term 的一段,如果沒 有就取有 query 的和有 subtopic term 的一段兩個合起來當作內容 擷取。

同時我們讓一個網頁只會在 output 裡出現一次,如果此網頁 同時有二個 subtopic term 而且都被選到了,則會讓後者選其他網 頁,如果只剩一個網頁,沒其他的可選 ,則砍掉此 subtopic。

六、開發過程中遇到的問題和解決方法

依照我們組員最原始討論的流程來執行,在我們初步搜尋成功之後,

我們會得到許多篇文章,但是到底該選擇哪幾篇出來,當我們結果,

我們的直覺想法就是利用上課所學的分群(Clustering),幫我們把文 章做分群,然後我們再從各群中挑選與 Query Term 最相關的文章出 來。

接著我們便著手研究 Weka 這個工具,得知他所需要的 input 檔案 格式(.arff),一種紀錄每筆資料特性的檔案,而我們也順利地將每 個檔案的 index term 組成每個檔案特有的 term vector,並且將每 個檔案的 term Vector 組成整個 dataset 的 term Vector,正當一切 事情發展太順利的同時,總是會有令人意想不到的悲慘結局發生。我 們使用 Weka 的 KMeans 分群法,指定參數 k=1,沒錯,完美分群,全

(7)

部都分在同一群,但是,這不是我們要的,於是我們進一步將參數 k 調成 10,預期他會把我們搜尋到的 dataset 依照相似程度平均分 群,但是出來的結果卻令我們傻眼:

於是我們開始展開遙遙無絕期的 debug 之路,不斷地 print and trace,終於知道問題所在,就是我們拿來當屬性的 index term 有幾 個問題:第一:所造成的 vector 維度太大;第二:document 和 document 之間的 vector 重疊率太低,導致分群沒有一個基準點,現 在的效果,就像在一個非常多維的空間中,我們的資料極端地散佈各 地。

後來我們試了兩種方法。

第一種方法:基本上就是降低維度,所以必須製造更多重疊的部 份,因此我們把 index 中能合併的 term 都合在一起,舉例來說,我 們有「辦公室」和「辦公」,就先判斷是否為其中一個的 subset,

如果是,就合併,因此只會得到「辦公室 」這個 term,「辦公」就 不見了。附圖就是我們的實驗結果(1000 筆資料)

(8)

第二種方法:依舊是為了降低他的維度,所以只讓每篇文章只有一 種屬性,於是我們加總了這篇文章的所有 tf-idf 值,終於我們可以 成功 cluster,但是這樣做到的效果根本就不是我們的目的所在。

後來經過不少思索,我們強大的組員跳脫了分群這個框架,改成我 們最後實作的方法,tf-idf 萬歲。

七、執行過程和結果 (貼圖)

我們把全部的程式包成了.jar 檔,並設定了一些執行參數 java -jar Subtopic_system [field] [algorithm] [threshold]

[#subtopic] [#doc]

field:String{contents, title},我們將原始網頁的資訊分開裝 在 contents 和 title 這兩個欄位,這個參數也代表著使用者要向哪 個欄位進行檢索。

algorithm:int{1,2},我們提供了兩種演算法可供檢索使用,兩 者的差異在於第 2 個演算法會根據 threshold 這個參數不同而有所差 異,第 1 個演算法則沒差,但是兩種都是基於 tf-idf 的概念設計而 成。

threshold:int{>0},這個參數的目的是設置挑出來的 tf-idf 門 檻值,通常為 1、5 或 10

subtopic:int{>0},這個參數在於指定輸出的 subtopic 數量,依 Project 要求的上限,就是 10。

(9)

doc:int{>0},這個參數在於指定輸出同 subtopic 下多少篇文 章,通常為了取在同 subtopic 下最好的文章,doc 都設 1。

注意:在執行之前記得將建好的 index 資料夾,和 dict 這個資料夾與 Subtopic_system.jar 放在同一層資料夾底下,

dict/stopwords.txt 就是建 stopwords 的檔案,Index Term 的建 立,設定 index 資料夾的路徑,編譯 LuceneIndex.java,執行即 可。

Ex:

Input File

格式與 IR 上傳網頁提供格式一樣,檔名:test.in.txt Output File

自動生成,檔名:test.out.txt

java -jar Subtopic_system.jar contents 1 1 10 1 java -jar Subtopic_system.jar title 2 1 10 1

執行搜尋”表演”的結果,看起來相當精彩!

八、未來展望以及心得

Project 目前在做整個資料庫的索引和搜尋所花的時間,和我們平常最 常在使用的搜尋引擎 google 相比之下是十分緩慢的,畢竟 google 所搜尋的資 料庫應該會更大,可是 google 所花的時間卻可以在我們輸入關鍵字之後很短的

(10)

時間內就給予答覆,這時便覺得 google 有它自己的過人之處,雖然沒有辦法像 google 一樣如此的有效率,但我們對將來可以做的改善可能是將 project 做各 種的優化,比如說平行化程式、改善資料結構或演算法…等,在這次的

project 的過程中也多接觸到了不同的工具提供我們使用:lucene、weka、

IKAnalyzer…,並且對於課堂上的知識得到了驗證藉由實作各種問題的解決方 法,最後在作 project 的過程吸收了很多,對於這一門課也有更深入的了解。

九、Reference

http://zh.wikibooks.org/zh-hant/Lucene

http://myblog-maurice.blogspot.tw/search/label/文字礦?max-results=20 http://blog.csdn.net/youyajie/article/details/7487498

http://tw.myblog.yahoo.com/ys-blog/article?mid=966&sc=1

參考文獻

相關文件

了解電腦網路的原理,學習使用 個人網誌及簡易的網頁設計,具 備電子商務的觀念、網路安全以 及網路犯罪與相關法規.

2.報名路徑:進入「台灣就業通」網站首頁→選擇首頁中「找課程」→「職前訓練 網」→「課程查詢」→「查詢/報名」→查詢條件(擇一輸入關鍵字即可)設定:「開

整體網站之規劃與設計設,包括網站企畫,網頁版面美工設計,網頁版面

④執行智能搜尋,當使用者在 Google 網頁上下指令後,便可以搜尋到網路的資料,再轉 發給使用者所有的資訊.. (4)

(A) 數學符號 (如方程式) 上網的問題: 對想要製作數學網頁的人, 數學符號一直是一個麻 煩, 更何況是中文數學網頁。 對於網頁負擔量輕的網站, 固然可以使用微軟 WORD 程 式中有限的方程式功能去

所謂重要性評量是利用使用者所偏好的網頁中的超連結關係來評估網頁的重要 性。當某一網頁被越多網頁所鏈結時,該網頁的重要程度也就越高,因此這種評

使用<Print Screen>擷取網路 Hinet 首頁視窗畫面,2. →於

選取欲設定換頁特效的投影片, 選取切換頁次標籤, 於切換到此投影片區選擇 換頁特效:選取效果後, 可再按下哪一個按鈕?從中選擇與該特效相關的設定,