likes
comments
collection
share

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

作者站长头像
站长
· 阅读数 4

前言

大家上午好,这里是我们《AIGC》系列的第一篇内容。如果有小伙伴也对AIGC感兴趣,可以关注AIGC这个专栏,今后我还会继续更新这个系列,我们一起体验这段有趣的过程🚀🚀🚀。

引入

话不多说,先给大家介绍一下AIGC。

生成式人工智能——AIGC(Artificial Intelligence Generated Content),是指基于生成对抗网络、大型预训练模型等人工智能的技术方法,通过已有数据的学习和识别,以适当的泛化能力生成相关内容的技术。

而自然语言处理(NLP)是人工智能领域中的一个重要分支,致力于使计算机能够理解、解释和生成人类语言。在NLP的学习过程中,初学者经常会接触到一些基础任务,其中包括 分词词性标注命名实体识别(NER) 。这些任务构成了NLP的基础,为更高级的语言处理任务奠定了基础。

那么今天我们就来了解一下这三个任务。

使用前的准备工作

Colaboratory

在开始之前,我们要注册登录 colab.research.google.com/ 这个网站,我们今天讲的所有操作都是在这个平台上进行的。

Colab是一个由Google提供的免费GPU的Jupyter云服务平台。在个人电脑没有足够计算资源的情况下,可以登录这个平台进行一些较小规模的计算。

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

一。分词:理解语言的基本单元

分词是NLP中的第一步,它涉及将文本拆分成词汇单元,为后续处理提供基本的语言结构。

需要注意的是,python中有多种分词方法,像基于空格的分词、NLTK库分词、 Jieba分词、正则表达式分词等等,我们这里用到的是Transformers库

使用 Transformers 库实现分词

transformers库是Hugging Face开发的一个流行的自然语言处理库,它基于Py用transformers实现分词模块ensorFlow,提供了各种预训练的NLP模型,包括BERT、GPT、RoBERTa等。

接下来我们来看看transformers库是如何实现分词模块的。

1.安装 Transformers 库:

!pip install transformers

这行代码使用了 !pip 命令,它通常在命令行环境中执行。在代码中直接执行 !pip install transformers 会安装 Transformers 库,如果我们在命令行中运行代码,可以在命令行中执行这个命令来安装。

  1. 导入 BertTokenizer:

     from transformers import BertTokenizer
    

    首先,从 Transformers 库中导入 BERT 分词器。

  2. 初始化分词器:

    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
    

    通过 BertTokenizer.from_pretrained 方法,我们初始化了一个预训练的 BERT 分词器,使用的是 "bert-base-uncased" 模型。

  3. 输入文本:

    text = str("Transformers make natural language processing tasks easy.")
    

    我们创建一个字符串 text,准备对这个文本进行分词和编码。

  4. 分词和编码:

    encoding = tokenizer(text, return_tensors='pt', padding=True, truncation=True)
    

    通过调用 tokenizer 对象,将文本进行了分词和编码。参数 return_tensors='pt' 表示返回 PyTorch 张量。padding=True 表示对序列进行填充,truncation=True 表示截断文本,确保其长度符合模型的输入要求。

  5. 获取输入张量:

    tokens = encoding['input_ids']
    

    从编码结果中提取了 'input_ids' 键对应的张量,它包含了经过分词和编码的文本。

  6. 将 token IDs 转为词汇:

    decoded_tokens = tokenizer.convert_ids_to_tokens(tokens[0].tolist())
    

    使用分词器的 convert_ids_to_tokens 方法将 token IDs 转换回单词。

  7. 打印结果:

    print("原始文本:", text)
    print("分词结果:", decoded_tokens)
    

    最后,我们打印原始文本和分词结果。

结果如下图所示: 【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别 这个过程将文本转换为了 BERT 模型可接受的输入形式,其中 tokens 是一个包含了分词后的文本对应的 token IDs 的 PyTorch 张量。而 decoded_tokens 是将 token IDs 转换回词汇的结果。

二、词性标注:了解词汇的语法角色

使用 NLTK 库实现词性标注

一旦文本被分词,下一步就是为每个词汇赋予词性标签。

词性标注可以帮助我们理解每个词汇在句子中的语法角色,为进一步的语法分析和语义理解提供支持。

这段代码使用了 NLTK(Natural Language Toolkit)库来进行词性标注。接下来我们来看看NLTK库如何实现词性标注。

  1. 导入NLTK库:

    import nltk
    from nltk import pos_tag
    from nltk.tokenize import word_tokenize
    

    首先,我们要用到NLTK库,先导入NLTK库及其相关模块。其中,pos_tag用于进行词性标注,word_tokenize用于对文本进行分词。

  2. 下载NLTK数据:

    nltk.download('punkt')
    nltk.download('averaged_perceptron_tagger')
    

    下载NLTK所需的数据,其中 'punkt' 是用于分词的数据,'averaged_perceptron_tagger' 是用于词性标注的数据。

  3. 输入文本:

    text = "Natural language processing is a fascinating field."
    

    这里提供要进行词性标注的文本。

  4. 分词:

    words = word_tokenize(text)
    

    使用 word_tokenize 对文本进行分词,将文本拆分成单词。

  5. 词性标注:

    pos_tags = pos_tag(words)
    

    使用 pos_tag 对分词后的单词进行词性标注,得到每个单词及其对应的词性标签。

  6. 打印结果:

    print("原始文本:", text)
    print("词性标注结果:", pos_tags)
    

    打印原始文本和词性标注的结果。

这样,就完成了一个简单的词性标注任务,得到了输入文本中每个单词的词性标签。NLTK中的 pos_tag 方法使用的是基于感知器的平均模型,它在处理一般文本时效果比较好。这个例子演示了NLTK库如何帮助我们进行自然语言处理中的基本任务。

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

拓展一下

这里,得出的结果比较抽象,如果我们想要它变成我们能看懂的样子,应该怎么做呢?

我们可以将NLTK中的词性标签映射到更常见的词性名称:

import nltk
from nltk import pos_tag
from nltk.tokenize import word_tokenize
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

def simplify_pos_tag(tag):
    if tag.startswith('N'):
        return 'Noun'
    elif tag.startswith('V'):
        return 'Verb'
    elif tag.startswith('R'):
        return 'Adverb'
    elif tag.startswith('J'):
        return 'Adjective'
    else:
        return 'Other'

# 输入文本
text = "Natural language processing is a fascinating field."

# 分词
words = word_tokenize(text)

# 词性标注
pos_tags = pos_tag(words)

# 简化词性标签
simplified_pos_tags = [(word, simplify_pos_tag(tag)) for word, tag in pos_tags]

# 打印结果
print("原始文本:", text)
print("词性标注结果:", simplified_pos_tags)

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别 现在得出的词性标注我们就能看懂了,在这个例子中,我们定义了一个简化词性标签的函数 simplify_pos_tag,将NLTK的词性标签映射到更通用的词性名称。这样,最终的输出结果更容易理解。

Adjective 形容词

Noun 名词

Verb 动词

Other 其他

三、命名实体识别:发现文本中的重要实体

命名实体识别是NLP中的关键任务,它涉及在文本中识别并分类命名实体,如人名、地名、组织机构等。

使用 spaCy 库实现命名实体识别

在Python中,我们可以使用NLTK库或spaCy库来进行命名实体识别(Named Entity Recognition,简称NER)。下面我们使用spaCy库进行简单的命名实体识别。

首先,确保已经安装了spaCy库:

!pip install spacy

然后,下载并安装英语模型:

python -m spacy download en_core_web_sm

现在,我们可以使用以下代码进行命名实体识别:

import spacy

# 加载英语模型
nlp = spacy.load("en_core_web_sm")

# 输入文本
text = "Apple Inc. was founded by Steve Jobs and Steve Wozniak in 1976. It is headquartered in Cupertino, California."

# 处理文本
doc = nlp(text)

# 打印命名实体
print("原始文本:", text)
print("命名实体识别结果:")
for ent in doc.ents:
    print(f"{ent.text} - {ent.label_}")

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别

这样我们就得出结果,这个例子中,命名实体识别结果包括公司名("Apple Inc.")、人名("Steve Jobs"和"Steve Wozniak")、日期("1976")等。

拓展一下

  • ORG:组织
  • PERSON:人名
  • DATE:日期
  • GPE:地点(国家、城市等)

如果对这些标签不太熟悉,可以查阅spaCy的文档以获取更多信息。

另外,为了更好地展示和解释结果,可以将结果中的标签转换为更常见的术语,例如:

  • ORG 转为 "组织"
  • PERSON 转为 "人名"
  • DATE 转为 "日期"
  • GPE 转为 "地点"

下面是转换标签的代码:

import spacy

# 加载英语模型
nlp = spacy.load("en_core_web_sm")

# 输入文本
text = "Apple Inc. was founded by Steve Jobs and Steve Wozniak in 1976. It is headquartered in Cupertino, California."

# 处理文本
doc = nlp(text)

# 转换标签为更常见的术语
def convert_label(label):
    if label == "ORG":
        return "组织"
    elif label == "PERSON":
        return "人名"
    elif label == "DATE":
        return "日期"
    elif label == "GPE":
        return "地点"
    else:
        return label

# 打印命名实体(转换后的标签)
print("原始文本:", text)
print("命名实体识别结果:")
for ent in doc.ents:
    converted_label = convert_label(ent.label_)
    print(f"{ent.text} - {converted_label}")

【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别 这样,输出中的命名实体标签就以更常见的术语呈现了。

结语

那么我们今天的内容就结束啦,欢迎各路大神在评论区讨论~~

点赞收藏不迷路,咱们下期再见ヾ( ̄▽ ̄)ByeBye~

转载自:https://juejin.cn/post/7306450197630320659
评论
请登录