如何在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('')。然后,标记生成器从左到右处理文本。在每个子字符串上,它执行两项检查:
- 子字符串是否与tokenizer例外规则匹配?例如,“不”不包含空格,但应分为两个标记,“do”和“not”,而“U.K.”应始终保持一个标记。
- 可以分割前缀,后缀或中缀吗?例如逗号,句号,连字符或引号等标点符号。
因此,如果您的用户键入: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异常的主要内容,如果未能解决你的问题,请参考以下文章