今天偶尔看到一个同义词库, 想到这个有什么用途哪? 肯定是用来判断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个权重可以得出一个同义词的匹配度, 然后继续分析即可.
以上只是一个非常简单的分析模拟, 和实际的搜索引擎逻辑差别非常大, 仅供参考.