Mais conteúdo relacionado Semelhante a 全文搜尋引擎的進階實作與應用 (20) 全文搜尋引擎的進階實作與應用3. 講者簡介
• 現職
– 聖藍科技執行長
• 興趣
– 網路應用系統開發
• 譯作
– Thinking in Java 4th Edition, 正體中文版
– Thinking in Java 2nd Edition, 正體中文版
– Essential C++, 正體中文版
• 專欄
– iThome 電腦報程式人專欄
• 連絡方式
– qing.chwang at gmail.com
5. 前情提要
• “JAVA 的開放原碼全文搜尋技術- LUCENE” -
2004 年 Java2 專業技術大會
– 全文搜尋引擎的基本概念
– Lucene 的簡介與程式設計
• “「沙中撈金術」﹣談開放原始碼的推薦系
統” - 2012 年 Java2 專業技術大會
– 推薦系統觀念
– 利用 Mahout 實作推薦系統
6. 搜尋引擎的相關技術及應用
• Web Crawler
– 漫爬網頁、取得網頁內容
• 文件格式及語系處理
– 各種格式檔案中語言的偵測及文字的擷取
• 進階搜尋及檢索功能
• 提高服務的規模(例:分散式化)
– 資料量
– 計算量
• 自然語言處理
• 文字探勘(Text Mining)技術
8. Solr
• Solr 是基於 Lucene 的平台,提供了
– 進階的全文搜尋功能
– 搜尋結果標示(Highlighting)
– 分面搜尋(Faceted Search)
– 近乎即時的索引速度
– 標準化的介面(XML, JSON, HTTP)
– 分散式搜尋的能力
13. OpenNLP
• NLP 即自然語言處理( Natural Language
Processing)
• OpenNLP 是 Apache 的自然語言處理程式庫
– 句子偵測(Sentence Detector)
– Tokenizer
– 名稱尋找器(Name Finder)
– 文件分類器(Document Categorizer)
– 詞性偵測(Part of Speech)
– ..
17. 在 Lucene 上建多份索引
• 同一份文件進到系統時,可以為它建立多
份索引
• 為什麼需要多份索引?
• 基於不同用途的索引
– bi-gram, tri-gram, n-gram 索引
– 詞庫索引
– 發音索引
– 同義詞索引
19. 中文同音字例
• 建立每個中文字的注音對照表
– 載入至 in memory 的 Hash Table 是個簡單的實
作方式
• 建索引時,查表將每個中文字轉換成為注
音
– 黄非紅 -> ㄏㄨㄤˊㄈㄟㄏㄨㄥˊ
• 查詢時一樣查表將查詢字轉換成為注音
– 黄飛鴻-> ㄏㄨㄤˊㄈㄟㄏㄨㄥˊ
• 查詢 “黄飛鴻” 時可同時查出 “黄飛鴻” 及 “
黄非紅”
21. 詞庫索引
• 何謂 bi-gram, tri-gram, … , n-gram?
• Bi-gram, tri-gram, … , n-gram 的優點
– 不需要倚靠事先建好的詞庫
• 缺點
– 使索引變大降低搜尋效率
– 搜尋出非目標的結果
• 詞庫索引可以視是一種縮小索引內容及範圍的方
式
– 更精準
– 但需要事先建立
26. 文字探勘的應用例子
• 部落格/新聞/文章
– 相似的部落格/新聞/文章
– 相關的部落格/新聞/文章(See Also)
– 某個使用者可能會感興趣的部落格/新聞/文章
– 部落格/新聞/文章自動分類(應用:適合投放的廣
告)
• Facebook/Twitter 近況更新
– 流行主題分析
– 口碑分析
– 使用者偏好分析
– 廣告投放
– 推薦興趣相同的使用者
– 推薦投其所好的社團
33. Vector Space Model (1/2)
• 每份文件中所含的詞,都是一個特徵
• 將每份文件轉成所有詞所構成之向量空間
中的向量
• 將文件轉換成為向量後即可處理文件的相
似度
34. Vector Space Model (2/2)
• 將文件表示為 n 維的向量
– n 即所有文字中的所有可能詞
– 若一文件被表示為向量 V,其中的第 i 個元素之
為 v(i) ,其值為詞 wi 的權重
– 詞 wi 的權重可以有不同的表示,例如
• 詞 wi 的出現次數
• 詞 wi 的 TF-IDF 值
36. TF-IDF
• Term Frequency – Inverse Document Frequency
• TF
– 詞在文件中出現的頻率
– 衡量特定詞在單一文件中的重要性
• IDF
– log( 總文件數/ (t 這個詞出現的文件總數) )
– 衡量特定詞所含的資訊重要程度
38. 取得 TF, IDF 資訊的初始動作
*http://filotechnologia.blogspot.tw/2013/11/get-tf-and-idf-of-all-terms-of-index.html
• 開啟 IndexReader
• 建立 TFIDFSimilarity 類別的 instance
42. Apache Mahout
• Apache Mahout™ 是個具規模可擴充性的機器學習
(machine learning)程式庫
• Mahout在Apache Hadoop ™ 上,使用了
map/reduce的演算法,實作了 clustering,
classification, 以及 collaborative filtering的核心演算
法
• 除了跑在分散式/雲端多節點的Hadoop平台上之外
,其中也提了單一節點以及非Hadoop的實作版本
• 其核心程式庫即使是非分散式的版本,也都經高
度最佳化因而能提供極佳的效能
43. Mahout 提供的諸般演算法
• 推薦引擎
– 指協同過濾式(Collaborative Filtering)推薦
• 分類演算法
– Bayesian, Support Vector Machine (SVM), Neural Network,
Hidden Markov Models, …
• 群集演算法
– K-Means, Fuzzy K-Means, Hierarchical Clustering, …
• Pattern Mining
– 頻繁項目集(Frequent Itemset)演算法
• Regression
• Dimension Reduction
– Singular Value Decomposition and other Dimension Reduction Techniques
• Vector Similarity
45. 如何計算相似度
• Mahout 中提供了計算向量相似度的程式
– Cosine Similarity
– Pearson Correlation Similarity
– Euclidian Distance Similarity
– Tanimoto Coefficient Similarity
– Log Likelyhood Similarity
49. 文件自動分群(2/2)
• 取得文件的 Vector 後,將 vector 套入
Mahout 的自動分群演算法,即可達到文件
的自動分群
– K-Means
– Fuzzy K-Means
– Meanshift
– Centroid Generation
– Direchlet Clustering
53. 關鍵詞及文字屬性
• 一篇文章中的關鍵詞
– 基本上是其中 TF-IDF 分數較高者
• 為使用者或商品標示關鍵詞
– 使用者瀏覽或按讚某文章,則該文章的關鍵詞
有可能是該使用者的偏好
– 文字是一個偏好的不錯的表示方式
– 點看商品細節、加入購物車、結帳 ... 都可從商
品的文字關鍵詞中推論使用者的偏好
57. 將 Lucene 索引轉換成 Mahout 向量
• Mahout 內建支援將 Lucene & Solr 索引轉換成為
Mahout 標準向量格式的工具程式
• $MAHOUT_HOME/bin/mahout lucene.vector
--dir $WORK_DIR/wikipedia/solr/data/index
--field body
--dictOut $WORK_DIR/solr/wikipedia/dict.txt
--output $WORK_DIR/solr/wikipedia/out.txt
• 除了 Lucene 索引外,Mahout 也支援將文件轉換
成為 SequenceFile 格式,再將 SequenceFile 格式檔
案轉換成為向量
59. 有了 Mahout 向量之外
• 即可套用 Mahout 現成的演算方法來處理向
量
– 文件群集
– 文件分類
– …
• 基於 Hadoop,可擴展處理更規模的文件資
料量