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

前言

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

引入

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

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

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

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

使用前的准备工作

Colaboratory

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

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

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

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

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

使用 Transformers 库实现分词

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

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

1.安装 Transformers 库:

python 复制代码
!pip install transformers

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

  1. 导入 BertTokenizer:

    python 复制代码
     from transformers import BertTokenizer

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

  2. 初始化分词器:

    python 复制代码
    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

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

  3. 输入文本:

    python 复制代码
    text = str("Transformers make natural language processing tasks easy.")

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

  4. 分词和编码:

    python 复制代码
    encoding = tokenizer(text, return_tensors='pt', padding=True, truncation=True)

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

  5. 获取输入张量:

    python 复制代码
    tokens = encoding['input_ids']

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

  6. 将 token IDs 转为词汇:

    python 复制代码
    decoded_tokens = tokenizer.convert_ids_to_tokens(tokens[0].tolist())

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

  7. 打印结果:

    python 复制代码
    print("原始文本:", text)
    print("分词结果:", decoded_tokens)

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

结果如下图所示:

这个过程将文本转换为了 BERT 模型可接受的输入形式,其中 tokens 是一个包含了分词后的文本对应的 token IDs 的 PyTorch 张量。而 decoded_tokens 是将 token IDs 转换回词汇的结果。

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

使用 NLTK 库实现词性标注

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

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

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

  1. 导入NLTK库:

    python 复制代码
    import nltk
    from nltk import pos_tag
    from nltk.tokenize import word_tokenize

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

  2. 下载NLTK数据:

    python 复制代码
    nltk.download('punkt')
    nltk.download('averaged_perceptron_tagger')

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

  3. 输入文本:

    python 复制代码
    text = "Natural language processing is a fascinating field."

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

  4. 分词:

    python 复制代码
    words = word_tokenize(text)

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

  5. 词性标注:

    python 复制代码
    pos_tags = pos_tag(words)

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

  6. 打印结果:

    python 复制代码
    print("原始文本:", text)
    print("词性标注结果:", pos_tags)

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

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

拓展一下

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

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

python 复制代码
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)

现在得出的词性标注我们就能看懂了,在这个例子中,我们定义了一个简化词性标签的函数 simplify_pos_tag,将NLTK的词性标签映射到更通用的词性名称。这样,最终的输出结果更容易理解。

Adjective 形容词

Noun 名词

Verb 动词

Other 其他

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

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

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

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

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

bash 复制代码
!pip install spacy

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

bash 复制代码
python -m spacy download en_core_web_sm

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

python 复制代码
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_}")

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

拓展一下

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

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

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

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

下面是转换标签的代码:

python 复制代码
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}")

这样,输出中的命名实体标签就以更常见的术语呈现了。

结语

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

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

相关推荐
人肉推土机3 分钟前
AI Agent 架构设计:ReAct 与 Self-Ask 模式对比与分析
人工智能·大模型·llm·agent
一千柯橘7 分钟前
python 项目搭建(类比 node 来学习)
python
新知图书12 分钟前
OpenCV为图像添加边框
人工智能·opencv·计算机视觉
sduwcgg12 分钟前
python的numpy的MKL加速
开发语言·python·numpy
大模型真好玩14 分钟前
可视化神器WandB,大模型训练的必备工具!
人工智能·python·mcp
东方佑15 分钟前
使用 Python 自动化 Word 文档样式复制与内容生成
python·自动化·word
钢铁男儿21 分钟前
Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
开发语言·python
databook30 分钟前
当机器学习遇见压缩感知:用少量数据重建完整世界
python·机器学习·scikit-learn
张较瘦_33 分钟前
[论文阅读] 人工智能 | 当AI遇见绿色软件工程:可持续AI实践的研究新方向
人工智能
M1A11 小时前
Python数据结构操作:全面解析与实践
后端·python