自然语言处理(NLP)领域正经历飞速发展。计算语言学与人工智能的结合推动了诸多突破性进展。尽管研究者们不断寻求提高NLP技术的方法,但企业也逐渐认识到NLP技术的战略价值。NLP技术的核心驱动力在于海量文本数据的可用性。在数字化时代,尤其是对企业而言,文档是知识的重要来源。
然而,训练NLP任务的一个主要障碍是缺乏足够的训练数据。特别是在处理特定领域的应用时,数据稀缺问题尤为突出。训练数据面临两大挑战:一是难以获取大量数据,二是标注数据以供训练和测试的过程繁琐。
这些问题引发了计算机科学界的广泛关注。为应对数据稀缺问题,研究者们提出了两种主要解决方案:
目前,许多开源NLP库都采用了其中一种方法来开发NLP工具。接下来,我们将展示如何利用Wikipedia来增强两个关键的NLP任务:命名实体识别(NER)和主题建模。
有多种工具可用于处理Wikipedia中的信息。对于需要自动处理文本数据的任务,我们使用了一个名为SpikeX的spaCy项目。
SpikeX由意大利公司Erre Quadro Srl开发,旨在帮助构建知识提取工具。它能够执行一系列spaCy管道操作。
安装SpikeX的步骤如下:
bash
pip install --no-cache -U git+https://github.com/erre-quadro/spikex.git@develop spikex
spikex download-wikigraph enwiki_core
spacy download en_core_web_sm
SpikeX具备两项主要功能:
通过SpikeX,我们可以轻松地从Wikipedia中提取信息。例如,对于页面“Natural Language Processing”,SpikeX可以提取出所有相关类别。此外,对于句子“Elon Musk runs Tesla Motors”,SpikeX也能找出其中每个词语对应的Wikipedia页面。
命名实体识别(NER)是NLP的一项重要任务,旨在识别文本中提及的实体,并将其分类为预定义的类别(如人名、组织名称、地名等)。常见的方法包括基于规则的系统、深度神经网络和预训练语言模型的微调。Spacy内置了一个预先训练好的NER系统,可以从文本中识别常见类别。
现在,我们将介绍如何使用Wikipedia来构建一个NER系统,该系统可以识别特定Wikipedia类别的文本。例如,对于句子“命名实体识别和主题建模是自然语言处理的两项任务”,我们可以识别出三个实体:“命名实体识别”、“主题建模”和“自然语言处理”。每个实体都有其对应的Wikipedia页面。
通过SpikeX的两个功能,我们可以构建一个自定义的NER系统,该系统接受两个参数:输入句子的文本和要检测的类别。以下是具体的实现方法:
```python from wasabi import msg from spacy import load as spacyload from spikex.wikigraph import load as wgload from spikex.pipes import WikiPageX
def wikientityrecognition(text, entityroot): entities = [] wg = wgload("enwikicore") wikipagex = WikiPageX(wg) nlp = spacyload("encorewebsm") doc = wikipagex(nlp(text)) entityroot = entityroot.replace(" ", "")
context = set(wg.get_categories(entity_root, distance=2))
for span in doc._.wiki_spans:
page_seen = set()
for page in span._.wiki_pages:
pageid = wg.get_pageid(page)
if pageid in page_seen:
continue
page_seen.add(pageid)
categories = set(wg.get_categories(page))
if len(set.intersection(categories, context)) == 0:
continue
entities.append((span, page))
return entities
text = "命名实体识别和主题建模是自然语言处理的两项任务" entity_root = "计算语言学"
for ent in wikientityrecognition(text, entity_root): print("%s - %s" % (ent[0], ent[1].upper())) ```
运行上述代码将输出:
命名实体识别 - 计算语言学
主题建模 - 计算语言学
自然语言处理 - 计算语言学
通过这种方式,我们可以使用Wikipedia的类别来定义NER任务的标签,从而避免数据标注的难题。
主题建模通常指的是通过NLP工具发现文本中的隐藏语义结构。近年来,LDA(潜在狄利克雷分配)和TextRank等方法被广泛应用于自动文本分析。LDA是一种流行的主题建模方法,它通过概率模型从文档集中提取主题。TextRank则是一种利用网络分析来检测单个文档中主题的方法。此外,还有语义超图等新技术,可以从句子层面提取主题。
现在,我们将展示如何使用Wikipedia在句子和文档级别进行主题建模。
考虑以下专利US20130097769A1的内容:
封装式防护服可能在受污染区域穿戴,以保护穿着者的安全。例如,工人可能在核电站工作时穿戴这种防护服,或者在放射性材料附近工作时穿戴。封装式防护服可能是单次使用的系统,用过后即丢弃。在正常操作条件下,封装式防护服可以通过连接到防护服的外部空气流管获得呼吸空气。空气可能由用户携带的净化呼吸器供应。
通过SpikeX处理每个句子,并从句子中提取与Wikipedia页面相关的类别,我们可以初步检测主题。例如,“Safety”和“Euthenics”在多个句子中出现频率较高。
利用这种方法汇总每个句子的主题,可以更好地表示整个文档。以下是专利文本中每个句子的主题分布:
``` 句子:封装式防护服可能在受污染区域穿戴,以保护穿着者的安全。 主题:Safety -> 1 主题:Euthenics -> 1
句子:例如,工人可能在核电站工作时穿戴这种防护服,或者在放射性材料附近工作时穿戴。 主题:Safety -> 1 主题:Euthenics -> 1 主题:Electricity -> 1 主题:Electromagnetism -> 1 主题:Locale(geographic) -> 1 主题:Electricpowergeneration -> 1 主题:Powerstations -> 1 主题:Infrastructure -> 1 主题:Energy_conversion -> 1 主题:Chemistry -> 1 主题:Radioactivity -> 1
句子:封装式防护服可能是单次使用的系统,用过后即丢弃。 主题:Safety -> 1 主题:Euthenics -> 1 主题:Transportationplanning -> 1 主题:Feministeconomics -> 1 主题:Schoolsofeconomicthought -> 1 主题:Landmanagement -> 1 主题:Architecture -> 1 主题:Planning -> 1 主题:Transport -> 1 主题:Feminism -> 1 主题:Urbanplanning -> 1 主题:Feministtheory -> 1 主题:Urbanization -> 1 主题:Spatialplanning -> 1 主题:Socialsciences -> 1
句子:在正常操作条件下,封装式防护服可以通过连接到防护服的外部空气流管获得呼吸空气。 主题:Safety -> 1 主题:Euthenics -> 1 主题:Chemicalindustry -> 1 主题:Gases -> 1 主题:Industrialgases -> 1 主题:Breathinggases -> 1 主题:Divingequipment -> 1 主题:Respiration -> 1 主题:Electromechanicalengineering -> 1 主题:Heattransfer -> 1 主题:Homeappliances -> 1 主题:Engineeringdisciplines -> 1 主题:Automation -> 1 主题:Buildingengineering -> 1 主题:Temperature -> 1 主题:Heating,ventilation,andair_conditioning -> 1
句子:空气可能由用户携带的净化呼吸器供应。 主题:Personalprotectiveequipment -> 1 主题:Airfilters -> 1 主题:Respirators -> 1 主题:Protectivegear -> 1 ```
通过这种方法,我们可以自动检测整个文档的主题,而无需任何预训练任务。例如,从上述文本中可以看出,安全和环境科学是主要的主题。
Wikipedia作为一种知识来源,在多种应用中被广泛应用,如文本注释、分类、索引、聚类、搜索和自动分类法生成。其结构上的优势使其成为这些应用的理想选择。
本文展示了如何利用Wikipedia增强NLP任务,如命名实体识别和主题建模。这种方法的优势在于避免了数据标注的繁琐过程。然而,由于Wikipedia的公共性质,可能会受到专家和非专家共同维护的影响,导致一些偏见。尽管如此,Wikipedia仍然是一个强大的资源,可以显著提升NLP任务的表现。