在AnyQ问答系统中,问题分析模块(Analysis)是整个系统中对输入问题进行解析的第一个模块。该模块所完成的主要功能有:
1. 对句子进行分词;
2. 对分词后的每个单词进行词性标注(POS);
3. 将每个单词进行词向量表示;
4. 命名实体识别(NER)。参考文章:https://www.jianshu.com/p/c36974c8aa7d
但是,在最初的AnyQ系统中,其仅实现了句子分词及词向量表示功能,并提供了相应功能插件的配置。其他,例如POS和NER的功能需要用户自行实现并添加(详解:待续)。下面将依次介绍,句子分词及词向量表示功能的配置方法。
1.句子分词添加
1.1 用户字典
当一个问题输入到分析模块后,要想实现对问题的分词,首先需要为该模块进行词典的配置,词典的配置文件路径为AnyQ/build/example/dict.conf
。在AnyQ系统中,所提供的字典类型有以下几种:
- 哈希词典:HashAdapter<TYPE1, TYPE2>
- 干预词典:String2RetrievalItemAdapter
- 切词词典: WordsegAdapter
- Paddle SimNet匹配模型词典: PaddleSimAdapter
- Tensorflow模型词典:TFModelAdapter
配置方式如下所示:
# 干预词典
dict_config {
name: "rank_weights"
type: "String2FloatAdapter"
path: "./rank_weights"
}
# 切词词典
dict_config {
name: "lac"
type: "WordsegAdapter"
path: "./wordseg_utf8"
}
# paddle SimNet匹配模型词典
dict_config{
name: "fluid_simnet"
type: "PaddleSimAdapter"
path: "./simnet"
}
1.2 句子分词的配置
词典配置完毕以后,即可在AnyQ/build/example/analysis.conf
配置文件中添加具有分词功能的插件,其格式如下所示:
# 切词
analysis_method {
name: "method_wordseg"
type: "AnalysisWordseg"
using_dict_name: "lac"
}
2.词向量表示的添加
句子分词功能添加完毕后,要实现会分好词的每个单词进行词向量的表示,需要在解析模块的配置文件中(AnyQ/build/example/analysis.conf
)添加相应功能插件,其格式如下
# 语义向量
analysis_method {
name: "method_simnet_emb"
type: "AnalysisSimNetEmb"
using_dict_name: "fluid_simnet"
dim: 128
query_feed_name: "left"
cand_feed_name: "right"
embedding_fetch_name: "tanh.tmp"
}
至此,整个解析模块基本配置完毕,其他需要用户自定义添加的功能,如POS,NER会在后面博客进行讲解。