自然言語処理におけるトークン化
公開: 2020-12-01テキストデータを処理する場合、最も基本的な手順はテキストをトークン化することです。 「トークン」は、個々の単語、文、または任意の最小単位と見なすことができます。 したがって、文を別々のユニットに分割することは、トークン化に他なりません。
このチュートリアルを終了するまでに、次の知識が身に付きます。
- トークン化とは
- さまざまなタイプのトークン化
- トークン化するさまざまな方法
トークン化は、NLPパイプラインの最も基本的なステップです。
しかし、それはなぜですか?
これらの単語またはトークンは、後でコンピューターが理解して理解できるように数値に変換されます。 これらのトークンは、「ベクトル化」の方法によってクリーンアップされ、前処理されてから数値に変換されます。 これらのベクトルは、機械学習アルゴリズムとニューラルネットワークに送ることができます。
トークン化は、単語レベルだけでなく、文レベルでもかまいません。 つまり、テキストは、単語をトークンとして、または文をトークンとしてトークン化することができます。 トークン化を実行するいくつかの方法について説明しましょう。

目次
Python Split()
Pythonのsplit()関数は、言及された文字で分割されたトークンのリストを返します。 デフォルトでは、単語をスペースで分割します。
単語のトークン化
Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPタスクに不可欠です。」 トークン=Mystr.split() |
#出力: >> [ 'This' 、 'is' 、 'a' 、 'tokenization' 、 'tutorial。' 、 '私たち' 、 'は' 、 '学習' 、 '異なる' 、 'トークン化' 、 'メソッド、' 、 'および' 、 '方法?' 、 'トークン化' 、 'is' 、 'essential' 、 'in' 、 'NLP' 、 'tasks。' ] |
文のトークン化
区切り文字を「。」として渡すことにより、同じテキストを文に分割できます。
Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPタスクに不可欠です。」 トークン=Mystr.split( “。” ) |
#出力: >> [ 'これはトークン化のチュートリアルです' 、 'さまざまなトークン化の方法と方法を学習していますか? トークン化はNLPタスクに不可欠です' 、 ” ] |
これは単純明快に見えますが、多くの欠陥があります。 そして、気づいたら、最後の「。」の後に分割されます。 同じように。 そして、それは「?」を考慮しません。 次の文の指標として、「。」という1文字しか使用しないためです。
実際のシナリオのテキストデータは非常に汚れており、単語や文章にうまく入れられていません。 大量のガベージテキストが存在する可能性があるため、この方法でトークン化するのは非常に困難です。 したがって、トークン化のより優れた、より最適化された方法に進みましょう。
必読:知っておくべきディープラーニングテクニックトップ10
正規表現
正規表現(RegEx)は、文字のパターンと照合するために使用される文字のシーケンスです。 正規表現を使用して特定のパターン、単語、または文字を検索し、それらを置き換えたり、その他の操作を実行したりします。 Pythonには、 RegExの操作に使用されるモジュールreがあります。 reを使用してテキストをトークン化する方法を見てみましょう。
単語のトークン化
Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 トークン=re.findall( “ [\ w'] +” 、Mystr) |
#出力: >> [ 'This' 、 'is' 、 'a' 、 'tokenization' 、 'tutorial' 、 'We' 、 'are' 、 'learning' 、 'different' 、 'tokenization' 、 'methods' 、 'and' 、 'ways' 、 'トークン化' 、 'is' 、 'essential' 、 'in' 、 'NLP' 、 'tasks' ] |
それで、ここで何が起こったのですか?
re.findall()関数は、それに一致するすべてのシーケンスと一致し、それらをリストに格納します。 「[\w]+」という表現は、アルファベット、数字、アンダースコア(「_」)など、任意の文字を意味します。 「+」記号は、パターンのすべての出現を意味します。 したがって、基本的には、すべての文字をスキャンし、アンダースコア以外の空白またはその他の特殊文字にヒットすると、それらを1つのトークンとしてリストに入れます。
「NLP」という単語は1つの単語ですが、アポストロフィのために正規表現で「NLP」と「s」に分割されていることに注意してください。
文のトークン化
Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 Tokens = re.compile( '[。!?]' ).split(Mystr) |
#出力: >> [ 'これはトークン化のチュートリアルです' 、 'さまざまなトークン化の方法と方法を学習しています' 、 'トークン化はNLPタスクに不可欠です。 ] |
ここで、複数の分割文字を1つの条件に結合し、re.split関数を呼び出しました。 したがって、これら3つの文字のいずれかに当たると、別の文として扱われます。 これは、分割する複数の文字を渡すことができないpython分割関数に対するRegExの利点です。
また読む:自然言語処理のアプリケーション
NLTKトークナイザー
Natural Language Toolkit(NLTK)は、NLPタスクを処理するためのPythonライブラリです。 NLTKは、完全なNLPパイプラインの特定のプロセス用に作成された組み込みの関数とモジュールで構成されています。 NLTKがトークン化を処理する方法を見てみましょう。
単語のトークン化
NLTKには、トークン化タスクを処理するための別個のモジュールNLTK.tokenizeがあります。 単語のトークン化の場合、それを構成するメソッドの1つはword_tokenizeです。
nltk.tokenizeからimportword_tokenize _ Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 word_tokenize(Mystr) |
#出力: >> [ 'This' 、 'is' 、 'a' 、 'tokenization' 、 'tutorial' 、 '。' 、 'we' 、 'are' 、 'learning' 、 'different' 、 'tokenization' 、 'methods' 、 '、' 、 'and' 、 'ways' 、 '?' 、 'トークン化' 、 'is' 、 'essential' 、 'in' 、 'NLP' 、 'tasks' 、 '。' ] |
word_tokenizeは句読点を個別のトークンと見なしていることに注意してください。 これを防ぐには、この手順の前にすべての句読点と特殊文字を削除する必要があります。
文のトークン化
nltk.tokenizeからインポートsent_tokenize Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 send_tokenize(Mystr) |

#出力: >>[ 'これはトークン化のチュートリアルです。' 、 「私たちはさまざまなトークン化の方法と方法を学んでいますか?」 、 「トークン化はNLPタスクに不可欠です。」 ] |
SpaCyトークナイザー
SpaCyは、おそらくNLPタスク用の最も高度なライブラリの1つです。 これは、ほぼ50の言語のサポートで構成されています。 したがって、最初のステップは英語のコアをダウンロードすることです。 次に、トークナイザー、タガー、パーサー、NER、および単語ベクトルをロードする英語モジュールをインポートする必要があります。
単語のトークン化
spacy.lang.enから英語をインポート nlp = English() 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' 、 '?' 、 'トークン化' 、 'is' 、 'essential' 、 'in' 、 'NLP' 、 "'s" 、 'tasks' 、 '。 ' ] |
ここで、MyStrを渡して関数nlpを呼び出すと、そのための単語トークンが作成されます。 次に、それらにインデックスを付けて、別のリストに保存します。
文のトークン化
spacy.lang.enから英語をインポート nlp = English() send_tokenizer = nlp.create_pipe( 'sentencizer' ) nlp.add_pipe(sent_tokenizer) Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 my_doc = nlp(Mystr) 送信済み=[] doc.sentsで送信された場合: Sents.append(sent.text) 送信済み |
#出力: >>[ 'これはトークン化のチュートリアルです。' 、 「私たちはさまざまなトークン化の方法と方法を学んでいますか?」 、 「トークン化はNLPのタスクに不可欠です。」 ] |
文のトークン化の場合は、creat_pipeメソッドを呼び出して、文のトークンを作成するセンテンサイザーコンポーネントを作成します。 次に、パイプラインをnlpオブジェクトに追加します。 テキスト文字列をnlpオブジェクトに渡すと、今回はそのための文トークンが作成されます。 これで、前の例と同じ方法でリストに追加できます。
Kerasトークン化
Kerasは、現在最も好まれているディープラーニングフレームワークの1つです。 Kerasは、テキスト処理タスク専用のクラスkeras.preprocessing.textも提供しています。 このクラスには、テキストから単語レベルのトークンを作成するtext_to_word_sequence関数があります。 簡単に見てみましょう。
keras.preprocessing.textからimporttext_to_word_sequence _ Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 トークン=text_to_word_sequence(Mystr) トークン |
#出力: >> [ 'this' 、 'is' 、 'a' 、 'tokenization' 、 'tutorial' 、 'we' 、 'are' 、 'learning' 、 'different' 、 'tokenization' 、 'methods' 、 'and' 、 'ways' 、 'tokenization' 、 'is' 、 'essential' 、 'in' 、 "nlp's" 、 'tasks' ] |
「NLP」という単語を単一のトークンとして扱っていることに注意してください。 さらに、このkerasトークナイザーは、追加のボーナスであるすべてのトークンを小文字にしました。
Gensimトークナイザー
Gensimは、NLPベースのタスクとトピックモデリングを処理するためのもう1つの人気のあるライブラリです。 クラスgensim.utilsは、トークン化タスクに使用できるtokenizeメソッドを提供します。

単語のトークン化
gensim.utilsからimporttokenize _ Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 list(tokenize(Mystr)) |
#出力: >> [ 'This' 、 'is' 、 'a' 、 'tokenization' 、 'tutorial' 、 'We' 、 'are' 、 'learning' 、 'different' 、 'tokenization' 、 'methods' 、 'and' 、 'ways' 、 'トークン化' 、 'is' 、 'essential' 、 'in' 、 'NLP' 、 's' 、 'tasks' ] |
文のトークン化
文のトークン化には、 gensim.summarization.textcleanerクラスのsplit_sentencesメソッドを使用します。
gensim.summarization.textcleanerからimportsplit_sentences _ Mystr= "これはトークン化のチュートリアルです。 さまざまなトークン化の方法と方法を学んでいますか? トークン化はNLPのタスクに不可欠です。」 トークン=split_sentences( Mystr ) トークン |
#出力: >>[ 'これはトークン化のチュートリアルです。' 、 「私たちはさまざまなトークン化の方法と方法を学んでいますか?」 、 「トークン化はNLPのタスクに不可欠です。」 ] |
行く前に
このチュートリアルでは、アプリケーションに基づいてテキストデータをトークン化するさまざまな方法について説明しました。 これはNLPパイプラインの重要なステップですが、トークン化に進む前にデータをクリーンアップする必要があります。
機械学習とAIについて詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのPGディプロマをご覧ください。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題を提供します。 IIIT-B卒業生のステータス、5つ以上の実践的な実践的なキャップストーンプロジェクト、トップ企業との雇用支援。