自然语言处理中的标记化

已发表: 2020-12-01

在处理文本数据时,最基本的步骤是对文本进行标记。 “令牌”可以被视为单个单词、句子或任何最小单位。 因此,将句子分成单独的单元只不过是 Tokenization。

在本教程结束时,您将掌握以下知识:

  • 什么是代币化
  • 不同类型的标记化
  • 标记化的不同方法

标记化是 NLP 管道中最基本的步骤。

但这是为什么呢?

这些单词或标记稍后会转换为数值,以便计算机可以理解并理解它。 这些令牌被清理、预处理,然后通过“向量化”的方法转换为数值。 然后可以将这些向量馈送到机器学习算法和神经网络。

标记化不仅可以是单词级别,还可以是句子级别。 也就是说,文本既可以用词作为标记,也可以用句子作为标记。 让我们讨论几种执行标记化的方法。

目录

Python 拆分()

Pythonsplit()函数返回被提到的字符分割的标记列表。 默认情况下,它按空格分割单词。

词标记化

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 任务中是必不可少的。”
令牌 = Mystr.split()

#输出:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial.' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods,' , 'and' , 'ways?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks.' ]

句子标记化

通过将分隔符传递为“.”,可以将相同的文本拆分为句子。

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 任务中是必不可少的。”

令牌 = Mystr.split( “.” )

#输出:
>> [ '这是一个标记化教程' , '我们正在学习不同的标记化方法,方法是什么? 标记化在 NLP 任务中是必不可少的 ]

虽然这看起来简单明了,但它有很多缺陷。 如果你注意到,它会在最后一个“。”之后分裂。 也是。 它不考虑“?” 作为下一个句子的指示符,因为它只需要一个字符,即“.”。

现实生活场景中的文本数据非常脏,不能很好地放在单词和句子中。 可能会出现很多垃圾文本,这将使您很难以这种方式进行标记。 因此,让我们继续采用更好、更优化的标记化方式。

必读:你应该知道的 10 大深度学习技术

正则表达式

正则表达式 (RegEx) 是用于匹配字符模式的字符序列。 我们使用 RegEx 查找某些模式、单词或字符来替换它们或对它们进行任何其他操作。 Python 具有用于处理 RegEx的模块re让我们看看如何使用re标记文本

词标记化

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”

令牌 = re.findall( “[\w']+” , Mystr)

#输出:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , '方式' , '标记化' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks' ]

那么,这里发生了什么?

re.findall ()函数匹配与其匹配的所有序列并将它们存储在列表中。 表达式“[\w]+”表示任何字符——无论是字母、数字还是下划线(“_”)。 “+”符号表示模式的所有出现。 所以本质上它会扫描所有字符并将它们作为一个标记放在列表中,当它遇到空格或除下划线之外的任何其他特殊字符时。

请注意,“NLP's”这个词是一个词,但是我们的正则表达式因为撇号而将它分成“NLP”和“s”。

句子标记化

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”

令牌 = re.compile( '[.!?]' ).split(Mystr)

#输出:
>> [ '这是一个标记化教程' , '我们正在学习不同的标记化方法和方式' , '标记化在 NLP 任务中是必不可少的。' ]

现在,这里我们将多个拆分字符组合成一个条件并调用 re.split 函数。 因此,当它碰到这三个字符中的任何一个时,它都会将其视为一个单独的句子。 这是 RegEx 相对于 python split 函数的一个优势,您不能传递多个字符来拆分。

另请阅读:自然语言处理的应用

NLTK 分词器

自然语言工具包 (NLTK) 是一个专门用于处理 NLP 任务的 Python 库。 NLTK 由内置的功能和模块组成,这些功能和模块是为完整 NLP 管道的某些特定过程而制作的。 让我们看看 NLTK 如何处理标记化。

词标记化

NLTK 有一个单独的模块 NLTK.tokenize 来处理标记化任务。 对于词标记化,它包含的方法之一是 word_tokenize。

nltk.tokenize导入word_tokenize

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”
word_tokenize(Mystr)

#输出:
>>[ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , '.' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , ',' , 'and' , 'ways' , '?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , 'tasks' , '.' ]

请注意word_tokenize将标点符号视为单独的标记。 为了防止这种情况发生,我们需要在此步骤之前删除所有标点符号和特殊字符。

句子标记化

nltk.tokenize导入sent_tokenize

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”
sent_tokenize(Mystr)

#输出:
>> [ '这是一个标记化教程。' “我们正在学习不同的标记化方法和方式?” , '标记化在 NLP 任务中是必不可少的。' ]

SpaCy 分词器

SpaCy 可能是用于 NLP 任务的最先进的库之一。 它包括对近 50 种语言的支持。 因此,第一步是下载英语核心。 接下来,我们需要导入加载分词器、标注器、解析器、NER 和词向量的英文模块。

词标记化

spacy.lang.en导入英语

nlp = 英语()
Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”
my_doc = nlp(Mystr)

代币 = []
对于my_doc令牌
Tokens.append(token.text)
代币

#输出:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , '.' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , ',' , 'and' , 'ways' , '?' , 'Tokenization' , 'is' , 'essential' , 'in' , 'NLP' , "'s" , 'tasks' , '.' ]

在这里,当我们调用传递了 MyStr 的函数 nlp 时,它会为它创建单词 tokens。 然后我们对它们进行索引并将它们存储在一个单独的列表中。

句子标记化

spacy.lang.en导入英语

nlp = 英语()
sent_tokenizer = nlp.create_pipe( 'sentencizer' )
nlp.add_pipe(sent_tokenizer)

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”

my_doc = nlp(Mystr)

发送 = []
doc.sents发送
已发送.append(sent.text)
已发送

#输出:
>> [ '这是一个标记化教程。' “我们正在学习不同的标记化方法和方式?” , “标记化在 NLP 的任务中是必不可少的。” ]

对于句子标记化,调用 creat_pipe 方法来创建用于创建句子标记的 sentencizer 组件。 然后我们将管道添加到 nlp 对象。 当我们将文本字符串传递给 nlp 对象时,它会为它创建句子标记。 现在可以按照与前面示例中相同的方式将它们添加到列表中。

Keras 标记化

Keras 是目前最受欢迎的深度学习框架之一。 Keras 还为文本处理任务提供了一个专用类——keras.preprocessing.text。 此类具有text_to_word_sequence函数,该函数从文本创建单词级标记。 让我们快速浏览一下。

keras.preprocessing.text导入text_to_word_sequence

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”
令牌 = text_to_word_sequence(Mystr)
代币

#输出:
>> [ 'this' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'we' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , '方式' , 'tokenization' , 'is' , 'essential' , 'in' , “nlp's” , 'tasks' ]

请注意,它将“NLP's”一词视为单个标记。 另外,这个 keras 标记器将所有标记小写,这是一个额外的好处。

Gensim 分词器

Gensim 是另一个流行的库,用于处理基于 NLP 的任务和主题建模。 gensim.utils 类提供了一个 tokenize 方法,可用于我们的标记化任务。

词标记化

gensim.utils导入标记化
Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”

列表(标记化(Mystr))

#输出:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'different' , 'tokenization' , 'methods' , 'and' , '方式' , '标记化' , 'is' , 'essential' , 'in' , 'NLP' , 's' , 'tasks' ]

句子标记化

对于句子标记化,我们使用gensim.summarization.textcleaner类中的 split_sentences 方法。

gensim.summarization.textcleaner导入split_sentences

Mystr = “这是一个标记化教程。 我们正在学习不同的标记化方法和方法? 标记化在 NLP 的任务中是必不可少的。”

令牌 = split_sentences( Mystr )
代币

#输出:
>> [ '这是一个标记化教程。' “我们正在学习不同的标记化方法和方式?” , “标记化在 NLP 的任务中是必不可少的。” ]

在你走之前

在本教程中,我们讨论了基于应用程序标记文本数据的各种方法。 这是 NLP 管道的重要步骤,但在进行标记化之前有必要清理数据。

如果您有兴趣了解有关机器学习和人工智能的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭,该文凭专为在职专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业, IIIT-B 校友身份、5 个以上实用的实践顶点项目和顶级公司的工作协助。

引领人工智能驱动的技术革命

机器学习和人工智能的 PG 文凭
了解更多