当前位置:   article > 正文

【NLP】通过罪犯在狱中表现的描述来预测罪犯可以被减刑的年份(DF原题)_刑期预测 nlp 算法

刑期预测 nlp 算法

题目背景

        数据整理自全国减刑、假释、暂予监外执行信息网(http://jxjs.court.gov.cn)公开的减刑判决文书(已对罪犯个人信息脱敏处理),均为真实案件减刑信息,数据集中包含罪犯个人信息、犯罪信息、在狱表现等字段。

datasets文件夹包含训练集和A测试集,文件均是以逗号分隔的csv格式,文件信息分别如下:

文件类别文件名文件内容
训练集train.csv字段{id, fact, label}
测试集A榜testA.csv字段{id, fact}
提交样例submission.csv字段{id, label}

 其中字段说明如下:

字段名类型取值范围字段解释
idstring-案例唯一id标识
factstring-案例描述(罪犯个人信息、犯罪经历、在狱表现等)
labelint{0, 1, …}准许减刑的时长,单位为月

 数据引用

链接:https://pan.baidu.com/s/1WWZK1hQ9fw5xng3QNhwQ0g?pwd=1111 
提取码:1111

数据内容

  1. import pandas as pd
  2. df = pd.read_csv("/content/drive/MyDrive/ds/train.csv",encoding="utf-8")
  3. facts = df['fact']
  4. labels = df['label']
  5. print(facts[0])
  6. print(labels [0])
  7. """ 犯人描述
  8. 罪犯吴智信,男...执行机关所提请减刑的建议,符合法律规定,本院根据该犯未履行原判财产刑的事实及其改造表现事实酌情予以减刑
  9. 12 可减刑年份
  10. """

解题思路

        利用 Tokenizer 建立词库,对每一个罪犯描述进行编码,之后用 pad_sequences 统一矩阵大小,用Sequential模型进行求解。

数据预处理

  1. import re
  2. new_facts = []
  3. for fact in facts:
  4. fact = re.sub(r"[,。、;‘’]"," ",fact)
  5. new_facts.append(fact)
  6. # 替换掉描述中的标点符号
  7. print(new_facts[0])
  8. """
  9. '罪犯陈中盛 男 1954年xx月xx日出生 汉族 湖南省永兴县人 文盲 现在河南省新郑监狱服刑 ... '
  10. """

词库构建

  1. from tensorflow.keras.preprocessing.text import Tokenizer
  2. # 词库模型构建
  3. model = Tokenizer()
  4. model.fit_on_texts(new_facts)
  5. word_index = model.word_index # 返回的是字典
  6. print(word_index)
  7. """
  8. {
  9. '确有悔改表现': 1,
  10. '本院认为': 2,
  11. '现已审理终结': 3,
  12. '经审理查明': 4,
  13. '男': 5,
  14. '汉族': 6,
  15. '文化': 7,
  16. '接受教育改造': 8,
  17. '报送本院审理': 9,
  18. '努力完成劳动任务': 10,
  19. '本院依法组成合议庭进行了审理': 11,
  20. '接受教育改造;积极参加思想': 12,
  21. '初中文化': 13,
  22. '职业技术教育;积极参加劳动': 14,
  23. '积极参加思想': 15,
  24. '判决发生法律效力后交付执行': 16,
  25. }
  26. """
  27. print(len(word_index)) # 479374

数据转换

  1. from sklearn.model_selection import train_test_split
  2. from tensorflow.keras.preprocessing.sequence import pad_sequences
  3. # 划分训练和测试集
  4. X_train,X_test,y_train,y_test = train_test_split(new_facts,labels)
  5. # 将每个描述转换成矩阵
  6. X_train_fit = model.texts_to_sequences(X_train)
  7. X_test_fit = model.texts_to_sequences(X_test)
  8. # 输出最大矩阵长度
  9. i = []
  10. for j in X_test_fit:
  11. i.append(len(j))
  12. print(max(i))
  13. # pad_sequences 填充 统一矩阵大小 padding="post" 表示在后方填充
  14. X_train_padd = pad_sequences(X_train_fit,maxlen=250,padding="post")
  15. X_test_padd = pad_sequences(X_test_fit,maxlen=250,padding="post")

模型构建与训练

  1. import tensorflow as tf
  2. from tensorflow.keras.layers import Dense,Embedding,GlobalAveragePooling1D,Dropout
  3. model1 = tf.keras.Sequential([
  4. Embedding(500000,64,input_length=250), # 嵌入层 (词库大小,嵌入向量的维度,输入大小)
  5. GlobalAveragePooling1D(), # 平均池化层 返回平均值
  6. Dense(32,activation="relu"),
  7. Dropout(0.2),
  8. Dense(1)
  9. ])
  10. model1.summary()
  11. model1.compile(optimizer="adam",loss="mse",metrics=['mean_absolute_error','accuracy'])
  12. history = model1.fit(X_train_padd , y_train, batch_size=512, epochs=20, validation_data=(X_test_padd,y_test),verbose=1)
  13. """
  14. Model: "sequential_2"
  15. _________________________________________________________________
  16. Layer (type) Output Shape Param #
  17. =================================================================
  18. embedding_3 (Embedding) (None, 250, 64) 32000000
  19. global_average_pooling1d_3 (None, 64) 0
  20. (GlobalAveragePooling1D)
  21. dense_4 (Dense) (None, 32) 2080
  22. dropout_2 (Dropout) (None, 32) 0
  23. dense_5 (Dense) (None, 1) 33
  24. =================================================================
  25. Total params: 32002113 (122.08 MB)
  26. Trainable params: 32002113 (122.08 MB)
  27. Non-trainable params: 0 (0.00 Byte)
  28. _________________________________________________________________
  29. """
  30. """
  31. ...
  32. Epoch 100/100
  33. 74/74 - 1s - loss: 1.3636 - mean_absolute_error: 0.7654 - accuracy: 0.0255 - val_loss: 8.7319 - val_mean_absolute_error: 2.1841 - val_accuracy: 0.0136 - 1s/epoch - 20ms/step
  34. """

缺陷与不足

        验证集的损失值太大,准确度太低,这也是我迷惑的点,可能数据处理时没有处理完全,也有可能是模型构建方式不全面,麻烦大佬可以在评论区指点下!!!

原竞赛网址 欢迎各位来学习和挑战

罪犯减刑时长预测 Competitions - DataFountainDataFountain(简称DF平台)是国内领先的数据科学竞赛创新平台之一,提供数据竞赛/AI算法大赛、数据集、项目实训、在线编程等服务。icon-default.png?t=N7T8https://www.datafountain.cn/competitions/611

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/752815
推荐阅读
相关标签
  

闽ICP备14008679号