使用 DB2 Warehouse V9.5 实现文本分析
2008-12-12 16:35:28 来源:WEB开发网DB2W-UA 概述
IBM DB2 Warehouse(原 Data Warehouse Edition)集成了商业智能所需的各种工具:数据转换工具 SQW (SQL Warehousing)、数据挖掘工具 Intelligent Miner、联机分析工具 Cubing Services、前端分析工具 Alphablox 等。
新一版的 DB2 Warehouse 9.5(以下简称 DB2W 9.5)中,在改进原有的数据挖掘工具的同时,引入了功能强大的非结构化数据分析工具 Unstructured Analysis(以下简称 DB2W-UA)。这一分析工具主要针对存储在数据库中的文本字段,目标是将非结构信息转化为结构化信息,并结合其他结构化数据使用商业智能工具进行进一步的分析。DB2W-UA 能处理存储在 CHAR、VARCHAR、CLOB 等数据类型中的文本信息。
文本分析简介
目前,企业和政府机构中存在着大量的非结构化信息,例如呼叫中心的记录、问卷调查的结果、问题报告、维修报告、保险索赔记录、病历、客户的邮箱地址、产品反馈等。这些信息存储在文本、音频、视频等不同的介质中。随着非结构化信息的快速增长,如何分析这些信息源并将结果提供给决策者以支持决策成为一个重要的话题。
文本分析的定义
数据库中的文本数据含有很多有价值的信息。然而,文本所代表的信息却是复杂的、晦涩的。如果人工对这些数据进行分析,那将会是一个非常耗时和繁重的工作,或者是只能对一小部分的数据进行分析。
为了减少对文本数据的手工操作,多种文本处理技术逐渐发展起来。总的来说,对文本的处理有 3 种情况:文本检索,文本分类和信息提取。
文本检索是从一大堆的文本当中发现并抽出我们感兴趣的、与某个主题相关想要的信息。但是,为了采用这种技术,我们不得不以某种形式指定我们想要的信息。因此,如何没有一个清晰的目标知道要搜索什么和可以从数据库中搜索到什么,那么这种方式就对我们没有什么帮助。即使我们有了特定的搜索主题并且成功建立了查询,但得到的结果是个文本列表,我们依然需要去阅读并寻找信息。
文本分类技术可以让我们了解文件的归档状况,或者通过将文档分类到预定义的类别中,或者是根据系统定义的相似性将具有相似内容的文档自动分组到一个类中。通过这种技术,我们可以找出文档中包含哪些主题,以及每个主题的大小。然而,为了详细分析,我们依然需要阅读主题或类中的每一个文档。
信息提取的任务是从非结构化数据中提取出结构化信息,其目标是从特定范围的文本中获得分类的、上下文相关的、语义明确的数据。信息提取的一个典型例子是扫描一套由自然语言编写的文档,提取出结构化信息并加载到数据库中。
DB2W 9.5 中的文本分析组件主要是指信息提取。
文本分析的商业价值
文本信息在各个领域中有着广泛的应用。
客户满意度调查。企业在进行客户满意度调查时,通常要求客户填写反馈意见,这些反馈对于企业调整产品和服务质量等是非常有价值的。然而,手工识别和分类这些信息将是个乏味的、耗时的、昂贵的工作,通过文本分析可以简化这个过程。
增强客户保持力。获取 / 赢得一个新的客户的代价是很高的,因此,客户不能被竞争对手吸引而离开。通过文本分析,我们可以抽取呼叫中心记录中提到的最重要的问题,并结合结构化数据,通过预测技术预测客户中止合同的倾向并实行相应措施。
故障原因分析。制造商可能想从维修中心的维修报告中了解引起经常返修的主要原因或者维修的顺序,目的在于提高失效部件的质量以及尽早得到警告信息以避免产品回收造成的损失。
在生物医学上的应用。我们可以从病人的历史病历中分析生活方式及病症可能引发的重大疾病,并进行风险评估。
文本分析与数据挖掘
文本挖掘是一个从非结构化文本信息中获得用户感兴趣或者有用的模式的过程,其主要用途在于从文本中提取未知的知识。文本挖掘是一个多学科混杂的领域,它涵盖了多种技术:信息抽取,信息检索,自然语言处理以及数据挖掘技术等。由于必须处理那些本来就模糊而且非结构化的文本数据,文本挖掘是一项非常困难的工作。
文本挖掘的过程大致分为 3 个阶段:机器学习、自然语言处理;文本信息抽取、文本数据处理;信息访问和知识发现,包括信息过滤检索,数据分析、预测等。
图 1. 文本挖掘过程
文本分析与 OLAP
我们可以将文本分析的结果结合结构化数据建立报表以及 OLAP(online analytical processing) 多维立方体。
例如,在呼叫中心的问题报告中,通过文本分析技术,我们可以获得排前 10 位的客户问题。我们可以将这些问题列为常见问题,并将相关解决办法记录在用户手册中。同时,我们可以通过文本分析,从问题报告中提取用户遇到的问题并作为 OLAP 多维立方体的一个维度,结合结构化数据进行分析。
案例简介
在接下来的章节中,我们将通过一个虚拟的电信公司的例子介绍如何使用 DB2W 9.5 提供的文本分析工具实现文本分析。
某电信公司提供移动电话业务,用户在使用移动电话业务前需要到电信公司办理开户手续。此电信公司希望了解用户的个人兴趣爱好对于离网倾向的影响,以及各类用户的特征。因此,开户时,在记录新用户的个人信息以及将使用的各种业务的同时,电信公司会对新用户进行问卷调查,以了解新用户的兴趣爱好。
用户开通移动电话业务后,电信公司会记录用户的每次通话信息,包括通话类型、通话时长等信息。这些信息将在多维分析中使用。
文本分析与挖掘及 OLAP 应用的结构
在 DB2W 中,文本分析与数据挖掘及 OLAP 分析的关系如下图 2 所示。
图 2. 文本分析与数据挖掘和 OLAP 应用
如何使用 DB2W 构建文本挖掘应用以及结合文本分析构建 OLAP 应用将在本系列文章的第二篇和第三篇中分别介绍。
使用 DB2W 的非结构化分析工具实现文本分析
文本分析理论
信息提取是信息获取的类型之一,其目标是自动提取结构化信息。信息提取的典型任务包括:
命名实体识别,识别实体的名字,如组织、产品名称、地名等;
识别针对同一对象的一连串名字短语;
术语抽取,寻找与某一主题相关的术语;
从文本中找出对一个人、产品或服务的正面或负面的描述。
对于上述的信息提取任务,有多种算法可以实现,每一种算法都适用于不同的商业问题。
基于规则:通过制定模式提取概念,如电话号码、邮件地址等;
基于列表:通过枚举与提取对象相关的词提取概念,如人名、产品名称、地名等;
其他算法:使用自然语言处理,机器学习,统计方式,或者是上述方法的综合提取概念。
DB2W-UA 提供了基于规则和基于列表的信息提取方式。在 DB2W 中,基于规则的信息提取是通过规则文件实现的,我们要在规则文件中为希望从文本中提取的一个或多个概念类型定义查找模式;基于列表的信息提取由字典实现,我们可以在字典中列出与分析主体相关的所有可能情况。
使用 DB2W-UA 实现文本分析
本文采用的数据是基于已装载到数据仓库中的数据。这些数据是通过 ETL 过程每天从操作型环境中加载到数据仓库中的用户信息和通话详单。
为了使用文本分析工具,在安装 DB2W 时,选择非结构化分析组件 (Unstructured TextAnalysis plug-ins 和 Unstructured Analysis Runtime)。请参照
http://www.ibm.com/software/data/db2/dwe/features.html 安装 DB2W 全套产品。
打开运行窗口 (Start -> Run),键入 db2cmd 调用 DB2 命令窗口,切换到附件的保存目录,执行批处理文件 instDB.bat 并指定要生成的数据库名字及存储该数据库的地方,生成本文中所使用的数据库表及数据,如图 3 所示。
图 3. 命令窗口
打开 Design Studio (Start -> All Programs -> IBM DB2 Data Warehouse Edition V9.5 -> DB2COPY1 -> Design Studio),指定一个工作空间,如:C:workspace。Design Studio 打开后,关闭欢迎界面。新建一个数据仓库项目 (File -> New -> Other…-> Data Warehouse Project),输入项目名,如 TELE_DEMO。
数据探查
在进行文本分析前,我们必须对所要分析的文本字段的内容、相关数据分布以及值缺失状况等有所了解,这样将有助于我们选择有效数据作进一步的分析。
在 Design Studio 中,我们可以通过数据探查 (Data Exploration) 获得上述信息。从数据库资源管理器中调用数据探查工具,如图 4。
图 4. 数据探查
数据探查的结果显示了文本字段所在数据库表的样本数据 (Sample Content),文本统计信息 (Text Statistics),以及数据库表中结构化数据的多变量分布状况 (Multivariate Distribution)。
图 5. 样本数据
图 6. 文本统计
通过数据探查,我们对需要分析的文本内容有了表面的感性认识。但是,我们不清楚文本中有哪些信息类型以及术语的出现频率。为了对文本信息有更为深入的了解,DB2W 提供了术语抽取功能(Frequent Term Extraction)。
在样本内容页中,点击按钮 < 抽取常用术语 >(Frequent Term Extraction)。在新建常用术语抽取向导中输入文件的名字(如 HOBBY_FRE_TERM)。为了抽取常用术语,我们需要指定下列内容:
包含要分析文本的表所在的数据库连接;
选择包含要分析的文本的表及包含要分析的文本列;
指定输入文本的语言及采样率;
创建或选择术语必须匹配的词性模式。
从数据探查中我们发现用户在填写兴趣爱好时大多使用名词和动词,有些是由多个词性组成的词组。常用术语抽取向导中已默认提供名词(Noun)和动词(Verb)两种模式,为了提取由多个词性组成的词组,我们需要创建模式“任意 - 名词”(Arbitrary-Noun)。在选择抽取模式一页中,点击 < 新建 >(New),在弹出的新建词性模式对话框中,点击按钮 <Arbitrary> -> <Noun>。如图 7 所示。
图 7. 新建词性模式
新建的模式会列在词性模式列表中,而且默认选中。点击 < 完成 > 后,常用术语抽取器就会根据选择的词性分析指定文本列中的所有信息。所需要的分析时间由文本的数量及大小决定。分析结果将会按照术语在文本中出现的绝对频率排列。选中某一术语,与这一术语相关的变量就会显示。
图 8. 常用术语分析结果
文本分析准备——分析文件的创建
了解需要分析的文本后,下一步就是要定义记录了兴趣爱好关键字字典 (Dictionary)。我们可以从常用术语抽取结果选择用于感兴趣的术语生成字典文件,也可以手工建立字典。我们还可以导入第三方提供的字典或其他工程中的字典,也可以从数据库表或文件中导入。
在常用术语抽取结果中,取消选中那些与期望分析无关的词,如 lot, favorite, listen 等。点击 < 创建字典 >(Create Dictionary)。在创建字典向导中输入字典的名字,如 HOBBY_DIC。在数据项目资源管理器中,展开工程 TELE_DEMO,双击在字典文件夹下的字典文件 HOBBY_DIC 打开字典编辑器。
图 9. 生成字典
由于生成的字典不能自动匹配意义相近的词,或者缺少了我们感兴趣的关键字,我们需要对生成的字典做一些手工的修改。例如,jogging 和 running 都是指跑步,可以归为一类;各种球类运动也可以归为一类。修改后的 HOBBY_DIC 如图 10。
图 10. 修改后的字典
除了字典外,DB2W 提供了通过规则对分析文本的方法,以及支持使用第三方提供的符合 UIMA(Unstructured Analysis Management Architecture)规范的分析引擎。规则的建立主要基于正则表达式(Regular Expression)。规则编辑器中提供了正则表达式构建器帮助大家构建正则表达式以及验证表达式的正确性。规则文件的建立方法将在后续的文章中介绍。
创建挖掘流
现在,我们可以利用新建的字典从文本中搜索关键字并将非结构化信息转换为结构化的数据。
新建挖掘流,从 Design Studio 主菜单中选择 File -> New -> Mining Flow。在新建文件向导中输入挖掘流的名字,选择 Work against database(Online) 选项,并在下一步中指定要连接的数据库连接 (TELE)。分别建立挖掘流 MF_HobbyDimension 和 MF_HobbyFact。
挖掘流 MF_HobbyDimension 的目标是通过文本分析,将文本字段中的用户兴趣爱好抽取出来生成维表,以用于 OLAP 分析模型的创建。完成后的 MF_HobbyDimension 如图 11。
图 11. 挖掘流 MF_HobbyDimension
具体步骤为:
从操作符面板上拖拽 Table Source 到挖掘流画板上。在打开的 Select Database Table 窗口中选择数据库表 TELE.DW_USER_COLLECT
从操作符面板上拖拽 Dictionary Lookup 到挖掘流画板上,连接 Table Source 和 Dictionary Lookup。在 Properties 视图中设置 Dictionary Lookup 的属性。
在 Dictionary Settings 页中选择要分析的文本列 HOBBY,选择文本所对应的语言 English(United States);
在 Analysis Results 页中,选择字典 HOBBY_DIC 及注释类型 HOBBY_DIC;删除结果列表中除 BASEFORM 的所有行,将列名改为 HOBBY。如图 12。
图 12. 分析结果属性设置
结果列表中 BASEFORM 对应了字典中定义的基本格式 (Base Form),在文本中查找到的与字典中定义的变体将以其对应的基本格式作为结果;ID 是指对应基本格式的编号;BEGIN 和 END 标示了查找到的术语在文本中的起止位置;COVEREDTEXT 指的是在文本中查找到的变体。
例如对字典
表 1. 字典示例
Base Form | Variant |
Instrument | piano, violin, guitar |
Ball games | football, baseball |
对于文本 I like football,分析结果为:
表 2. 分析结果示例
BASEFORM | ID | BEGIN | END | COVEREDTEXT |
Ball games | 2 | 8 | 15 | football |
在 Output Columns 页中,把 USER_ID 和 MONTH 从可用列表加到结果列表中。由于分析结果可能会将一行数据拆分为多行。如带有文本 I like football and baseball 的一行数据,将会由于有 2 个匹配的术语 (football,baseball) 而别分为 2 行数据。在 Output Columns 中选择的字段可用于识别这些来源于同一条数据的多条数据。
不同的用户会有相同的兴趣爱好,因此单纯的文本分析结果会有重复,通过 Distinct 操作符可以去除重复的结果。
从操作符面板上拖拽 Distinct 到挖掘流画板上,连接 Dictionary Lookup 和 Distinct。在 Distinct 的属性视图中,转到 Column Select 页,并把 HOBBY 加到选择列表中。
为了生成兴趣爱好维表,我们要给各种 HOBBY 指定唯一标识。
从操作符面板上拖拽 Select List 到挖掘流画板上,连接 Distinct 和 Select List。在 Select List 属性页中,在结果列表中,删除列名为 USER_ID 和 MONTH 的行;新增一列并移至列表的最顶端;修改新增列的名字为 HOBBY_ID,将 Expression 设置如表 3
表 3. Expression 设置
Case when (rownumber() over() < 10) then ('0' || char(rownumber() over())) else char(rownumber() over()) end |
右键点击 Select List 的 Output 输出口,从上下文菜单中选择 Create Suitable Table…并指定生成表的模式及名字为 TELE 和 DIM_HOBBY。
挖掘流 MF_HobbyFact 的目标是通过文本分析,结合上面建成的兴趣爱好维表生成带有兴趣爱好信息的事实表。完成后的 MF_HobbyFact 如图 13。
图 13. 挖掘流 MF_HobbyFact
挖掘流 MF_HobbyFact 的操作步骤和 MF_HobbyDimension 相似。将 Dictionary Lookup 和 DIM_HOBBY 连接到 Table Join 后,按照表 4 设置 Condition 属性。
表 4. Condition 属性
IN_024.HOBBY = IN1_024.HOBBY |
在 Select List 页中,删除 Column Name 为 HOBBY 和 HOBBY_1 的行,选中 HOBBYID 并上移到 USER_ID 下。右键点击 Table Join 的 Inner 输出口,从上下文菜单中选择 C reate Suitable Table…并指定生成表的模式及名字为 TELE 和 DW_USER_HOBBY。
创建控制流
下面创建控制流 CF_HobbyCreation 用于控制维表及事实表数据的生成。
新建控制流,从 Design Studio 主菜单中选择 File -> New -> Control Flow。在新建文件向导中输入控制流的名字。完成后的控制流 CF_HobbyCreation 如图。
图 14. 控制流 CF_HobbyCreation
具体步骤为:
从操作符面板中拖拽 Mining Flow 到挖掘流画板上,连接 Start 和 Mining Flow,在 Mining Flow 的属性页中,点击图标 <…>,选择挖掘流 MF_HOBBY_DIMENSION。再次使用 Mining Flow 操作符,选择挖掘流 MF_HOBBY_FACT,并连接 2 个 Mining Flow 操作符。从操作符面板上选中 End 并拖拽到控制流画板上,连接 Mining Flow 和 End。
数据仓库应用的生成、部署和应用
我们可以通过控制流生成数据仓库应用并部署到数据仓库管理控制台中执行。
新建数据仓库应用,从 Design Studio 主菜单中选择 File -> New -> Data Warehouse Application。在新建文件向导中选择当前工程;指定 HobbyCreate_APP 作为概要文件的名字;在控制流选择中选择控制流 CF_HobbyCreation;其余设置使用默认值。在 Package Generation 页中,选择存储生成文件的目录,点击 <Finish>。HobbyCreate_APP.zip 就会生成在指定的目录中。
接下来,我们要将生成的 TELE_APP.zip 文件部署到 DB2 数据仓库管理控制台中。
在 IE 浏览器中输入 URL http://localhost:9060/ibm/console,输入用户名和密码。
在控制台中,展开 DB2 Warehouse -> SQL Warehousing -> Data Warehouse Applications,点击菜单 Deploy Warehouse Applications,选择上面步骤中生成的应用 HobbyCreate_APP.zip,如图 15 所示;
图 15. 部署应用
点击 <Next> 直到进入 General 页。在 General 页中,指定应用的 Home 目录 ( 如 c:/home)、日志目录 ( 如 c:/logs) 及工作目录 ( 如 c:/temp)
Data Source 页列出了当前可用的数据仓库应用数据源。点击 <Create> 进入 Create Data Source 页面,输入显示的名字 TELE,取消选中 Managed by Websphere,点击 <Next>;设置连接信息:JNDI Name 为 jdbc/tele,Database Name 为 TELE,Database Alias 为 TELE,Host Name 为 localhost,Port Number 为 50000;在下一个设置单元中,输入数据库连接的用户名和密码,点击 <Finish> 返回应用发布。选择 jdbc/tele 为 TELE 对应的 Runtime JNDI Name;在后续的页面中均使用默认值,直至部署结束。如果部署成功,应该会显示在管理数据仓库应用列表中并有成功安装应用的信息。
部署成功后,我们就可以在控制台中执行该分本分析应用。
进入 DB2 Warehouse -> SQL Warehousing -> Processes -> Run Processes,选中应用 HobbyCreation 点击 <Start>。运行完成后,我们可以查看数据库表 DIM_HOBBY 和 DW_USER_HOBBY 中是否生成了相应的数据。
总结
本文主要介绍了文本分析的基本概念以及如何使用 DB2W 9.5 的非结构化分析工具创建用于文本分析的挖掘流、控制流和数据仓库应用。
源代码下载:http://flashview.ddvip.com/2008_12/dm-0801liangpp.zip
赞助商链接