我需要在标记化中使用命名实体识别(NER)吗?

问题描述 投票:0回答:1

我正在从事一个用于情感分析的 NLP 项目。我正在使用 SpaCy 来标记句子。当我阅读文档时,我了解了 NER。我读到它可用于从文本中提取实体以帮助用户搜索。

我想要理解的是如何在我的标记化过程中体现它(如果我应该)。我举个例子。

text = "Let's not forget that Apple Pay in 2014 required a brand new iPhone in order to use it.  A significant portion of Apple's user base wasn't able to use it even if they wanted to.  As each successive iPhone incorporated the technology and older iPhones were replaced the number of people who could use the technology increased."

sentence = sp(text) # sp = spacy.load('en_core_web_sm')

for word in sentence:
    print(word.text)

# Let
# 's
# not
# forget
# that
# Apple
# Pay
# in
# etc...

for word in sentence.ents:
  print(word.text + " _ " + word.label_ + " _ " + str(spacy.explain(word.label_)))

# Apple Pay _ ORG _ Companies, agencies, institutions, etc.
# 2014 _ DATE _ Absolute or relative dates or periods
# iPhone _ ORG _ Companies, agencies, institutions, etc.
# Apple _ ORG _ Companies, agencies, institutions, etc.
# iPhones _ ORG _ Companies, agencies, institutions, etc.

第一个循环显示“Apple”和“Pay”是不同的令牌。当在第二个循环中打印发现的实体时,它知道“Apply Pay”是一个 ORG。如果是,我怎样才能实现(比方说)标记化的“类型”?

我的想法是,“Apple”和“Pay”不应该一起标记为一个单词,这样,当我创建分类器时,它会将其识别为一个实体,而不识别水果(“Apple”)和动词(“付款”)。

python python-3.x nlp spacy named-entity-recognition
1个回答
0
投票

标记化通常是将句子分割成单词甚至子词。我不确定您稍后打算如何处理这些数据,但 NLP 中的惯例是坚持文档级别、句子级别或单词/标记级别。混合使用 token 和 n-gram 级别(我认为像

["Apple Pay", "required", "an", "iPhone", "to", "use", "it", "."]
)在大多数后续用例中不会对您有帮助。

如果您稍后训练分类器(假设您正在谈论在标记分类任务上微调基于转换器的语言模型),则将使用类似 IOB 格式 的内容来处理 n-gram,例如像这样:

代币 标签
苹果 B
付款
必填 O
O
iPhone B
O
使用 O
O
. O

当然,这取决于您的应用程序,直接合并到 n-gram 可能适合您。如果您有一些正在搜索频繁 n 元语法的应用程序,则可以使用搭配度量来提取这些 n 元语法,例如使用 NLTK 的 CollocationFinder

或者正如您提到的,使用 SpaCy 进行名词块提取命名实体识别。对于后一种,您可以访问 令牌级别 ent_type_ 和 ent_iob_ 属性 来迭代已处理文档中的令牌一次,然后根据 IOB 标签将这些 n-gram 合并在一起。

© www.soinside.com 2019 - 2024. All rights reserved.