【AIGC篇】NLP任务入门:分词、词性标注与命名实体识别
前言?大家上午好,这里是我们《AIGC》系列的第一篇内容。如果有小伙伴也对AIGC感兴趣,可以关注AIGC这个专栏,今后我还会继续更新这个系列,我们一起体验这段有趣的过程??????。
?引入话不多说,先给大家介绍一下AIGC。
生成式人工智能——AIGC(Artificial Intelligence Generated Content),是指基于生成对抗网络、大型预训练模型等人工智能的技术方法,通过已有数据的学习和识别,以适当的泛化能力生成相关内容的技术。
而自然语言处理(NLP)是人工智能领域中的一个重要分支,致力于使计算机能够理解、解释和生成人类语言。在NLP的学习过程中,初学者经常会接触到一些基础任务,其中包括 「分词」 、 「词性标注」 和 「命名实体识别(NER)」 。这些任务构成了NLP的基础,为更高级的语言处理任务奠定了基础。
那么今天我们就来了解一下这三个任务。
使用前的准备工作「Colaboratory」
在开始之前,我们要注册登录 https://colab.research.google.com/ 这个网站,我们今天讲的所有操作都是在这个平台上进行的。
「Colab是一个由Google提供的免费GPU的Jupyter云服务平台」。在个人电脑没有足够计算资源的情况下,可以登录这个平台进行一些较小规模的计算。
colab.png一。分词:理解语言的基本单元分词是NLP中的第一步,它涉及将文本拆分成词汇单元,为后续处理提供基本的语言结构。
需要注意的是,python中有多种分词方法,像基于空格的分词、NLTK库分词、 Jieba分词、正则表达式分词等等,我们这里用到的是「Transformers库」
使用 Transformers 库实现分词transformers库是Hugging Face开发的一个流行的自然语言处理库,它基于Py用transformers实现分词模块ensorFlow,提供了各种预训练的NLP模型,包括BERT、GPT、RoBERTa等。
接下来我们来看看transformers库是如何实现分词模块的。
1.「安装 Transformers 库:」
!pipinstalltransformers
这行代码使用了 !pip 命令,它通常在命令行环境中执行。在代码中直接执行 !pip install transformers 会安装 Transformers 库,如果我们在命令行中运行代码,可以在命令行中执行这个命令来安装。
「导入 BertTokenizer:」
fromtransformersimportBertTokenizer
首先,从 Transformers 库中导入 BERT 分词器。
「初始化分词器:」
tokenizer=BertTokenizer.from_pretrained('bert-base-uncased')
通过 BertTokenizer.from_pretrained 方法,我们初始化了一个预训练的 BERT 分词器,使用的是 "bert-base-uncased" 模型。
「输入文本:」
text=str("Transformersmakenaturallanguageprocessingtaskseasy.")
我们创建一个字符串 text,准备对这个文本进行分词和编码。
「分词和编码:」
encoding=tokenizer(text,return_tensors='pt',padding=True,truncation=True)
通过调用 tokenizer 对象,将文本进行了分词和编码。参数 return_tensors='pt' 表示返回 PyTorch 张量。padding=True 表示对序列进行填充,truncation=True 表示截断文本,确保其长度符合模型的输入要求。
「获取输入张量:」
tokens=encoding['input_ids']
从编码结果中提取了 'input_ids' 键对应的张量,它包含了经过分词和编码的文本。
「将 token IDs 转为词汇:」
decoded_tokens=tokenizer.convert_ids_to_tokens(tokens[0].tolist())
使用分词器的 convert_ids_to_tokens 方法将 token IDs 转换回单词。
「打印结果:」
print("原始文本:",text)
print("分词结果:",decoded_tokens)
最后,我们打印原始文本和分词结果。
「结果如下图所示:」
这个过程将文本转换为了 BERT 模型可接受的输入形式,其中 tokens 是一个包含了分词后的文本对应的 token IDs 的 PyTorch 张量。而 decoded_tokens 是将 token IDs 转换回词汇的结果。
二、词性标注:了解词汇的语法角色使用 NLTK 库实现词性标注一旦文本被分词,下一步就是为每个词汇赋予词性标签。
词性标注可以帮助我们理解每个词汇在句子中的语法角色,为进一步的语法分析和语义理解提供支持。
这段代码使用了 NLTK(Natural Language Toolkit)库来进行词性标注。接下来我们来看看NLTK库如何实现词性标注。
「导入NLTK库:」
importnltk
fromnltkimportpos_tag
fromnltk.tokenizeimportword_tokenize
首先,我们要用到NLTK库,先导入NLTK库及其相关模块。其中,pos_tag用于进行词性标注,word_tokenize用于对文本进行分词。
「下载NLTK数据:」
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
下载NLTK所需的数据,其中 'punkt' 是用于分词的数据,'averaged_perceptron_tagger' 是用于词性标注的数据。
「输入文本:」
text="Naturallanguageprocessingisafascinatingfield."
这里提供要进行词性标注的文本。
「分词:」
words=word_tokenize(text)
使用 word_tokenize 对文本进行分词,将文本拆分成单词。
「词性标注:」
pos_tags=pos_tag(words)
使用 pos_tag 对分词后的单词进行词性标注,得到每个单词及其对应的词性标签。
「打印结果:」
print("原始文本:",text)
print("词性标注结果:",pos_tags)
打印原始文本和词性标注的结果。
这样,就完成了一个简单的词性标注任务,得到了输入文本中每个单词的词性标签。NLTK中的 pos_tag 方法使用的是基于感知器的平均模型,它在处理一般文本时效果比较好。这个例子演示了NLTK库如何帮助我们进行自然语言处理中的基本任务。
屏幕截图 2023-11-29 142513.png拓展一下这里,得出的结果比较抽象,如果我们想要它变成我们能看懂的样子,应该怎么做呢?
我们可以将NLTK中的词性标签映射到更常见的词性名称:
importnltk
fromnltkimportpos_tag
fromnltk.tokenizeimportword_tokenize
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
defsimplify_pos_tag(tag):
iftag.startswith('N'):
return'Noun'
eliftag.startswith('V'):
return'Verb'
eliftag.startswith('R'):
return'Adverb'
eliftag.startswith('J'):
return'Adjective'
else:
return'Other'
#输入文本
text="Naturallanguageprocessingisafascinatingfield."
#分词
words=word_tokenize(text)
#词性标注
pos_tags=pos_tag(words)
#简化词性标签
simplified_pos_tags=[(word,simplify_pos_tag(tag))forword,taginpos_tags]
#打印结果
print("原始文本:",text)
print("词性标注结果:",simplified_pos_tags)
屏幕截图 2023-11-29 144024.png现在得出的词性标注我们就能看懂了,在这个例子中,我们定义了一个简化词性标签的函数 simplify_pos_tag,将NLTK的词性标签映射到更通用的词性名称。这样,最终的输出结果更容易理解。
「Adjective 形容词」
「Noun 名词」
「Verb 动词」
「Other 其他」
三、命名实体识别:发现文本中的重要实体命名实体识别是NLP中的关键任务,它涉及在文本中识别并分类命名实体,如人名、地名、组织机构等。
使用 spaCy 库实现命名实体识别在Python中,我们可以使用NLTK库或spaCy库来进行命名实体识别(Named Entity Recognition,简称NER)。下面我们使用spaCy库进行简单的命名实体识别。
首先,确保已经安装了spaCy库:
!pipinstallspacy
然后,下载并安装英语模型:
python-mspacydownloaden_core_web_sm
现在,我们可以使用以下代码进行命名实体识别:
importspacy
#加载英语模型
nlp=spacy.load("en_core_web_sm")
#输入文本
text="AppleInc.wasfoundedbySteveJobsandSteveWozniakin1976.ItisheadquarteredinCupertino,California."
#处理文本
doc=nlp(text)
#打印命名实体
print("原始文本:",text)
print("命名实体识别结果:")
forentindoc.ents:
print(f"{ent.text}-{ent.label_}")
屏幕截图 2023-11-29 153401.png屏幕截图 2023-11-29 153414.png这样我们就得出结果,这个例子中,命名实体识别结果包括公司名("Apple Inc.")、人名("Steve Jobs"和"Steve Wozniak")、日期("1976")等。
拓展一下ORG:组织PERSON:人名DATE:日期GPE:地点(国家、城市等)如果对这些标签不太熟悉,可以查阅spaCy的文档以获取更多信息。
另外,为了更好地展示和解释结果,可以将结果中的标签转换为更常见的术语,例如:
ORG 转为 "组织"PERSON 转为 "人名"DATE 转为 "日期"GPE 转为 "地点"下面是转换标签的代码:
importspacy
#加载英语模型
nlp=spacy.load("en_core_web_sm")
#输入文本
text="AppleInc.wasfoundedbySteveJobsandSteveWozniakin1976.ItisheadquarteredinCupertino,California."
#处理文本
doc=nlp(text)
#转换标签为更常见的术语
defconvert_label(label):
iflabel=="ORG":
return"组织"
eliflabel=="PERSON":
return"人名"
eliflabel=="DATE":
return"日期"
eliflabel=="GPE":
return"地点"
else:
returnlabel
#打印命名实体(转换后的标签)
print("原始文本:",text)
print("命名实体识别结果:")
forentindoc.ents:
converted_label=convert_label(ent.label_)
print(f"{ent.text}-{converted_label}")
这样,输出中的命名实体标签就以更常见的术语呈现了。
结语那么我们今天的内容就结束啦,欢迎各路大神在评论区讨论~~
点赞收藏不迷路,咱们下期再见ヾ( ̄▽ ̄)ByeBye~
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线