本文是对著名对话机器人开源框架Rasa NLU Sklearn classifier架构的解析。Rasa是一套开源机器学习框架,用于构建基于上下文的AI小助手和聊天机器人。Rasa有两个主要模块:Rasa NLU 用于对用户消息内容的语义理解;Rasa Core 用于对话管理(Dialogue management)。本文主要针对Rasa NLU Sklearn classifier做细节上的说明。
本文更多关注算法,主要内容如下:
- Sklearn classifier架构
- 模型支持说明
- 配置样例
- 核心代码解析
Sklearn classifier架构
313
模型支持说明
Rasa 对 Sklearn中的所有分类器都支持,包括并不限于以下:
模型名称 | 是否支持 |
---|---|
LogisticRegression | 支持 |
RandomForestClassifier | 支持 |
DecisionTreeClassifier | 支持 |
MultinomialNB | 支持 |
GradientBoostingClassifier | 支持 |
SVM原理简介:
SVM是找到不同类别之间的分界面,使得两类样本尽量落在面的两边,而且离分界面尽量远。SVM是平面的,局限很大, 这时就利用到核函数。
核函数在解决线性不可分问题的时候,采取的方式是:使用低维特征空间上的计算来避免在高维特征空间中向量内积的恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征空间恐怖的内积计算量。
本质: 核函数是一个低纬的计算结果,并没有采用低纬到高维的映射。只不过核函数低纬运算的结果等价于映射到高维时向量点积的值。
1、多项式核函数
对传入的样本数据点添加多项式项;新的样本数据点进行点乘,返回点乘结果;
多项式特征的基本原理:依靠升维使得原本线性不可分的数据线性可分;
2、高斯核函数
思想:按一定规律统一改变样本的特征数据得到新的样本,新的样本按新的特征数据能更好的分类,由于新的样本的特征数据与原始样本的特征数据呈一定规律的对应关系,因此根据新的样本的分布及分类情况,得出原始样本的分类情况。
高斯核本质是在衡量样本和样本之间的“相似度”,在一个刻画“相似度”的空间中,让同类样本更好的聚在一起,进而线性可分。
限制:(1) SVM算法对大规模训练样本难以实施*
(2) 用SVM解决多分类问题存在困难
配置样例
1315
1397
核心代码解析
LabelEncoder()函数: 标签编码,类别标签数值化
transform_labels_str2num() 函数: 标签到数值
transform_labels_() 函数: 输入数值,输出标签文本
GridSearchCV() 函数:网格搜索参数,通过循环遍历,尝试每一种参数组合,返回最好的得分值的参数组合。
SVC() 函数: 创建模型训练器
process()函数: 模型推理