动态同义词插件
更新时间:2024-07-12
背景
词干提取是通过简化他们的词根形式来扩大搜索的范围,同义词通过相关的观念和概念来扩大搜索范围。 也许没有文档匹配查询 “英国女王“ ,但是包含 “英国君主” 的文档可能会被认为是很好的匹配。用户搜索 “美国” 并且期望找到包含 美利坚合众国 、 美国 、 美洲 、或者 USA 的文档。
百度智能云Elasticsearch提供的动态同义词插件可以满足上述需求,同义词词典主要包括一个可选的内置的汉语同义词词典和用户提供的远端可更新的同义词词库,用户需要在创建索引的时候对需要进行同义展开的字段进行设定。
注意:目前动态同义词插件支持7.4.2、7.10.2版本的Elasticsearch实例。
使用方式
创建索引并自定义分词器
PUT synonym_test
{
"settings": {
"index": {
"number_of_replicas": 0,
"number_of_shards": 1,
"analysis": {
"analyzer": {
"sy": {
"type": "custom",
"tokenizer": "bd-nlp-phrase",
"filter": [
"remote_synonym",
"lowercase"
]
}
},
"filter": {
"remote_synonym": {
"type": "bd_synonym",
"expand": true,
"synonyms_path": "http://{ip}:{port}/synonym.txt",
"reload_interval": 30
}
}
}
}
}
}
参数说明:
参数 | 说明 |
---|---|
type | 固定为bd_synonym |
expand | 对同义词词进行取代替换或展开, 默认为true 即展开 |
synonyms_path | 远程词典的地址, 需要用户配置并且保证ES集群可以访问(可以上传到BOS获取BOS访问链接,详见下文) |
reload_interval | 检测远程词典变化的时间间隔, 默认为30s |
need_tokenize | 是否对同义词词典中的单个词进行分词, 默认为false并采用keyword tokenizer |
local | 是否启用内置的本地同义词库,默认为true,我们提供了一个基础的中文同义词词典但并不保证效果 |
format | 支持solr 和wordnet 类型的同义词词典,建议设置值采用默认值solr , 设定其他值按solr 处理 |
analysis_mode | 同义语义作用的分析阶段,all 、index 、search , 默认为all |
lenient | 同义词词典中如果有行解析错误是否跳过, 默认为true |
上传词典到BOS
用户可以把词典文件上传到BOS,并获取链接地址。需要注意的是,务必保证Elasticsearch所在地区与BOS Bucket的地区相同,否则无法访问词典。
1.建议将词典文件的访问权限设置为公共读
,确保文件永久有效,且链接地址不会发生变化。
2.若不设置为公共读,则需要按业务需求修改BOS链接的有效时间,如需永久有效,可将有效时间设为-1。注意,链接有效期过后或词典文件如果发生修改(删除后重新上传),链接地址会发生变化,此时需要重新在Elasticsearch中配置链接地址。
词典说明
同义词最简单的表达形式是用逗号分隔:
"jump,leap,hop"
如果遇到这些词项中的任何一项,则将其替换为所有列出的同义词
原始词项 → 取代
────────────────────────────────
jump → (jump,leap,hop)
leap → (jump,leap,hop)
hop → (jump,leap,hop)
或者, 使用 => 语法,可以指定一个词项列表(在左边),和一个或多个替换(右边)的列表:
"usa,united states,united states of america => usa"
"gb,gb,great britain => britain,england,scotland,wales"
原始词项 → 取代
────────────────────────────────
u s a → (usa)
united states → (usa)
great britain → (britain,england,scotland,wales)
如果多个规则指定同一个同义词,它们将被合并在一起,且顺序无关,否则使用最长匹配
一个简单的中文同义词词典样例:
肯德基,KFC,开封菜
America, Unitied States, 美国, 美利坚合众国
中国,china,中华人民共和国
elasticsearch,ES
公有云,云计算
AI,人工智能,智能
机器人,robot,机械机构
说明:
- 每行是一个同义词组
- 用英文逗号进行分割
_analyze API测试
POST test/_analyze
{
"text": "KFC",
"analyzer": "sy"
}
分词结果:
{
"tokens": [
{
"token": "kfc",
"start_offset": 0,
"end_offset": 3,
"type": "WORD",
"position": 0
},
{
"token": "金拱门",
"start_offset": 0,
"end_offset": 3,
"type": "SYNONYM",
"position": 0
},
{
"token": "开封菜",
"start_offset": 0,
"end_offset": 3,
"type": "SYNONYM",
"position": 0
}
]
}
注意
创建索引时会以同步的方式请求远端词典,所以创建索引的时间可能会比较长。