270 likes | 373 Views
AISDK 版本 0.0.1. 自动应答 SDK. 多层回答系统. 多层系统增加系统的鲁棒性. 意图匹配. 数据存储 Tag 系统. 结构为主的系统. 关键字为主的系统. AI 的 3 层处理系统. 最底层第三层是关键字层。只要符合关键字即可。 第二层是结构匹配层。只要符合特定的结构即可。 第一层是意图匹配层,它通过意图样本训练得到的一个人工神经网络来识别意图。如果不匹配的才调用第二层和第三层。. 目录介绍. 假设 AI 的数据目录为 Data 则如下目录分别为: DataDic---- 辞典,结构等文件
E N D
AISDK 版本 0.0.1 自动应答SDK
多层回答系统 多层系统增加系统的鲁棒性 意图匹配 数据存储 Tag系统 结构为主的系统 关键字为主的系统
AI的3层处理系统 • 最底层第三层是关键字层。只要符合关键字即可。 • 第二层是结构匹配层。只要符合特定的结构即可。 • 第一层是意图匹配层,它通过意图样本训练得到的一个人工神经网络来识别意图。如果不匹配的才调用第二层和第三层。
目录介绍 • 假设AI的数据目录为 Data\ • 则如下目录分别为: • Data\Dic----辞典,结构等文件 • Data\Tag\Main----Tag存储系统,用户的数据存放地 • Data\User-----样本,函数,等先验数据
意图和意图样本 • 这里说的意图,是指一个功能模块. • 意图样本,就是激活这个功能模块的一些自然语言的句子样本。 • 例如:为了表达“修改订单”这个意图,我们有多种表达方式。 • 我有个订单,里面有些产品需要修改一下 • 我要修改订单。订单编号是123456
意图样本如何保存 • 新建一个txt文件,保存成UTF-8格式 • 这个文件的存放路径为: • Data\User\Common\ITS\ • 文件格式如下: • ======================================== • AI.意图样本 • ---------- • 意图1 • ---------- • 意图1对应的句子1 • ======================================== • AI.意图样本(如果和前面一条记录一样,可以省略) • ---------- • 意图2 • ---------- • 意图2对应的句子2 • ========================================
具体例子 • ======================================== • AI.意图样本 • ---------- • 修改订单 • ---------- • 我有个订单,里面有些产品需要修改一下 • ======================================== • ---------- • ---------- • 我要修改订单。订单编号是123456 • ========================================
意图的特征选取 • 为了让AI自动识别意图,必须给AI选取一些特征。这样AI可以自动建立一个识别句子意图网络。 • AI的特征存储在目录为: • Data\User\Common\ITS\Keys • 注意文件必须是utf-8形式 • 每行一个特征
意图的简单特征 • 特征可以是一个词汇 • 如:天气 • 也可以是结构,中间用空格分开 • 如:{城市.类.E} 天气 • 也可以是特征的并(多个特征同时出现),中间用,分割 • 如:修改,订单
意图的复杂特征 • 有的结构由于太抽象,包含的东西太多,它就失去了区分能力。这时候我们给他做一些限制,就可以表达复杂的特征。 • 如: • 什么_{集.类} • 0.1={节日} • 代表{集.类}的限制为 :{节日} • 限制符为0.0代表是第一个,0.1代表第二个,其他类似。
Tag系统 • AI内部数据是采用一个Tag存储系统。 • 这里的Tag系统是指:通过关键字可以查询到对应的文本或INT数组的系统。 • 1.关键字---(String) • 例如: • 1/name ID=1的记录的标题 • 1/content ID=1的记录的内容 • 2.Tag---{1,2,5,7,3} • 例如: • 上海---{1,2,3} • 区号---{1,2,3} • 支持Tag的交,数组的翻页。
读取数据到Tag系统 • Data\User\Common\下都是Tag系统的预处理文件。 • 这些数据都会自动读取到AI的一个Tag系统(AI包含多个Tag系统) • 格式:如果关键字一样的内容,可以放在一起。 • ======================================== • 关键字 • ---------- • 内容1 • ---------- • 内容2 • ======================================== • 关键字2 • ---------- • 内容3 • ========================================
意图和子意图 • 如果一个模块激活必须包含几个子模块的激活,我们称这些子模块为这个意图的子意图。 提醒.设置 日期 提醒内容
意图和子意图的存储 • 意图和子意图的关系 • 存储在Tag系统的预处理文件中,如下表示: • ======================================== • AI.Map • ---------- • ITS.Fire|Topic.日期|Topic.提醒.设置||1 • ---------- • ITS.Fire|Topic.提醒内容|Topic.提醒.设置||1 • ========================================
AI脚本语言 • 当结构匹配的时候,AI就可以执行一系列操作,给用户反馈等。为了提高AI的作用,有必要提供一套语言。让AI执行各种命令。 • 如:知识的存储,各种结构的增减。意图的激活等。权重的调整。
AI脚本调用机制 • 当用户输入一个句子后 • AI检查是否激活了某些意图 • 如果激活意图A。 • 则系统自动检测是否有 • Tag为“Fun.A.”的记录,如果有则执行这个记录的内容字段中包含的脚本。
一个简单的脚本 • 我们来看一个简单的脚本 • ============================= • Fun.Test1. • --------------------- • 【AI.Map】 • A=“1” • B=“2” • Sys.out=Math.Cal(“【A】+【B】”) • ============================= • 这个函数的名称为Fun.Test1. • 【AI.Map】代表这个是一个脚本,而不是普通文本。 • 其中A,B是2个变量,sys.out是函数的输出值。 • Math.Cal是计算函数。 • 【A】是对变量A的引用。 • 注意:AI中所有的变量都是字符串!
脚本函数的分类 • “ITS.“开头的,意图有关的函数 • “CN.“开头的,以集合为基础的语义网函数(CN=ConceptNetWork) • “Hook."开头的,Hook函数 • “FW .”开头的,Tag系统函数 • “Session.”开头的, Session函数,与用户有关的临时变量存储 • “Net.“开头的,网络函数,如抓取网络信息,天气,IP等 • "Vector.“开头的,向量函数 • “Break.”开头的,中断函数 • “Check.”开头的,判断检测函数 • “Save.”开头的,保存函数 • “Time.“开头的,时间函数 • "SYS.“开头的,系统函数 • “String.“开头的,字符串函数 • “Var.“开头的,系统变量的一些函数 • "File.“开头的,文件函数 • "Math.“开头的,数学函数 • “Map.“或”Search.“开头的,映射或搜索有关的函数。
Hook函数 • Hook设置 • 设置Hook函数后,当指定的结构出现在句子中,相应的函数就自动激活;如: • =Hook.Set("城市","{城市.类.E}","城市.Save") • 如果出现城市,如:上海 • 就会自动激活Tag为“Fun.城市.Save"的函数。
Session 函数介绍 • 保存一个字符串到某个地址key1/key2 • Session.Save(“key1”,”key2”,”value1”) • 从key1/key2地址读取一个值存储到A • A=Session.Load(“key1”,”key2”)
Net函数介绍 • 从google.cn抓取上海天气 • A=String.URLENCODE(“上海天气") • HTML=Net.Post("www.google.cn","80","/search?q=【A】","GET","","utf-8") • Net.Post是抓取函数, • 第一个参数是网址 • 第二个是端口 • 第三个是文件地址 • 第四个是方法 • 第五个是Post的值(注意先编码) • 最后一个是编码方式。 • Net.SendMsg • 主动发送消息 • Net.SendMsg(“happyli.happyli@gmail.com”,“AI启动了”)
String函数介绍 • String.Reg.Get,正则表达式匹配 • 如果HTML变量是抓取来的一个网页我们要用Pattern去匹配。则: • Pattern="[细节](.*?)(【B】天气(.|\n)*?)北京市专业气象台" • R=String.Reg.Get(HTML, Pattern, "0") • String.Replace 函数 • 替换字符串 • R=String.Replace(R,“hi”,“你好") • String.HTML2Text 函数 • 把HTML转为普通文本 • HTML=String.HTML2Text(HTML) • String.URLENCODE函数 • 编码为utf-8格式
一个抓取上海天气的例子 • 如果我们想输入:上海天气,或者输入:shtq就把google.cn中的上海天气信息抓取过来,则我们需要写如下一个Tag记录即可实现我们要的功能。 • ======================================== • 上海天气 shtq • ---------- • 【AI.Map】 • A=String.URLENCODE(“上海天气") • HTML=Net.Post("www.google.cn","80","/search?q=【A】","GET","","utf-8") • HTML=String.HTML2Text(HTML) • R=String.Reg.Get(HTML,"[细节](.*?)(【B】天气(.|\n)*?)北京市专业气象台","0") • R=String.Replace(R,"细节]。","") • R=String.Replace(R,"北京市专业气象台","") • Sys.out=【R】 • ========================================
通用的天气查询,step1 • 如果我们要查询任何城市的天气如何做呢? • 1.首先需要让AI识别这样的意图 • 我们在\Data\User\Common\ITS\下建立一个utf-8编码的文本文件。 • 内容如下: • ======================================== • AI.意图样本 • ---------- • 天气查询 • ---------- • 上海天气 • ======================================== • ---------- • ---------- • 北京的天气 • ======================================== • ---------- • ---------- • 上海的天气 • ======================================== • ---------- • ---------- • 天气上海 • ========================================
通用的天气查询,step2 • 训练AI方法: • 输入t • 然后输入次数,比如1. • 建议正确和错误的比率<1/5为止 • 次数越多,越接近。如果特征选取不够,错误率也不会趋向于零。
通用的天气查询,step3 • 输入一些函数 • ======================================== • AI.Map • ---------- • ITS.Fire|Topic.城市|Topic.天气查询||1 • ======================================== • Fun.天气查询. • ---------- • 【AI.Map】 • B=Session.Load("","Topic.城市") • T=Session.Save("","Topic.城市","") • A=String.URLENCODE("【B】天气") • HTML=Net.Post("www.google.cn","80","/search?q=【A】","GET","","utf-8") • HTML=String.HTML2Text(HTML) • R=String.Reg.Get(HTML,"[细节](.*?)(【B】天气(.|\n)*?)北京市专业气象台","0") • R=String.Replace(R,"细节]。","") • R=String.Replace(R,"北京市专业气象台","") • =【R】 • ======================================== • Fun.城市. • ---------- • 【AI.Map】 • =Hook.Set("城市","{城市.类.E}","城市.Save") • =请输入城市,如:上海 • ======================================== • Fun.城市.Save • ---------- • 【AI.Map】 • =Session.Save("","Topic.城市","$[@]$") • =ITS.SetItem("Topic.城市") • ========================================
AI的访问接口 • AI除了可以web方式访问外。还可以通过GTalk,MSN,QQ访问 • Web方式访问 • 90端口,HTTP协议。 • GTalk,MSN,QQ • 对应3个Msger程序。