如何在Spacy语言模型中为空格添加tokenizer异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Spacy语言模型中为空格添加tokenizer异常相关的知识,希望对你有一定的参考价值。

以下是我获取用户输入的代码。

import en_core_web_sm
nlp = en_core_web_sm.load()
text = input("please enter your text or words here")
doc = nlp(text)
print([t.text for t in doc])

如果用户将文本输入为深度学习,则文本将被分解为

('Deep', 'Learning')

如何在nlp中添加空格异常?这样输出如下

(Deep Learning)
答案

来自用户输入的原始文本在空白字符上分割,类似于text.split('')。然后,标记生成器从左到右处理文本。在每个子字符串上,它执行两项检查:

  1. 子字符串是否与tokenizer例外规则匹配?例如,“不”不包含空格,但应分为两个标记,“do”和“not”,而“U.K.”应始终保持一个标记。
  2. 可以分割前缀,后缀或中缀吗?例如逗号,句号,连字符或引号等标点符号。

因此,如果您的用户键入:Looking for Deep Learning experts

它将被标记为:('Looking', 'for, 'Deep', 'Learning', 'experts')

Spacy不知道Deep Learning是一个独立的实体。如果您希望spaCy将Deep Learning识别为单个实体,您需要教它。如果您有一个预定义的单词列表,您希望spaCy将其识别为单个实体,则可以使用PhraseMatcher来执行此操作。

您可以查看有关如何使用PhraseMatcher here的详细信息


更新 - 回复OP的评论如下

我认为没有一种方法可以让spaCy了解您正在寻找的实体,而无需在您的域的上下文中接受培训或提供预定义的实体子集。

我能想到的唯一解决方案是使用注释工具来教spaCy - 获取用户输入的子集并手动注释它们(您可以使用spaCy或Brat制造商的神童工具 - 它是免费的) - 使用注释培训新的或现有的NER模型。有关训练模型的详细信息可以在[这里]找到(here

给出像“寻找深度学习专家”这样的文本,您将使用诸如“FIELD”之类的标签来注释“深度学习”。然后训练一个新的实体类型,“FIELD”。

在上下文中训练模型后,spaCy将学习检测感兴趣的实体。

以上是关于如何在Spacy语言模型中为空格添加tokenizer异常的主要内容,如果未能解决你的问题,请参考以下文章

如何找到 spaCy 模型的词汇量?

如何在 URDU 语言文本上进行 NLP? [关闭]

Spacy 从训练模型中提取命名实体关系

我无法在 EMR PySpark 笔记本中安装 spacy 模型

每次迭代后保存spacy的NER模型

如何使用混淆矩阵计算自定义训练的 spacy ner 模型的整体准确性?