百度NLP中文分词词典动态更新
所有文档
menu

Elasticsearch BES

百度NLP中文分词词典动态更新

产品详情自助选购


百度智能云Elasticsearch的NLP中文分词插件支持用户添加自定义词典干预NLP模型,从而进行分词词典动态热更新。

用户可以根据需求,通过上传词典文件输入文本两种方式添加自定义词典。

注意:NLP中文分词词典动态更新目前支持功能发布后新创建的7.4.2版本的实例(即2021年01月20日后创建的7.4.2版本的实例),不支持的集群请提交工单,BES团队会协助升级集群,升级方式参见ES版本升级

使用方式

  1. 登录百度智能云Elasticsearch控制台,并点击集群名称,进入集群详情界面。
  2. 在左侧导航栏,单击插件配置

image.png

  1. 点击“配置词典”,在弹出的页面添加自定义词典。用户可以通过上传词典文件输入文本两种方式添加自定义词典。
  • 通过上传文件的方式:

image.png

  • 通过直接输入文本的方式:

image.png

  1. 上传成功后,即完成词典更新,可以使用以下语句测试自定义词典的效果。
POST /_analyze
{
   "analyzer": "bd-nlp-basic",
   "text": "测试语句"
}

自定义词典

词典格式说明

  1. 干预规则按行分割(\n)。
  2. 上传词典文件时,可以选择使用空格或使用TAB(\t)来进行干预规则内的词典分词;直接输入文本的方式则只能使用空格作为分隔符。
  3. 干预规则内可以使用[ ]basic模型和phrase模型同时干预。

干预规则说明

用户可以按照以下格式对自定义词典进行配置:

中华    人民    共和国
中华    [人民   共和国]
中华
人民
共和国

例如:未进行干预前,bd-nlp-basic(basic模型)和bd-nlp-phrase(phrase模型)对中华人民共和国分词的结果是:

中华人民共和国

干预 basic 模型分词

干预词典:

上下文关系的干预规则:

中华  人民  共和国

不带上下文关系的干预规则:

中华
人民
共和国

干预后两种力度的切词结果一样:

{
    "tokens":[
        {
            "token":"中华",
            "position":0
        },
        {
            "token":"人民",
            "position":1
        },
        {
            "token":"共和国",
            "position":2
        }
    ]
}

注意:

  • 上下文关系 表示是不是切出这个词是由这个词的前后词来决定,例如用户如果将干预规则配置为:
中华  人民  共和国

则只会对中华人民共和国进行按照该规则进行分词,而不会对中华人民人民共和国进行分词;而如果将干预规则配置为:

中华
人民
共和国

则可以对中华人民人民共和国进行分词。

  • 干预基础粒度分词,会有一定概率影响phrase粒度分词结果,因为phrase模型是对basic结果进行智能组合,会有无法重组回原粒度切词结果的情况出现

同时干预 basic 模型和 phrase 模型

干预词典规则:

中华	[人民	共和国]

bd-nlp-basic分词结果:

{
    "tokens":[
        {
            "token":"中华",
            "position":0
        },
        {
            "token":"人民",
            "position":1
        },
        {
            "token":"共和国",
            "position":2
        }
    ]
}

bd-nlp-phrase分词结果:

{
    "tokens":[
        {
            "token":"中华",
            "position":0
        },
        {
            "token":"人民共和国",
            "position":1
        }
    ]
}

phrase模型会对[]内的词(basic可以分词)重组成一个词。

利用上下文语义进行干预 basic 和 phrase 模型

  1. []内的词是对phrase模型进行干预,phrase模型会对[]内的词(basic模型可以切出来)智能组合
  2. 没有[]只会根据上下文语义对basic模型进行干预

干预词典规则:

云原生	[数仓	创始]

原始文本内容:

云原生数仓创始和数仓创始

规则生效前:

basic模型分词结果:

[云原生, 数, 仓,  创始, 和, 数, 仓, 创始]

phrase模型分词结果:

[云原生, 数, 仓,  创始, 和, 数, 仓, 创始]

规则生效后:

{
    "tokens":[
        {
            "token":"云原生",
            "position":0
        },
        {
            "token":"数仓",
            "position":1
        },
        {
            "token":"创始",
            "position":2
        },
        {
            "token":"和",
            "position":3
        },
        {
            "token":"数",
            "position":4
        },
        {
            "token":"仓",
            "position":5
        },
        {
            "token":"创始",
            "position":6
        }
    ]
}

分词结果为:

[云原生, 数仓,  创始, 和, 数, 仓, 创始]

可以看到文本中第二个的数仓创始,由于不满足上下文关系(该词前面的词不是云原生),所以不会切出数仓

nlp-bd-phrase分词结果:

{
    "tokens":[
        {
            "token":"云原生",
            "position":0
        },
        {
            "token":"数仓创始",
            "position":1
        },
        {
            "token":"和",
            "position":2
        },
        {
            "token":"数",
            "position":3
        },
        {
            "token":"仓",
            "position":4
        },
        {
            "token":"创始",
            "position":5
        }
    ]
}

切词结果:

[云原生, 数仓创始, 和, 数, 仓, 创始]

可以看到数仓创始phrase模型智能组合为数仓创始

说明: 云原生可以放在干预词典规则的前面和后面, 具体可以根据业务的上下文语义需求。

注意

  • 不是所有的干预规则都会成功,会有一个模型匹配的概率问题。
  • 上传的文件用UTF-8编码,扩展名为txt
  • 上传的词典文件最大为10M
上一篇
百度NLP中文分词插件
下一篇
基于BOS的冷热数据分离