今天偶爾看到一個同義詞庫, 想到這個有什么用途哪? 肯定是用來判斷2句話, 2篇文章的相似性的.
它對搜索引擎,對論文抄襲鑒定系統肯定有用, 于是去搜索引擎試了試, 結果大失所望失望, 貌似google,bing,baidu對同義詞沒有做處理, 感覺是很簡單的東西, 竟然沒有做相關處理.
而且不僅僅是沒有做同義詞處理, 相關度方面也很差, 真是很奇怪的事情.
我們隨便找一句話: (從google的桌面工具文檔里)
A: "我們十分關注您的安全并為此推出了一項功能",
對應樣本為:
B: "我們非常關注您的安全并為此推出了一項功能"
我們搜索一下, 可以發現 A 可以匹配的很好, 如果改成B, 發現和A匹配的第一項不見了, 按照正常猜想即使改了一個詞 相關度應該還是很高, 不知道為什么會這樣.
替換其中一個同義詞: (發現原來的網頁不在前面了, 翻了幾頁也沒有找到)
我們暫且不考慮 "大勝美國隊" 和 "大敗美國隊"的語義分析, 但是上面的結果肯定不盡人意, 因為你可能需要考慮所有同義詞, 否則可能就錯過你想要的結果.
下面我們做一個簡單的分析和模擬來實現同義詞的相關邏輯, 假設的流程如下:
-
首先我們要有同義詞對應表(多對多,可以有權重)
-
收錄網頁時把相應同義詞映射到同一個詞, 當然可以映射多個
-
在搜索時先預處理用戶輸入的內容
-
根據匹配算法計算
1. 同義詞表結構如下
一百分 -->滿分, 0.8
十分 --> 滿分, 0.8
十分 --> 非常, 0.95
特別 --> 非常, 0.9
格外 --> 非常, 0.9
關心 --> 關注, 0.95
注意 --> 關注, 0.85
......
所有同義詞映射到同一個詞語, 并賦予一個權重. 當然還有多義詞的問題, 會出現多個映射.
當然同義詞的整理也是個巨大的工作量, 網上也有一些詞庫.
2. 根據同義詞庫的映射
原內容: 我們十分關注您的安全并為此推出了一項功能
映射后: 我們 滿分*0.8|非常*0.95|(十分) 關注您的安全并為此推出了一項功能
"|"表示有多個選擇, "()"表示為原內容.
3. 對輸入內容的分析映射
用戶輸入: 我們非常關心您的安全并為此推出了一項功能
分析映射: 我們非常 關注*0.95|(關心) 您的安全并為此推出了一項功能
4. 匹配查找
匹配查找就是搜索引擎核心的邏輯了, 當然在遇到 "滿分*0.8|非常*0.95|(十分)" 需要增加同義詞判斷邏輯, 根據2個權重可以得出一個同義詞的匹配度, 然后繼續分析即可.
以上只是一個非常簡單的分析模擬, 和實際的搜索引擎邏輯差別非常大, 僅供參考.