Sunrise

`长路漫漫,唯剑作伴`


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Python DES3加解密

发表于 2022-12-05 | 分类于 python编程

python实现DES3加密

des加密,是一种对称加密算法,一种比较传统的加密方式;3DES(又称Triple DES),是进行了三重数据加密,即:每个数据块进行了三次DES加密算法,故比DES加密更为安全,更难破解。

DES加密的密钥长度为8,而DES3的密钥长度为24.

下面的代码实现是DES3,而DES加密只要把相关DES3的部分替换为DES即可,DES包的导入和方法调用与DES是一样,但是需要注意密钥长度。

与AES的加密实现方式基本相同,区别点在于:

  1. DES3需要把待加密文本补齐为8的倍数,AES需要把待加密文本补齐为16的倍数;
  2. DES3密钥长度为24,AES的密钥长度为32。
阅读全文 »

NER学习和实践阶段性总结

发表于 2022-11-26 | 分类于 自然语言处理

NER学习和实践阶段性总结

前面一段时间我针对NER进行了系统的学习,并借助UER-py对开庭公告进行了实体抽取,整个项目收获颇丰,前面本身已经对学习和实践过程进行了记录,具体细节参考前面的文章。

对NER技术不太了解的同学可以参考前面我翻译的一篇NER论文综述。

这篇文章主要内容包括:

  1. 针对网络模型以及其中涉及的技术点进行一定概述;
  2. 针对上篇NER综述进行一定的补充;
  3. 结合自己所擅长领域,思考后续可以借助NER来做的一些研究和实践。
阅读全文 »

一篇基于深度学习的命名实体识别技术的研究报告

发表于 2022-11-19 | 分类于 自然语言处理

一篇基于深度学习的命名实体识别技术的研究报告

本篇文章主要是自己刚接触NER领域时,研读这篇《 A Survey on Deep Learning for Named Entity Recognition 》NER综述论文时翻译的中文版,这篇综述时间是2020年,可能近两年的部分成果暂未包含,很多内容是通过百度翻译直接翻的,部分内容进行了一定的调整。有少部分内容省略了,具体可以参考原论文,所有涉及的文献引用也请参考原论文。

Abstract

命名实体识别(NER)是从属于预定义语义类型(如人、地点、组织等)的文本中识别固定指示符的任务;NER常作为问答系统、文本摘要和机器翻译等许多自然语言应用的基础;早期的NER系统通过消耗人力设计特定领域的特征和规则取得了巨大的成功,近年来,由连续实值向量表示和通过非线性处理的语义合成所支持的深度学习已被应用于NER系统,并产生了最先进的性能。在本文中,我们全面回顾了现有的面向NER的深度学习技术。 我们首先介绍现有的NER资源,包括已标记的NER语料库和现成的NER工具。然后,我们将NER现有的工作分为三类来进行系统的介绍:输入的分布式表示、上下文编码器和标记解码器。接下来,我们调研了在新的NER问题设置和应用上最具代表性的深度学习技术。最后,我们向读者介绍了NER系统面临的挑战和未来的研究方向。

阅读全文 »

使用UER进行开庭公告命名实体识别-续3

发表于 2022-11-05 | 分类于 自然语言处理

使用UER进行开庭公告命名实体识别-续3

模型训练和测试

未使用CRF层

将上次的问题全部解决之后,并且增加了一些特定法院名称和案由的训练数据,并且兼容了劳动仲裁开庭公告的抽取,模型的训练日志如下:

1
2
3
4
5
6
7
8
9
10
[2022-10-15 09:09:03,601 INFO] Epoch id: 5, Training steps: 1900, Avg loss: 0.000
[2022-10-15 09:09:25,614 INFO] Epoch id: 5, Training steps: 2000, Avg loss: 0.001
[2022-10-15 09:09:47,766 INFO] Epoch id: 5, Training steps: 2100, Avg loss: 0.000
[2022-10-15 09:10:09,830 INFO] Epoch id: 5, Training steps: 2200, Avg loss: 0.001
[2022-10-15 09:10:31,829 INFO] Epoch id: 5, Training steps: 2300, Avg loss: 0.001
[2022-10-15 09:10:53,881 INFO] Epoch id: 5, Training steps: 2400, Avg loss: 0.001
[2022-10-15 09:11:15,982 INFO] Epoch id: 5, Training steps: 2500, Avg loss: 0.001
[2022-10-15 09:11:38,139 INFO] Epoch id: 5, Training steps: 2600, Avg loss: 0.000
[2022-10-15 09:13:33,811 INFO] Report precision, recall, and f1:
[2022-10-15 09:13:33,812 INFO] 0.994, 0.994, 0.994

测试的结果如下:

1
2
3
4
5
6
correct/total: 2567/2600
accuracy: 0.9873076923076923
correct/total: 2570/2600
precision: 0.9884615384615385
correct/total: 2567/2600
precision: 0.9873076923076923

阅读全文 »

使用UER进行开庭公告命名实体识别-续2

发表于 2022-10-29 | 分类于 自然语言处理

使用UER进行开庭公告命名实体识别-续2

再接着上篇博客,本次依然采用自己生成训练数据的方式来训练,经过上一次的实验和优化,本次生成的训练数据标注错误的问题将会大大减少,因为很多实体是根据已有数据进行收集的,没有耗费大量的人力去逐条核验,难免会存在噪音,这一次修复了上篇中存在的各种噪音问题,并且还做了较多优化,具体效果如何,继续来看看吧。

优化方案

这一次在上一次的训练结果上做了以下优化点:

  1. 修复了目前见过的在数据集生成方面的噪音;
  2. 生成的数据种类大幅增加,增加了6种模板;
  3. 大幅度减少每种模板生成的数量,防止过拟合;
  4. 通过在生成的文本中增加一定的冗余数据,来让模型学会识别哪些信息并不是我们需要的实体;
  5. 生成了一定比例当事人之间没有任何分隔符号的数据,以此来进一步提升训练模型的抽取能力;
  6. 修复了一个“意料之外,又在情理之中”的问题,这个问题下面会说明;
  7. 修复了有空白字符开头的句子预测实体的位置索引不准确的问题。
阅读全文 »

使用UER进行开庭公告命名实体识别-续1

发表于 2022-10-20 | 分类于 自然语言处理

使用UER进行开庭公告命名实体识别-续1

接着上篇博客,这次我采用自己生成训练数据的方式来再次训练,自己生成的训练数据不会存在标注错误的问题,也可以尽可能的保证各种实体的类别尽可能的丰富。

生成训练数据

生成训练数据的程序是这里比较核心的模块,且考虑到公司的知识产权(因为是我在公司工作的时期开发的),就不做公开展示了。

不过这里可以大概的说下基本思想:
首先根据开庭公告非结构化文本的行文规律,总结出数十套模板,这里给出一套模板:

阅读全文 »

使用UER进行开庭公告命名实体识别

发表于 2022-10-13 | 分类于 自然语言处理

使用UER进行开庭公告命名实体识别

项目概述

上篇文章已经讲述了,如何使用UER进行NER任务微调训练,接下来咱就开始实战了,我这边要做的一个任务是司法文书的信息抽取,简单描述就是抽取出案号、案由、当事人、法院、法庭等信息,不过整体的任务还是比较复杂的,并且司法文书种类也比较多,有裁判文书这种长文本,也有开庭公告、法院公告这种短文本,我这边打算先从开庭公告的一些短文本作为切入点,先做一些尝试,看看效果。

我这边的一个实验计划暂定为:

  1. 先使用一定量的数据,直接进行NER微调训练,记录训练效果,如precision、recall和f1的值;
  2. 在语料集上先进行词向量微调(也就是bert finetune),并生成自己的词表;
  3. 基于步骤2得到的模型再次进行NER微调训练,对比与步骤1的评测值是否有提升;
  4. 如果方案可行,会再扩充数据集再次重复步骤2、3。
阅读全文 »

CLUE命名实体识别

发表于 2022-10-06 | 分类于 自然语言处理

使用GitHub项目:https://github.com/dbiir/UER-py

项目完整文档:https://github.com/dbiir/UER-py/wiki/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B

预训练模型仓库:https://github.com/dbiir/UER-py/wiki/%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B%E4%BB%93%E5%BA%93

上篇文章是使用huggingface transformer中预训练好的命名实体识别模型来进行实体抽取,但是在实际任务中,一般需要根据自己的数据集再进行微调,所以就继续研究如何进行微调,最终定位到UER-py这个工具包,所以这里先研究下这个工具怎么用。

阅读全文 »

Hyper Parameter Tuning

发表于 2022-09-24 | 分类于 自然语言处理

Hyper Parameter Tuning

Hand Tuning

Good Code Style

  • 将各个参数的设置部分集中在⼀起。 如果参数的设置分布在代码的各个地⽅, 那么修改的过程想必会⾮常痛苦。
  • 可以输出模型的损失函数值以及训练集和验证集上的准确率。
  • 可以考虑设计⼀个⼦程序,可以根据给定的参数, 启动训练并监控和周期性保存评估结果。 再由⼀个主程序,分配参数以及并⾏启动⼀系列⼦程序。

General to Specific

  • 建议先参考相关论⽂,以论⽂中给出的参数作为初始参数。 ⾄少论⽂中的参数,是个不差的结果。
  • 如果找不到参考,那么只能⾃⼰尝试了。 可以先从⽐较重要,对实验结果影响⽐较⼤的参数开始, 同时固定其他参数,得到⼀个差不多的结果以后,在这个结果的基础上,再调其他参数。 例如学习率⼀般就⽐正则值,dropout值重要的话,学习率设置的不合适, 不仅结果可能变差,模型甚⾄会⽆法收敛。
  • 如果实在找不到⼀组参数让模型收敛。那么就需要检查, 是不是其他地⽅出了问题,例如模型实现,数据等等。
阅读全文 »

Out of Vocabulary

发表于 2022-09-17 | 分类于 自然语言处理

Out of Vocabulary

我们在NLP任务中一般都会有一个词表,这个词表一般可以使用一些大牛论文中的词表或者一些大公司的词表,或者是从自己的数据集中提取的词。但是无论当后续的训练还是预测,总有可能会出现并不包含在词表中的词,这种情况叫做Out of Vocabulary。

那么当我们遇到OOV的问题时,有以下解决方式。

Ignore

直接忽略OOV的情形,也就是不做处理,效果肯定不好。

UNK

这种方式就是把所有超出词表的词,转换为统一的\<unk>标识,对于性能的提升有限,特别是当超出词表的词是比较重要的词时。

阅读全文 »
1234…12
chenxi

chenxi

116 日志
11 分类
213 标签
Links
  • Docle
  • Swift
© 2025 chenxi
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4