自然語言處理中的標記化

已發表: 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 文憑
了解更多