JAVA使用词向量模型(word2VecModel)实现NLP意图理解AI
JAVA AI使用词向量模型(word2VecModel)实现NLP意图理解
·
开发环境、工具
windows10 专业版
idea2020.1.4、jdk8
机器配置
I5-1240P、16GRAM
实操
1.配置初始意图相关语料
open_intents_1.0.csv
query_0000001,订单查询,查下我的订单##我的订单##订单查询##查询订单##查询我的订单##订单列表##我的单子##我有几个订单##查下我的订单状态##我的订单进度##订单详情查询##查询订单信息##查询我的所有订单##订单总览##我的订单历史##我有哪些订单##我的订单发货没##订单发货状态##查询订单物流##我的订单物流信息##订单是否已签收##签收状态查询##我的订单退款情况##退款订单查询##我的订单换货进度##换货状态##我的订单评价##订单评价查询##我的优惠订单##优惠订单列表##我的特殊订单##特殊订单查询
query_0000002,余额查询,余额查询##查下我的余额##我的余额还有多少##我的账户余额##钱包余额##我还有多少钱##查看账户余额##查下我还有多少钱##我的可用余额##账户余额还剩多少##我的资金余额##钱包里还剩多少钱##我的账户剩余金额##查询我的余额数目##余额还有多少可用##账户资金状况##查看我的钱包余额##钱包当前余额##我还有多少可支配金额##账户余额查询##查询账户剩余资金##钱包资金余额##我的账户剩余多少钱##我的资金还剩多少##账户剩余可用余额##我的财务余额
query_0000003,物流查询,我的快递到哪里了##我的包裹还没送到##包裹到哪里了##我的包裹什么时候送来##我的快递还有多久送来##我的物流信息更新了吗##我的快递还在路上吗##物流到哪里了##我的包裹预计送达时间##我的快递还要多久才能到##我的快递被签收了吗##我的包裹是否已送达##快递到哪里了##我的包裹今天能送到吗##我的快递派送中了吗##我的快递被哪个快递员送了##我的包裹现在在哪##快递最新位置##我的包裹大概几点送到##我的快递距离我还有多远##我的快递是不是延误了##我的包裹为何还没到##快递延误查询##我的包裹有没有被退回##我的快递最新动态##我的快递配送范围是多少##我的包裹是否超出配送范围##快递配送范围查询##我的包裹是否已安排配送##我的快递是否已开始派送
query_0000004,促销活动查询,现在有什么促销活动##有打折活动吗##现在有哪些促销奖励##促销活动##打折信息查询##打折活动查询##商品打折促销##现在有什么优惠活动##有特价商品吗##现在有哪些优惠套餐##优惠活动##特价信息查询##特价商品查询##商品特价优惠##现在有什么满减活动##有满赠活动吗##现在有哪些积分兑换##积分活动##满减信息查询##满赠活动查询##商品满减优惠##现在有什么限时抢购##有秒杀活动吗##现在有哪些新品促销##新品活动##限时抢购信息查询##秒杀活动查询##商品新品特惠
2.语料配置文件
IntentsConfig.java
@Value("${open.nlp.intentsFilePath:D:/work/code/clark/gitee/intent-alz/open_model_src_file/open_intents_1.0.csv}")
private String intentsFilePath;
3.模型生成路径配置
ModelFileConfig
@Value("${open.nlp.modelpath:D:/work/code/clark/gitee/intent-alz/open_model}")
private String modelsFilePath;
4.训练参数配置
NlpConfig.java
@Value("${nlp.config.trustPowerTh:0.5}")
private Double trustPowerTh;
@Value("${nlp.config.sentence.studyMaxFrequency:4}")
private Integer studySentenceMaxFrequency;//词向量模型训练次数
@Value("${nlp.config.word2Vec.studyMaxFrequency:10}")
private Integer studyWord2VecMaxFrequency;//语义分类模型训练次数
@Value("${nlp.config.wordEmbeddingChangeTh:0.4}")
private Double wordEmbeddingChangeTh;
5.执行训练-推理
NlpTest.java
@Test
public void test1(){
String sentence = "查下我有几个订单";
ONIntentAlzResp alzResp = intentAlzCpService.alz(sentence);
System.out.println("sentence=="+sentence+"=="+JSON.toJSONString(alzResp));
}
第一次执行,因modelsFilePath路径模型文件不存在,会自动执行训练,生成模型文件
词向量模型训练end.json
词向量模型训练耗时
语义分辨模型训练sentence.json
语义分辨模型训练耗时
模型文件已生成,并识别命中意图"订单查询query_0000001"
推理结果输出
再次执行推理,因模型文件已存在,所以可以毫秒级输出
总结:推理能力和大模型还是相差甚远,但通过丰富语料,调整训练参数在特定业务场景中使用还是有可行性的。另外还有个巨大优势,低成本,jvm就能执行,毫秒级响应,大规模高并发场景下性能优势显著!
工程代码
https://gitee.com/clark2020/easyAi.git(分支dev_open)
已开源,欢迎讨论交流
依赖开源项目
easyAi-1.2.5(https://gitee.com/dromara/easyAi)
源工程对指令code支持类型为整型,因项目需要forked后我修改了微量代码,对应gav如下
<dependency>
<groupId>com.wlld</groupId>
<artifactId>easyAi</artifactId>
<version>1.2.5-xgf</version>
</dependency>
https://gitee.com/clark2020/easyAi.git
更多推荐
所有评论(0)