`
gstarwd
  • 浏览: 1487795 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
本文介绍了 “Easy Semantic Search”,这是 IBM® OmniFind® Enterprise Edition V8.4 中引入的一个新功能,它使最终用户能够利用语义搜索的功能,通过广为接受的关键字查询模式查询概念。按照本文中描述的步骤启用 Easy Semantic Search 功能,对电话号码进行搜索。然后通过扩展示例配置对 Easy Semantic Search 功能进行定制。

简介

除 了搜索关键字之外,还能够搜索概念,这对于改进企业搜索解决方案的效率和易用性非常有意义。如果能够语义理解 “phone number” 的查询,那么不但会返回包含关键字 “phone” 和 “number” 的文档,还会返回包含实际电话号码的文档,并在搜索结果中突出显示以便方便引用。“Easy Semantic Search” 是 IBM OmniFind Enterprise Edition 8.4 中引入的一个新功能,它使最终用户能够利用语义搜索的功能,通过广为接受的关键字查询模式查询概念。为了使用这个功能,最终用户不需要学习复杂的查询语 言,也不需要为他们开发特殊用途的用户界面。语义搜索要求文本分析组件分析文档的概念相关性并创建可搜索的元数据。Omnifind Enterprise Edition 8.4 附带一个强大的文本分析模块,可以通过配置这个模块在处理的文档中检测许多概念。在本文中,将介绍语义搜索,并执行必要的步骤来启用 Easy Semantic Search 功能,对电话号码进行搜索。另外,还要学习如何通过扩展示例配置对 Easy Semantic Search 功能进行定制。

 






概述 —— OmniFind 处理和定制的文本分析

OmniFind Enterprise Edition V8.4 提供一个可配置的文本分析模块,当为文档编制索引以用于企业搜索时,这个模块可以探测表达式和可枚举的实体(比如人名、位置和物品)。这个模块称为 Regular Expression Annotator(正则表达式注释器)。另外,还有一个称为 “语义同义词(semantic synonym)” 的新概念,它通过转换用户的关键字查询,从根本上简化对从非结构化文本中提取的概念的搜索。这些机制使企业搜索用户能够更高效地发现信息,他们可以通过熟 悉的关键字查询界面同时搜索关键字和语义概念。在这个过程中,不需要复杂的查询语法或者用繁琐的表单选择选项。

例 如,对 “laptop product number” 的搜索查询不但会发现包含声明的关键字的文档,还会找到同时包含 “laptop” 和探测到的产品号(比如 266-H2G)的文档。在这个示例中,探测到的产品号还会在搜索结果中突出显示。这个功能还可以用来探测和搜索命名实体的可枚举集,比如产品、国家或公 司名称。对 “G8 county climate regulations” 的查询会发现同时包含 “climate” 和 “regulations” 以及属于八国集团(G8)的国家名称的文档。

Easy Semantic Search 功能由 OmniFind 系统中的三个不同组件提供:

首先,在 OmniFind 的 Unstructured Information Management Architecture(UIMA)处理管道中添加了正则表达式注释器,从而根据一套可扩展的规则检测文档文本中的概念实例。发现的元信息存储在搜索索引中。

第 二,使用 OmniFind 的同义词词典机制为关键字定义语义同义词。语义同义词采用 XML 片段查询表达式的形式,可以与一般的同义词一起使用。例如,关键字 “phone number” 可以具有同义词 “telephone number” 以及 XML 片段查询 @xmlf2::'<#phonenumber/>'。

第 三,搜索应用程序中的语义同义词扩展代码从 OmniFind 后端获得用户提供的关键字的同义词,并将原来的查询转换为一个 XML 片段查询,其中组合了原来的关键字以及常规和语义同义词。扩展逻辑并不替换原来的关键字,而是创建一个 OR 表达式来寻找关键字或与这个关键字相关的概念实例。例如,查询 ‘IBM phone number’ 变成 ‘ibm <.or> phone <#phonenumber/> </.or> <.or> number <#phonenumber/> </.or>’。因为以上示例中原来的关键字由两个词组成(phone number),这两个词都具备语义同义词,扩展逻辑按照 Boolean 代数规则创建两个 OR 部分,这两个部分由 AND 连接。(A ^ B) v C 变成 (A v C) ^ (B v C),这很容易用 XML 片段表达式来表示。

启用 Easy Semantic Search

在 示例配置中,需要用 OmniFind Enterprise Edition 8.4 附带的三个文件启用 Easy Semantic Search 功能。这些文件位于 OmniFind Enterprise Edition 安装根目录下面的 packages/uima/regex 子目录中。Text Analysis Integration 手册中的 “Easy semantic search using the regular expression annotator” 一节(参见 参考资料 )详细描述了启用过程,其基本步骤如下:

  1. 第 一步是启用文本分析:使用 OmniFind 管理控制台(system 选项卡,编辑解析器),将包含预先配置好的正则表达式注释器的 PEAR 文件(of_regex.pear)上载到 OmniFind Enterprise Edition 系统中。然后,将这个注释器与它要处理的集合关联起来(集合的解析器设置)。
  2. 在第二步中,将文本分析结果映射到索引:为此,将通用分析结构上载到索引映射文件(of_sample_regex_cas2index.xml),并将它与集合关联起来(也在解析器设置中)。将注释器和映射文件链接到集合之后,就可以对文档进行爬行、解析和编制索引。
  3. 第三步是配置关键字的语义同义词扩展:为此,将提供的示例同义词词典(of_sample_synonym_dic.dic)上载到 OmniFind 系统(system 选项卡,编辑搜索),并将它与这个集合的搜索组件关联起来(集合的搜索设置)。

现 在,通过在 OmniFind 搜索应用程序首选项屏幕上启用 “automatically search for synonyms using semantic expansion” 选项,就可以根据语义同义词搜索集合。启用了这个功能之后,对 “phone number” 的基本关键字查询就会扩展到语义概念 <phonenumber/> 以及几个常规同义词,比如 “telephone number”。当实际的电话号码出现在摘要式文档中,在进行文本分析时,这个电话号码就被标注为 <phonenumber/>,对于匹配的查询,会返回这个文档,并在结果集中突出显示电话号码本身。还会找到包含单词 “phone” 和 “number” 以及常规同义词之一的文档。语义同义词扩展机制仅限于扩展简单的关键字查询。当前还不能扩展字段查询或包含高级查询词的查询。由正则表达式注释器执行的额 外文本分析会影响性能,会降低解析器的最大吞吐量。


图 1. 在一个 Web 集合上对电话号码进行语义搜索的搜索结果
识别电话号码的搜索结果

定制正则表达式注释器

通 过寻找文档中的电话号码和 URL,可以很好地体会 OmniFind Enterprise Edition 8.4 的 Easy Semantic Search 功能的作用。但是,在生产场景中,其他概念可能更重要。系统的灵活性允许用户检测各种概念或实体。为了检测更多的概念,必须调整三个组件:管理正则表达式 注释器的文本分析的规则,指示系统如何将发现的事实存储在索引中的索引映射文件,以及定义关键字和语义搜索概念之间的绑定的同义词词典。

本 节的其余部分将解释如何扩展示例规则、映射和同义词。还讨论一种规则评估方法。提供的示例演示如何配置 OmniFind Enterprise Edition,让它在给出关键字 “IBM laptop” 或 “thinkpad” 时搜索 IBM 笔记本电脑的产品号,并能够检测和搜索文本中出现的国家名称。

定制规则

正 则表达式注释器是通过一个 XML 文件配置的。这个文件包含一组规则,这些规则定义注释器应该处理的字符和数字序列的类型以及处理的方式。关于该文件和规则格式的详细描述可以在 OmniFind Enterprise Edition 8.4 Text Analysis Integration 指南中找到(参见 参考资料 )。 这个规则文件属于注释器的 PEAR 文件的一部分。PEAR 文件实际上是一个 ZIP 存档文件,其中按照定义良好的目录结构包含注释器代码和配置。XML 规则文件放在 PEAR 文件中的 “xml” 子目录中,可以用任何 ZIP 文件工具(例如 Java SDK 提供的 jar 命令)提取出来。为方便起见,正则表达式注释器 PEAR 中的示例规则文件(of_sample_regex_rules.xml)也放在 OmniFind Enterprise Edition 安装根目录下面的 packages/uima/regex 子目录中。这个目录还包含 XML 模式定义(ruleSet.xsd),可以用于验证对模式做出的更改。

示例规则文件包含四个规则:phonenumber、potential_phonenumber、url 和 email。URL 和 e-mail 规则是相当简单的正则表达式,但是两个电话号码规则比较复杂,因为它们要检测大量国际电话号码的表示方式。

定制正则表达式规则的一种简单方法是复制某个规则(例如 URL 规则)的完整规则定义并修改它。简单的规则需要修改正则表达式、要创建的注释 id(对于每个规则是惟一的)和要创建的注释的类型。

清单 1 中,以 URL 规则定义为基础,创建一个匹配 Thinkpad 笔记本电脑产品号的简单规则。将正则表达式修改为寻找 4 位数字,后面跟一个连字符,最后是 3 位的字符数字序列。例如,序列 2668-H2G 表示 Thinkpad T43p。另外,将要创建的注释 id 修改为 “thinkpad”,类型为 com.ibm.es.uima.Thinkpad。


清单 1. 检测 IBM 笔记本电脑产品号的示例规则

<!-- IBM Laptop Product Number e.g. 2668-H2G --> 
<rule regEx="([0-9]{4}\x20?-\x20?[A-Z,0-9]{3})"
        matchStrategy="matchAll" matchType="uima.tcas.DocumentAnnotation">
      <createAnnotation id="thinkpad" type="com.ibm.es.uima.Thinkpad">
          <begin group="0"/>
          <end group="0"/>
      </createAnnotation>
</rule>

 

清单 2 中,通过包含正则表达式的简单的名称列表可以检测一些国家。使用正则表达式操作符可以搜索长的国家名称和短的国家名称(例如,People's Republic of China 和 China),并可以控制允许的末尾字符。

注 意,第一个规则检测一些国家并创建一个 “com.ibm.es.uima.Country” 类型的注释。第一个规则并不检测八国集团其他的一些成员国,但是第二个规则将检测八国集团的所有成员国,这个规则不仅创建国家注释,还设置注释特性来标识 出那些属于八国集团的国家。这样的话,对任意国家的查询将会找到这两个规则中指定的所有国家,同时也可以查询属于八国集团的国家。可以按照这种方式实现简 单的层次结构(例如,属于特定品牌的产品)。


清单 2. 检测国家的两条规则

<!-- Country -->
<rule regEx="(Australia|Brazil|Spain|(People's Republic of )?e?China)s?(?!\w)"
            matchStrategy="matchAll" matchType="uima.tcas.DocumentAnnotation">
   <createAnnotation id="country" type="com.ibm.es.uima.Country">
      <begin group="0"/>
      <end group="0"/>
   </createAnnotation>
</rule>

<!-- G8 Country -->
<rule regEx="(Canada|France|Germany|Italy|Japan|Russian Federation|United
Kingdom|United States of America|USA|U.S.A.)s?(?!\w)"
            matchStrategy="matchAll" matchType="uima.tcas.DocumentAnnotation">
   <createAnnotation id="country-G8" type="com.ibm.es.uima.Country">
      <begin group="0"/>
      <end group="0"/>
      <setFeature name="Group" type="String">G8</setFeature>
   </createAnnotation>
</rule>

 

在将这些示例规则复制到 of_sample_regex_rules.xml 文件中时,请注意不要在正则表达式中引入换行符。

扩展类型系统

新 规则中使用的注释类型必须成为 UIMA 类型系统的一部分。正则表达式注释器的类型系统文件名为 of_sample_regex_typesystem.xml(也在注释器 PEAR 文件的 xml 子目录中,同时出现在 OmniFind 安装目录的 packages/uima/regex 目录中),必须用新的类型扩展它。这个类型系统已经包含了 phonenumber 类型和示例正则表达式注释器规则所需的其他注释器类型。清单 3 给出两个新的类型定义:


清单 3. 两个新的注释类型需要添加的类型系统定义

<!-- Thinkpad Annotation -->
<typeDescription>
    <name>com.ibm.es.uima.Thinkpad</name>
    <description>IBM laptop product numbers</description>
    <supertypeName>uima.tcas.Annotation</supertypeName>
</typeDescription>

<!-- Country Annotation -->
<typeDescription>
    <name>com.ibm.es.uima.Country</name>
    <description>Countries of the world</description>
    <supertypeName>uima.tcas.Annotation</supertypeName>
    <features>
        <featureDescription>
            <name>Group</name>
            <description/>
            <rangeTypeName>uima.cas.String</rangeTypeName>
        </featureDescription>
    </features>
</typeDescription>

 

应用、评估和调整

修 改和扩展正则表达式注释器的规则,从而在非结构化文本中检测更多的概念实例,这常常需要采用一种迭代式的方法 —— 首先编写最初的一组规则,在示例文档上测试,然后调整这些规则并重新测试。当结果令人满意时,就可以用新规则更新原来的注释器 PEAR 文件中的规则,并将产生的版本安装在 OmniFind Enterprise Edition 中投入使用。为了评估修改后的规则或新创建的规则,可以使用 UIMA SDK 在 OmniFind 之外针对选择的文本运行正则表达式注释器。

 

UIMA SDK, Version 1.4.4 :请下载并运行这个软件来评估正则表达式注释器规则。

可以从 IBM developerWorks 下载 UIMA SDK 的 Windows 和 UNIX 版本,并部署在开发工作站上。可以使用这个 SDK 中的 PEAR 安装程序(runPearInstaller 命令)将 OmniFind Enterprise Edition 8.4 附带的正则表达式注释器 PEAR(OmniFind Enterprise Edition 安装根目录的 packages/uima/regex 子目录中的 of_regex.pear 文件)安装到一个本地目录中,并在 CAS Visual Debugger(CVD)工具中运行注释器。CVD 在示例文本中运行注释器,这些文本可以复制到 CVD 界面中。在成功运行之后,会列出创建的注释并突出显示对应的原始文本部分。图 2 给出 CVD 界面:
图 2. 可以使用 CAS Visual Debugger 检验正则表达式注释器规则
可以使用 CAS Visual Debugger 检验正则表达式注释器规则

图 2 中的示例展示了语义搜索的强大功能。即使在示例文档的文本中并没有直接出现关键字 “IBM laptop”,但是对 “IBM laptop” 的查询仍然可以找到这个文档。另外,搜索与八国集团相关的文档时,也会返回与 Germany、Russia 和 Italy 匹配的文档。

使用 CVD 评估注释器需要 5 个简单的步骤:

  1. 执行 runPearInstaller shell 或批处理脚本。
  2. 指定要安装的 PEAR 文件并提供一个目标目录,然后单击 Install
  3. 完成安装之后,单击 Run your AE in the CAS Visual Debugger
  4. 在右边的文本窗口中输入一些示例文本,包括电话号码,例如 (800) 555-1234,并选择 Run > Run Regular Expression Annotator
  5. 现在在 “Analysis Results” 窗口中浏览注释:选择 AnnotationIndex ,然后在下面的窗口中选择检测到的 com.ibm.es.uima.PhoneNumber 实例。

对 于安装的正则表达式注释器 PEAR 版本中的 XML 规则和类型系统文件,必须应用上一节讨论的规则和类型系统修改。在 UIMA SDK PEAR 安装程序工具执行的安装过程中,将 PEAR 文件提取到安装向导中指定的目录中。规则文件和类型系统文件位于 jedii_an_regex/xml 子目录中。在修改这些文件时,最好对可正常工作的版本进行备份,然后进行增量修改并经常进行评估。

修 改规则和类型系统之后,可以使用 UIMA SDK 提供的 CAS Visual Debugger(CVD)工具检验这些修改。在从命令行启动 CVD 之前,必须在 Java 类路径环境变量中添加 jedii_an_regex/metadata/setenv.txt 文件中提供的资源列表(注意: 当通过 PEAR 安装程序启动 CVD 时,会自动设置类路径;但是,在从命令行直接启动 CVD 时,不会自动设置类路径。)设置了类路径之后,使用 cvd 命令启动 CVD。要装载注释器,从 CVD 菜单选择 Run > Load TAE ,然后找到正则表达式注释器的描述文件 jedii_an_regex/desc/jregex.xml。

可 以在 CVD 窗口右边的内容字段中输入或复制示例文本,并启动正则表达式注释器来处理它(“Run”,“Run Regular Expression Annotator”)。然后,左边的 Analysis Result 窗口显示注释器在示例文本上创建的注释实例,这些实例按照注释类型分类。如果选择其中的某个注释,那么就会突出显示与这个注释相关的原始文本。在必须研究 细微的差异时(例如,注释的末尾是否有空格),这个特性尤其有用。现在可以根据需要修改或添加规则,以便获取所需的结果。一些在线资源(包括许多教程)提 供了更多关于正则表达式的信息。可以修改和评估规则,而不需要重新启动 CVD —— 只需重新装载注释器描述符并重新运行注释器。

PEAR 打包

现 在,安装的正则表达式注释器已经配置了所需的规则集。为了部署该配置,必须用新的规则构建一个 PEAR 文件。最简单的方法是复制原来的正则表达式注释器 PEAR,然后在这个存档文件中的 xml 子目录中插入两个 XML 文件。可以使用任何能够替换 ZIP 存档文件中的文件的 ZIP 工具(例如,Java JDK 发行版中提供的 JAR 实用程序)。在插入 of_sample_regex_typesystem.xml 和 of_sample_regex_rules.xml 文件的新版本时,切记不要改变文件名,这样就会覆盖原来的版本。现在,可以使用管理控制台将新的 PEAR 文件上载到 OmniFind 系统中,并将它分配给集合。

对索引映射进行注释

为 了使 OmniFind 创建新注释,并且将新注释存储在搜索索引中,还需要在索引映射文件中的通用分析结构中添加新注释类型的规则。需要添加一个 <indexBuildItem>,它将注释映射到可搜索的 span(注释风格)或字段(字段风格),或者同时映射到这两者。清单 4 中的示例为每个 “thinkpad” 注释创建一个可搜索的 span,并创建一个包含位于特定文档中的所有产品号的字段。需要将清单 4 和清单 5 中的代码添加到 of_sample_regex_cas2index.xml 中(在 OmniFind 安装目录的 packages/uima/regex 目录中)。


清单 4. 将 Thinkpad 注释映射到索引的可搜索的 span 以及字段中

<indexBuildItem>
    <name>com.ibm.es.uima.Thinkpad</name>
    <indexRule>
       <style name="Annotation">
           <attribute name="fixedName" value="thinkpad"/>
       </style>
       <style name="Field">
           <attribute name="fixedName" value="thinkpad"/>
           <attribute name="fieldSearchable" value="true"/>
           <attribute name="returnable" value="true"/>
       </style>
    </indexRule>
</indexBuildItem>

 

清单 5 中的示例为 “country” 注释创建可搜索的 span,其中包括由 “group” 特性提供的映射值。


清单 5. 将 Country 注释映射到索引中一个可搜索的 span

<indexBuildItem>
    <name>com.ibm.es.uima.Country</name>
    <indexRule>
       <style name="Annotation">
           <attribute name="fixedName" value="country"/>
           <attributemappings>
               <mapping>
                   <feature>Group</feature>
                   <indexName>group</indexName>
               </mapping>
           </attributemappings>
       </style>
    </indexRule>
</indexBuildItem>

 

对于已经通过管理控制台激活了新的正则表 达式注释器的每个集合,需要将扩展后的 of_sample_regex_cas2index.xml 文件上载到集合的解析器配置中。现在,集合已经可以用定制的注释器处理文档,并将结果存储在它的搜索索引中。现在应该执行端到端的测试,这需要处理一些已 知包含被检测的产品号和集合的文档(例如,使用 CVD 工具调整规则的测试)。为文档编制索引之后,可以使用下面这样的 XML 片段查询确认是否创建了注释并为它们编制了索引:

  • @xmlf2::'<#phonenumber/>' 搜索示例电话号码规则的注释
  • @xmlf2::'<#country>/>' 搜索国家
  • @xmlf2::'<#country group="G8"/>' 只搜索八国集团的成员国
  • @xmlf2::'<#thinkpad/>' 搜索 thinkpad 注释

因 为 thinkpad 注释也被映射到可返回且可搜索的字段,所以可以发出对 “thinkpad:” 的字段搜索来检索具有 thinkpad 注释的所有文档。如果激活了细节视图(搜索结果上面的 “Show Details” 链接,那么也会显示字段值(检测到的产品号)。

编写语义同义词

为 了让关键字搜索可以使用新的注释,必须扩展这个集合的同义词词典。OmniFind 安装文件也提供了示例同义词词典的 XML 源代码(of_sample_synonym_dic.xml),可以将它作为起点。在文件中的 <synonymgroups> 集中,需要增加三组同义词,如 清单 6 所示。


清单 6. 语义同义词的定义

<synonymgroup>
    <synonym>thinkpad</synonym>
    <synonym>laptop</synonym>
    <synonym>@xmlf2::'<#thinkpad/>'</synonym>
</synonymgroup>
<synonymgroup>
    <synonym>country</synonym>
    <synonym>nation</synonym>
    <synonym>@xmlf2::'<#country/>'</synonym>
</synonymgroup>
<synonymgroup>
    <synonym>g8 country</synonym>
    <synonym>g8 nation</synonym>
    <synonym>@xmlf2::'<#country group="G8"/>'</synonym>
</synonymgroup>

 

扩展了同义词文件之后,需要从中构建 一个二进制词典。在词典 XML 文件中,一定要用 < 和 > 对 XML 片段表达式的括号进行编码。必须使用 OmniFind 服务器上的 essymdictbuilder 工具创建词典(例如,在 Linux 或 AIX OmniFind 服务器上使用命令 essyndictbuilder.sh of_sample_synonym_dic.xml of_sample_synonym_dic.dic )。可以使用管理控制台将产生的词典上载到 OmniFind 系统中,并与搜索功能关联起来。

结束语

本 文概述了启用和定制 Easy Semantic Search 功能的必需步骤,使最终用户能够通过众所周知的关键字搜索模式执行强大的语义查询。通过扩展正则表达式注释器的规则,可以执行许多文本分析任务。对于更复 杂的文本分析任务,可能需要开发定制的注释器。教程 “Semantic search in IBM OmniFind Enterprise Edition, Part 2: Semantic search with UIMA and OmniFind ” (developerWorks,2006 年 12 月)详细说明了如何开发定制的注释器,还深入讨论了如何将定制的注释器合并到 OmniFind 系统中,以及将注释映射到索引的过程。本文介绍的 Easy Semantic Search 功能可以与任何注释器一起使用,包括定制开发的注释器。定制开发的注释器可以替换正则表达式注释器,或者与它部署在一起。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics