一款基于SVM算法的分布式法律助手

简介: 一款基于SVM算法的分布式法律助手

一. 项目简介 与 使用说明#


项目基于 Spring Cloud 、Vue 构建,平台针对需要维权的用户而设计,主要提供如下三个功能模块。


  • 一、提供问答服务模块
    用户可以在本模块中描述一句简短的话,系统将为用户推送出与用户描述相似的问题及答案。
  • 二、罪名推断模块
    用户可以输入一个场景,系统将给用户推送出此场景可能触发的罪名,量刑区间,以及可能触发的法律法规。
  • 三、相似判决文书查询模块
    用户可以将自己的判决文书输入到系统中,系统将会为用户推送相似的判决文书。


主页



问答服务 - 支持前缀匹配,全文检索



罪名推断:

点击主页的案情推断,输入一段场景



点击搜索:得出如下响应



相似文书查询:

将您的文书拷贝进文书查询模块,点击搜索,系统将推送给您往年相似的判决文书



结果如下:



二. 主要技术点#


  • 前后端分离架构,前端Vue + 后端SpringCloud
  • 基于 ElasticSearch 的搜索提示及全文检索功能为用户提供问答服务。
  • 集成机器学习分类算法模型 SVM, 文本分类,推断相关罪名
  • 基于simhash算法,实现相似文本检查
  • Java 与 Python 使用Apache Thrift完成异构RPC调用
  • 使用Docker将SVM模型容器化,可移植性很强
  • 项目部署:静态资源服务器 Nginx。


三. 环境搭建#


3.1 后端#


地址: https://github.com/zhuchangwu/lawyer-lover-cloud-backend

  • 后端SpringCloud版本:Finchley.SR2
  • 开发工具: IDEA
  • Maven版本: 3.3.9

同学们自行将本项目clone到本地导入idea即可使用。


3.2 前端#

前端github地址: https://github.com/zhuchangwu/lawyer-lover-vue-frontend

nodejs版本: v10.14.1


安装命令:


npm install serve


前端代码精简,如果感兴趣可以拉取下来自行开发

鸣谢: 前端贡献者 '集智慧与美貌于一身'的:CamWang


3.3 SVM算法-Docker镜像#


推荐: 使用我封装好的SVM算法模型的Docker镜像,目前已经打包发布在云上, 优点如下:

  • 基于Docker构建,可移植性很好,同学们可以直接拉取到自己服务器的Docker上,开箱即用。
  • 添加了ApacheThrift 依赖,将算法模型封装成了 Thrift - Server ,实现了和 Java-SpringCloud 的异步RPC通信。


如何拉取镜像:


### 1. 启动docker
### 2. 拉取镜像
sudo docker pull registry.cn-beijing.aliyuncs.com/changwu/lawyer:release


使用镜像


# 1. 启动镜像:
docker run --name [指定容器名] -i -t -p 9998:9998 -d [ImageId]
# 2. 进入容器:
docker container exec -it [指定的容器名或者容器的ID] /bin/bash
# 3. 启动模型:
docker run 
# 4. 切入目录
cd /home/lawer
# 5. 使用tmux使py在后台运行 , 在bash输入如下命令
tmux
# 6. 进入tmux,在tmux中启动程序 ,模型需要加载大约30s完成启动,在控制台可以看到启动日志
python thrift_server.py
# 7. 模型启动后,可以退出镜像 `exit`  或者直接关闭ssh终端, 模型都会正常运行
# 8. 重新ssh上去之后,执行如下命令,可以看到python程序还在正常执行
tmux attach


鸣谢:liuhuanyong教授: 算法模型来源


3.4 Nginx相关配置#


同学们在上线当前项目时推荐使用Nginx服务器代理静态资源 。

当前项目使用Nginx做了如下几点工作,同学们自行可以参照提供的配置项做适当修改。

  • Nginx代理Vue打包生成的静态资源。
  • 解决前段端的跨域配置。
  • 将用户在前端请求转发到后端SpringCloud网关。

nginx相关配置文件路径: /reources/nginx-conf 。


四. ElasticSearch相关#


4.1 版本:#


推荐使用 6.2.4

因为我针对法律主题,做了的分词器定制化( 拓展了词库 ), 下文有提及。

至于ES的安装本文不再展开了,同学们可以自行百度安装。


4.2 创建Index:实体类->Index#


  • 问答模块index的建立脚本


PUT /ai_answer_question
{
  "mappings": {
    "answer_question" : {
      "properties" : {
        "title" : {
          "type": "text",
          "analyzer": "ik_max_word",
          "fields": { // 添加搜索推荐  suggest
            "suggest" : {
              "type" : "completion", // 特定的类型
              "analyzer": "ik_max_word" // 指定分词器
            }
          }
        },
        "content": {
          "type": "text", 
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}


另外两个模块的测试类像下面这样写测试类,通过Template无脑创建就行


@RunWith(SpringRunner.class)
@SpringBootTest
public class CrimeTest {
  @Autowired
  ElasticsearchTemplate template;
  @Autowired
  CrimeRepository repository;
  @Test
  public void deleteIndex(){
       template.deleteIndex(Crime.class);
  }
   @Test
   public void testCreateIndexAndMapping() {
      template.createIndex(Crime.class);
      template.putMapping(Crime.class);
   }
}


4.3 Ik分词器#


推荐我提供的IK分词器: 路径: /resource/ik

原因:

  • 拓展中文词库。
  • 加入了法律相关的专有名词,提高专业名词的得分率和召回率。
  • 加入了停用词(问候词)
  • 这么设计的初衷是考虑到项目中的搜索提供功能, 比如用户输入了 房产XXX ,那么我们将为其进行搜索并提示他有哪些以用户输入关键字开头的词条。
  • 如果用户仅仅是输入了: 你好,请问 这类词语将被ES过滤掉,而不理会。
  • 如果你觉得不合理,可以去ik/conf中修改相关配置。


五. 数据#


下面三个模块的数据挺大的, 就不上传到github了,同学搭建项目时如果需要如下三个模块的测试数据 , 可以扫描下面二维码关注,回复:data 领取后,自行导入ES即可。

  • 相似文书模块依赖的数据:
  • 罪名推断模块依赖的数据:
  • 问答模块依赖的数据:

导入罪名模块测试的方法


@Test
public void add() {
    File file = new File("F:\\新建文件夹\\crime.json");
    try {
        Set<Crime> set = new TreeSet<Crime>(new Comparator<Crime>() {
            @Override
            public int compare(Crime o1, Crime o2) {
                //字符串,则按照asicc码升序排列
                return o1.getCrimeName().compareTo(o2.getCrimeName());
            }
        });
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        String result = null;
        while (((result = bufferedReader.readLine()) != null)) {
            Crime crime = JsonUtils.jsonToPojo(result, Crime.class);
            set.add(crime);
        }
        System.out.println(set.size());
        for (Crime crime : set) {
            repository.save(crime);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
相关文章
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于MSER和HOG特征提取的SVM交通标志检测和识别算法matlab仿真
### 算法简介 1. **算法运行效果图预览**:展示算法效果,完整程序运行后无水印。 2. **算法运行软件版本**:Matlab 2017b。 3. **部分核心程序**:完整版代码包含中文注释及操作步骤视频。 4. **算法理论概述**: - **MSER**:用于检测显著区域,提取图像中稳定区域,适用于光照变化下的交通标志检测。 - **HOG特征提取**:通过计算图像小区域的梯度直方图捕捉局部纹理信息,用于物体检测。 - **SVM**:寻找最大化间隔的超平面以分类样本。 整个算法流程图见下图。
|
4月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
16天前
|
算法 关系型数据库 MySQL
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
在分布式系统中,确保每个节点生成的 ID 唯一且高效至关重要。Snowflake 算法由 Twitter 开发,通过 64 位 long 型数字生成全局唯一 ID,包括 1 位标识位、41 位时间戳、10 位机器 ID 和 12 位序列号。该算法具备全局唯一性、递增性、高可用性和高性能,适用于高并发场景,如电商促销时的大量订单生成。本文介绍了使用 Go 语言的 `bwmarrin/snowflake` 和 `sony/sonyflake` 库实现 Snowflake 算法的方法。
27 1
分布式唯一ID生成:深入理解Snowflake算法在Go中的实现
|
28天前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
28天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
2月前
|
算法
基于粒子群算法的分布式电源配电网重构优化matlab仿真
本研究利用粒子群算法(PSO)优化分布式电源配电网重构,通过Matlab仿真验证优化效果,对比重构前后的节点电压、网损、负荷均衡度、电压偏离及线路传输功率,并记录开关状态变化。PSO算法通过迭代更新粒子位置寻找最优解,旨在最小化网络损耗并提升供电可靠性。仿真结果显示优化后各项指标均有显著改善。
|
3月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
50 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
3月前
|
机器学习/深度学习 算法 数据挖掘
R语言中的支持向量机(SVM)与K最近邻(KNN)算法实现与应用
【9月更文挑战第2天】无论是支持向量机还是K最近邻算法,都是机器学习中非常重要的分类算法。它们在R语言中的实现相对简单,但各有其优缺点和适用场景。在实际应用中,应根据数据的特性、任务的需求以及计算资源的限制来选择合适的算法。通过不断地实践和探索,我们可以更好地掌握这些算法并应用到实际的数据分析和机器学习任务中。
|
4月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
165 2
|
4月前
|
机器学习/深度学习 数据采集 算法
基于SVm和随机森林算法模型的中国黄金价格预测分析与研究
本文通过运用支持向量机(SVM)、决策树和随机森林算法,结合历史黄金价格数据和特征工程,建立了中国黄金价格的预测模型,并通过模型训练、评估及可视化分析,为黄金市场投资者和分析师提供了基于机器学习算法的预测方法和决策支持。
139 0