1. 引言
据不完全统计,全国每天发布的公共资源及政府采购交易信息超过十五万条,信息类型多样、数据格式不一、数据结构复杂。如何有效处理海量交易信息,挖掘出潜在的数据价值,是衡量诸多招投标领域大数据应用产品竞争力的关键。中文分词是中文信息处理领域中最为关键的课题,最大熵、条件随机场等模型被用来解决序列标注任务,由于传统机器学习方法一般采用特征工程的方式,依赖专家经验,成本较高,借助于神经网络模型可以自动隐式提取特征 [1],将字向量作为输入,用一个简单的神经网络模型替代了最大熵模型,长短期记忆神经网络(Long Short-Term Memory Neural Networks, LSTM)来对句子进行建模,捕捉字与字之间的长距离依赖关系,将基于转移的思想应用于分词任务并使用大量的外部训练语料进行预训练,利用外部知识提高了分词效果 [2]。理想的技术产品架构,底层是自然语言处理平台,中间一层是文本挖掘平台,最上面一层是企业智能信息处理平台,为企业提供各种智能化信息处理解决方案。其中,数据清洗技术及分词技术的应用,对于非结构化信息的识别及提取,从而实现信息的字段化、结构化、价值化尤为重要。
2. 交易数据清洗
交易数据采集完成后,对不同渠道获取的数据需要进行解析,然后对不准确、不完整、不合理、格式、字符等不规范交易数据进行过滤清洗,利用数理统计、数据挖掘和预定义清理规则等有关技术将交易“脏数据”处理掉,从数据源中检测并消除错误、不一致、不完整和重复等数据,为满足要求提供高质量的数据,清洗过的数据才能符合识别及提取需求,因此在对数据进行识别及结构化前,做好相关的数据清洗工作意义重大。
2.1. 交易数据分析
交易数据分析是交易数据清洗的前提和基础,通过人工检测或者计算机分析程序的方式对原始数据源的数据进行检测分析,从而得出原始数据源中存在的数据质量问题。交易数据的主要问题有数据重复问题(一条标讯多个来源、平台重复发布)、时间失效数据问题(发布过期数据)、测试数据问题(平台测试数据)、异常格式数据问题(pdf、附件、图片等)、无价值或低价值数据问题(类型不匹配,内容不符合)。
2.2. 定义数据清洗的策略和规则
根据分析的数据源数量和数据源中“脏”数据的程度,定义数据清理策略和规则,并选择适当的数据清理算法。如表1所示,对于不同类型问题数据,需要根据交易信息的特点及业务策略制定不同的清理规则。
交易实体识别:对不同数据来源中同一对象实体进行识别;
交易数据真值发现:在混有数据质量错误的冲突数据中找到属性的真实值;
交易数据不一致检测与修复:实际数据集合中通常包含了某些违反最初定义的完整性约束的数据,造成集合内或者不同数据集合间的不一致情况,本系统可利用完整性约束对数据中不一致情况进行检测和修复清洗;
交易缺失值填充:对数据集合中存在的数据缺失问题进行有效的填充修复。

Table 1. Cleaning strategies for different problem data
表1. 不同问题数据的清洗策略
交易数据清洗结果可视化:数据质量检测和清洗的结果以图、表形式展示给用户,让用户对交易数据集合的质量评估情况有直观的认识。
2.3. 搜寻并确定错误实例
手动检测数据集中的属性错误需要大量的时间、精力和物质资源,而且过程本身容易出错,因此需要使用有效的方法来自动检测数据集中属性错误。主要的检测方法是基于事务统计的方法、事务聚类方法和事务关联规则方法 [3]。当存在多个交易数据记录源时,需要进行相关性验证。如果在数据分析过程中发现数据冲突,应调整或删除相关数据,以通过数据分析和检测使数据一致。
2.4. 纠正发现的错误
根据不同的“脏”数据存在形式的不同,执行相应的数据清洗和转换步骤解决原始数据源中存在的质量问题。需要注意的是,对原始数据源进行数据清洗时,应该将原始数据源进行备份,以防需要撤销清洗操作。
2.5. 干净数据回流
在交易数据被清理后,干净的交易数据取代了原始数据源中的“脏”数据,这可以提高信息系统的数据质量,避免未来数据提取后的重复清理。
3. 分词技术及应用
从语义相似性的角度来看,自然语言处理可以在对话或问答领域取得更好的结果。它可以迁移到事务信息的业务字段中的数据集。由于该领域本身的知识和特点,如何选择成熟的分词技术来获得高效的带注释数据集模型,并为事务领域的机器学习奠定基础是一个迫切的问题。此外,当用户搜索交易信息时,他们需要有效的中文分词技术来提高所需数据信息的准确性和全面性。
3.1. LTP分词
哈工大的语言技术平台提供了中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、高效、精准的自然语言处理技术。
3.1.1. 基本原理
LTP是基于结构化感知器 [4] (Structured Perceptron, SP),以最大熵准则建模标注序列YY在输入序列XX的情况下的score函数:
其中,
为本地特征函数。中文分词问题等价于给定XX序列,求解score函数最大值对应的YY序列:
argmaxYS(Y, X)
在LTP中,将分词任务建模为基于字的序列标注问题。对于输入句子的字序列,模型给句子中的每个字标注一个标识词边界的标记。
3.1.2. 应用及结果
使用代码:
分词结果:
3.2. Jieba分词
3.2.1. 基本原理
实现原理是隐马尔可夫模型(HMM) [5],它结合了基于字符串匹配的算法和基于统计的算法。采用最大概率路径动态规划算法进行字符串匹配,在保持快速分割的同时保持较高的分割精度。采用HMM隐马尔可夫模型对新词进行分割,可以有效解决字符串匹配无法识别新词的困难。Jieba分词依赖于汉语词库:1) 使用汉语词库来确定汉字之间的关联概率;2) 汉字之间的高概率词形成分词结果;3) 除了分词,用户还可以添加自定义字典。
Jieba分词的三种模式:精确模式、全模式、搜索引擎模式
精确模式:把文本精确的切分开,不存在冗余单词。
全模式:把文本中所有可能的词语都扫描出来,有冗余。
搜索引擎模式:在精确模式基础上,对长词再次切分。
3.2.2. 应用及结果
分别采用三种不同模式处理部分交易信息标题,得到结果如下:
1) 精确模式:
import jieba
sentence = '沙井街道医用外科口罩采购招标项目的潜在投标人应在深圳高星项目管理有限公司获取招标文件'
messages = jieba.cut(sentence, cut_all = False)
print('分词结果:' + / .join(messages))
分词结果:沙井/ 街道/ 医用/ 外科/口罩/ 采购/ 招标/ 项目/ 的/ 潜在/ 投标人/ 应/ 在/ 深圳/ 高星/ 项目管理/ 有限公司/ 获取/ 招标/文件
2) 全模式:
import jieba
sentence = '沙井街道医用外科口罩采购招标项目的潜在投标人应在深圳高星项目管理有限公司获取招标文件'
messages = jieba.cut(sentence, cut_all = False)
print('分词结果:' + / .join(messages))
分词结果:沙井/ 街道/ 医用/ 外科/ 口罩/ 采购/ 招标/ 项目/ 目的/ 潜在/ 投标/ 投标人/ 应/ 在/ 深圳/ 高/ 星/ 项目/ 项目管理/ 管理/ 有限/ 有限公司/ 公司/ 获取/ 招标/ 文件
3) 搜索引擎模式:
import jieba
sentence = '沙井街道医用外科口罩采购招标项目的潜在投标人应在深圳高星项目管理有限公司获取招标文件'
messages = jieba.cut_for_search(sentence)
print('分词结果:' + / .join(messages))
分词结果:沙井/ 街道/ 医用/ 外科/ 口罩/ 采购/ 招标/ 项目/ 的/ 潜在/ 投标/ 投标人/ 应/ 在/ 深圳/ 高星/ 项目/ 管理/ 项目管理/ 有限/ 公司/ 有限公司/ 获取/ 招标/ 文件
4) 调整词频
有的时候,如果按照jieba正常分词,会把我们不希望分开的词语给分开,这个时候就会改变句子的意思。就如以下例子,我们希望“招标文件”是一个词,不被分开:
import jieba
sentence = '在深圳高星项目管理有限公司获取招标文件'
messages = jieba.cut(sentence)
print('分词结果:' + / .join(messages))
分词结果:在/ 深圳/ 高星/ 项目管理/ 有限公司/ 获取/ 招标/ 文件
5) 分词后词性标注
import jieba.posseg as contents
messages = contents.cut('沙井街道医用外科口罩采购招标项目的潜在投标人应在深圳高星项目管理有限公司获取招标文件')
for message in messages:
print(message.word, message.flag)
沙井 n/街道 n/医用 n/外科 n/口罩 n/采购 v
招标 n/项目 n/的 uj/潜在 t/投标人 n/应 v
在 p/深圳 ns/高星 n/项目管理 n/有限公司 n
获取 v/招标 n/文件 n/
标签和含义对照如图1所示:

Figure 1. Comparison of part of speech meanings of labels
图1. 标签词性含义对照
6) 添加自定义词典
import jieba
sentence = '沙井街道医用外科口罩采购招标项目的潜在投标人应在深圳高星项目管理有限公司获取招标文件'
jieba.load_userdict(rC:\Users\Administrator\Desktop\user_dict.txt)
messages = jieba.cut(sentence)
print('分词结果:' + / .join(messages))
分词结果:沙井/ 街道/ 医用/ 外科口罩/ 采购/ 招标/ 项目/ 的/ 潜在/ 投标人/ 应/ 在/ 深圳/ 高星/ 项目管理/ 有限公司/ 获取/ 招标文件
此外,Jieba还可以方便地实现取消新词、查看文本内词语的开始和结束位置、修改字典路径等 [6]。
在交易信息结构数据处理中,某些文字组合表示特定的含义,在应用中可以加入自定义词典,部分自定义交易词组如表2所示。

Table 2. Bids data user-defined word set (partial)
表2. 交易数据自定义词集(部分)
4. 应用成果分析
如表3所示,通过制定并不断优化数据清洗策略,平台类不同类型数据的重复率及查漏率指标均得到了有效提升,另外通过两种分词工具的应用,对不同类型数据的抽取准确率得到了不同提高。可以看出,对于不同的文本格式,两种分词工具各有优势。不断尝试且优化分词方法及完善自定义词库,是提升交易数据效益的有效方式。

Table 3. Comparison of different types of bids data indicators
表3. 不同类型交易数据指标对比
5. 结束语
对于绝大部分交易信息都是各种格式的复杂非结构化信息而言,对于数据的预处理及清洗是实现营销决策、数据统计及分析等各类大数据应用的前提,另外,由于汉语语言知识的笼统性、复杂性,很难将各种语言信息组织成机器可以直接阅读的形式。因此,现有的分词技术被用来使计算机模拟人们对句子的理解,以达到单词识别的效果。在分词的同时,进行句法和语义分析,并使用句法和语义信息来处理歧义。这种分词方法需要大量的语言知识和信息。除了本文中提到的LTP和JIEBA,HanLP也是一种有效的分词工具。多种分词技术的综合应用有助于对投标领域的数据进行深度挖掘和识别,构建多种应用场景,满足各类用户的数据和应用需求。
基金项目
贵州省科技计划项目(课题)黔科中引地[2021]4016;基于BOES开放引擎的数据分析关键技术在招投标领域的创新应用。