网站首页 > 技术文章 正文
一.使用场景
为了体现招投标交易过程中公平,公正,公开的原则,需要针对投标文件环节,对各家单位制作的投标文件进行重复度的判断。以防止单位之间进行不正当的投标行为。
对投标标书查重或相似度对比检查,是非常重要的工作,如果两份标书存在较多内容相似,基本会被废标,所以需引起重视,需认真查看。除了依靠人工查询外,也可以通过标事通标书检查服务进行快速检查。 标书检查服务可以检查包括: 错漏项检查、算术性错误检查、不平衡报价检查、商务标模拟得分、招标控制价检查、雷同性检查;资质检查、业绩检查、相似度检查、人员检查等数十项易废标点,还将有问题部分提取标注出来,并进行可视化对比,可以大大提高工作效率。
二.技术方案
2.1规范标书格式
尽可能规范标书格式,严格按照既定格式构建标书结构,所有标书文件均需提供对应电子版,减少扫描版识别异常等带来的影响,减少标书结构化时人工干预,提高标书审计准确度。
提供对应的标书模板,标书文件需严格、清晰的包含目录、方案、主体、资质、案例、商务条款、报价等章节。
2.2标书文件数据结构化
文件结构化需区分电子原始文件及扫描文件,原始电子文件采用流式数据处理法结构化文档,如基于xreader版式数据的Retype流式数据以及基于ooxml的BDJson流式数据。而扫描文件等非原始电子文档因无法使用常规的文件标准进行解析,故扫描文件的结构化将基于BERT等模型来实现。
实现过程中,将所有文件预处理为统一格式,如PDF或者Word进行后续处理,便于整个系统功能的模块化以及文件处理的标准化,如PDF的xreader版式数据,版式数据指的是每个元素(文字、图片)都有一个坐标信息和元素的宽高信息,以及其他的描述信息。Word也有完成的数据结构可以遵循,
文档内容“版式转流式”的方案,遍历xreader版式数据中的每个元素,提取坐标信息x,y和元素的宽高w,h信息。比较接近的y认为是同一行数据,y接近的情况下,根据x和w拼接相邻的文本元素、连接相邻的文本和图片。
OOXML基于zip+xml的格式,普通文本及其字符属性、段落属性的读取和解析较为方便,其自带章节、段落和表格等结构化信息,便于流式排版。基于本次排版需求,以及考虑到将来有word在线编辑的场景,方案设计为语义级别的精确解析文档,抽取内容和属性,组建office数据结构,章节、段落等数据结等均遵循ooxml标准,word中支持的多套公式数据“域公式、mathtype公式,omath公式”统一转码成LaTex数据格式,不仅便于后续编辑,而且可以适配正文的字体和大小,整体排版效果更统一。
利用BERT模型实现抽取文档信息抽取及文档结构化,模型可以分为两个部分:实体抽取模块和关系分类模块。
1、实体抽取模块主要涉及一下五个步骤:
(1)processors初始化
(2)estimator配置
(3)加载训练数据
(4)利用model_fn_builder构造模型,加载模型参数等。利用Tensorflow中新的架构方法,通过定义model_fn函数,定义模型。然后用Estimator API进行模型的训练,预测,评估等。
(5)调用Estimator进行训练过程的控制及正式开始训练等。
2、文档结构化数据的提取与分类的主要难点在于,其不仅仅依赖于两个目标实体的信息,还依赖于句子本身的语义及语法信息,利用BERT强大的编码能力,预期能够同时抽取到文本中的两种特征,因此为了使BERT模型能够定位两个实体的位置,我们将在每个句子的开头添加特殊标志,如 "[CLS]" ,在第一个实体前后添加特殊字符 "#34; ,在第二个实体前后添加特殊字符"#";
3、使用BERT三部分特征进行最后的关系分类:
(1)[CLS]最终隐含状态向量,这部分提取了句子的语义特征
(2)两个实体的隐含状态向量,这部分提取了实体特征
4、利用拼接三个特征进行关系分类,接一个softmax进行分类基于BERT模型实现对文档进行目录提取、段落提取、图片提取、签名提取、印章提取、报价提取、法人信息提取、资质提取。
2.3、文字比对
1、首先从数据库中导出提取出来的原始核心字段数据,例如subject代表标题名称,summary代表项目简介等等;
2、通过算法完成语料标记工作;
3、对数据进行预处理,其中包括正则匹配、文本分词、停用词处理、字符串操作、规约化数据等;
4、采用余弦相似度进行相似算法处理,以测试数据和训练的每条数据的词项构建文本向量,通过文本向量的夹角即判断文本相似度,并反馈出结果;
5、对查重后的结果进行处理,可以保存到本地,也可以直接输出,由于本项目主要提供接口调用,调用执行py文件之后,对输出结果不能换行处理,所以本项目添加一些html标签和css样式。
2.4、文本相似度计算
相似度计算涉及分词、去停用词、TF-IDF模型向量化文本、计算相似度
1、分词
一个词的权重由TF * IDF 表示,其中TF表示词频,即一个词在这篇文本中出现的频率;IDF表示逆文档频率,即一个词在所有文本中出现的频率倒数。因此,一个词在某文本中出现的越多,在其他文本中出现的越少,则这个词能很好地反映这篇文本的内容,权重就越大。
2、系统实现:
(1)分词上使用结巴分词,词袋模型、TF-IDF模型、LSI模型的实现均使用了gensim库,需要引入对应库;
(2)构建停用词表;
(3)结巴分词后的停用词性 [标点符号、连词、助词、副词、介词、时语素、‘的’、数词、方位词、代词];
(4)对一篇文章分词、去停用词;
(5)选取三篇文章,前两篇有一定相似度,第三篇是相似度低的;
(6)建立TF-IDF模型;
(7)构建一个query文本,是高血压主题的,利用词袋模型的字典将其映射到向量空间;
(8)用TF-IDF模型计算相似度,相对于前两篇相似度较高的文本,第三篇文本与query的相似度很低。可见TF-IDF模型是有效的,然而在语料较少的情况下,与前两篇文本相似度也不高。
2.5图片相似度计算
实现方式为通过感知哈希算法 获得图像的图像指纹,然后比较两个哈希值之间的汉明距离来获得图片的相似度。
主要步骤如下:
1、缩小尺寸。将图片缩小到 8x8 的尺寸,总共 64 个像素,是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异;
2、简化色彩。将缩小后的图片,转为 64 级灰度,所有像素点总共只有 64 种颜色;
3、计算平均值。计算所有 64 个像素的灰度平均值。比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为 1 ;小于平均值,记为 0。
4、计算哈希值。将上一步的比较结果,组合在一起,就构成了一个 64 位的整数,这就是这张图片的指纹。注意保证所有图片都采用同样次序。
2.6 印章识别及相似度计算
采用OCR技术识别标书中的印章,并将印章进行归类,在识别过程中,设计多种形态的印章,如:
1、圆形(企业章、公章)
2、椭圆形(财务章、合同专用章等)
3、正方形(法人章)
4、长方形(专用章等)
通过识别出的OCR参数还原出电子印章及展示OCR识别数据,印章坐标位置及如下印章内容要素,如:
印章图片获取并保存后,使用SIFT算法和文字相似度检测算法,使用已有的图片相似度检测组件进行印章相似度检测,其主要步骤如下:
(1)图像预处理,主要是印章图片区域提取、常规灰度二值、对于形态不好的图片进行腐蚀;
(2)构建一个霍夫圆打开,以便进行后续的文字识别;
(3)构建图像标准名称库;
(4)识别文字,识别文字部分使用的已有的组件化的OCR工具组件进行文字识别;
(5)计算文字的相似度,同样基于已有的文字相似度组件进行文字相似度计算;
(6)图片相似度计算,同样使用已有的图片相似度计算组件进行印章相似度计算。
三、系统介绍
将标书的主要内容分为三大部分:程序条款、技术条款、商务条款。其中主要包含下列九项内容:招标邀请函;投标人须知;招标项目的技术要求及附件;投标书格式;投标保证文件;合同条件(合同有一般条款及特殊条款);技术标准、规范;投标企业资格文件;合同格式等等内容。
标书查重原理是上传多份投标书进行篇篇对比,找出相似内容,发现和规避风险。公司内部人员可以无障碍通过系统进行标书互检。
系统所涉及内容为:
1、核心服务:相似度检测,标段报告生成、对比报告生成,文档内容提取;
2、用户功能:提交标书查重、查看标段报告、查看对比报告;
3、系统为B/S架构,并适配主流浏览器。
3.1系统功能:
1、系统可识别并支持PDF、WORD等格式的文件批量上传。
2、查重结果所包含内容应参照目前主流查重报告内容,包括总相似比等结果,同时附上每一结果计算说明,并列举出相似片段详情,即检测文档片段与相似内容来源的对比,查重结果可支持批量导出。
针对红色或者橙色的句子,点击能够详细的看到具体重复的细节,和另外一份文档中的哪个句子相似了,并且显示相似度是多少。
3、白名单过滤功能,过滤掉部分商务条款等,通过设置或者上传白名单文档,检测的时候文档中和白名单相同的内容将被过滤掉,不参与检测。
4、阀值设置,用于判断内容、图片等对比预警阀值;
5、关键词设置:地名、供应商、关联公司等,很容易在复制时被遗漏,通过将这类关键词添加至重点关注列表;
6、标书库,记录历史标书,丰富后续查重样本
3.2 文档检测:
1、文本检测,包含:完全相同的句子,近似的句子(修改了几个字,或者前后顺序颠倒,但是意思是一致的),如下图所示为相似的句子。
2、标题目录摘要
3、签名及印章图片
4、报价波动,报价清单价异常,报价清单中,报价项呈规律性递减或递增。
5、图片相似度,提取文件中图片,设置图片分类,对同类图片进行相似度对比,并显示对比重复率。
猜你喜欢
- 2024-09-18 python程序设计基础(三)(python程序设计基础教程)
- 2024-09-18 ChuanhuChatGPT:LLM提供了一个轻快好用的Web图形界面
- 2024-09-18 八悦文摘(五)—MathType内容初识(mathtype48)
- 2024-09-18 Markdown 教程(Markdown教程)
- 2024-09-18 如何在微信公众号中编辑出漂亮的数学公式?
- 2024-09-18 通过geogebra实现LATEX数学公式编辑,数学电子版笔记的好帮手!
- 2024-09-18 【干货】LaTeX超详细使用指南!附安装包
- 2024-09-18 MathType公式转换LaTeX代码(mathtype转换为latex)
- 2024-09-18 一道改编自课本的压轴题,一题多解,一题多变,初三系列153
- 2024-09-18 新手学Latex(小学)-04(换行)(latex学起来快吗)
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 481℃启用MySQL查询缓存(mysql8.0查询缓存)
- 461℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 441℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)