忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【自然言語処理】テキストの前処理における「正規化(Normalization)」の基本と手法

自然言語処理(NLP)において、機械がテキストデータを正確に理解・学習するためには、入力される文章の表記ゆれを綺麗に整える「正規化(Normalization)」という前処理が極めて重要です。今回は、正規化の基本となる代表的な処理と、その他の重要な前処理の全体像を整理します。

1. 【 概要 】

正規化とは、人間にとっては同じ意味であっても表記が異なるテキスト(例:「Apple」「apple」「Apple」など)を、統一された一定のルールに従って綺麗に整えるプロセスです。

この前処理を徹底することで、不要な語彙の重複を防ぎ、機械学習モデルが単語のパターンを効率よく学習できるようになります。


2. 【 基本手順(代表的な5つの正規化処理) 】

(1) 大文字・小文字の統一:すべてのテキストを小文字(または大文字)に変換する。
(2) 全角・半角の統一:全角の英数字やカタカナを半角(またはその逆)に統一する。
(3) 句読点・特殊文字の削除:分析のノイズになる「、」「。」「!」「?」などを取り除く。
(4) 数字の削除(または置換):価格や個数などの数字を取り除く、または特定のプレースホルダーに置き換える。
(5) 固有表現の正規化・抽出:電話番号や郵便番号、日付などを特定のカテゴリー(タグ)に割り振る。

3. 整理:各正規化処理の具体的な役割

正規化における5つの基本処理が、なぜ必要なのかを詳しく見ていきましょう。

【 各プロセスの具体的な仕組み 】

・処理(1):大文字・小文字の統一
「Python」と「python」は人間には同じ意味ですが、コンピュータは別々の単語として認識してしまいます。すべて小文字に統一することで語彙の爆発を防ぎます。

・処理(2):全角・半角の統一
日本語のテキストでは、全角の「A」や「1」と、半角の「A」や「1」が混在しがちです。Unicode正規化(NFKCなど)を用いて一括で統一します。

・処理(3):句読点・特殊文字の削除
「、」や「。」などの句読点や記号は、文書の意味理解においてノイズになることが多いため、正規表現などを用いてあらかじめ取り除きます。

・処理(4):数字の処理
具体的な数字(「100円」「200人」など)が多すぎるとモデルが過学習を起こしやすくなります。数字を一律で「0」や特定の記号に置換することがよく行われます。

・処理(5):固有表現の正規化(マスキング)
「090-XXXX-YYYY」のような電話番号や、「〒100-0001」のような郵便番号をそのまま残すと情報が分散します。「[PHONE]」「[ZIPCODE]」のような特殊なカテゴリーに置き換えて抽象化します。

4. 関連して押さえたい「その他の重要なテキスト前処理」

正規化の前後で行われる、自然言語処理に不可欠なその他の代表的な前処理の流れを確認しておきましょう。

・トークン化(Tokenization)
文章を意味のある最小単位(単語や形態素)に分割する処理です。日本語の場合はMeCabなどの形態素解析器を使って単語に切り分けます。

・ストップワード(Stop words)の除去
「は」「の」「に」「the」「is」など、文章の構造には不可欠ですが意味を持たない高頻度語を取り除きます。

・ステミング(Stemming)と表題化(Lemmatization)
「running」「runs」「ran」のような変化形を、原形である「run」に変換して単語のバリエーションをまとめます。


5. 補足:Pythonでの実装コード例

# 1. 簡易的な大文字変換と全角半角の正規化(unicodedataを使用)
import unicodedata
import re

def normalize_text(text):
# NFKC正規化で全角半角を統一
text = unicodedata.normalize('NFKC', text)
# 小文字に変換
text = text.lower()
# 句読点の削除
text = re.sub(r'[、。!?「」]', '', text)
# 数字を「0」に置換
text = re.sub(r'\d+', '0', text)
return text

sample_text = "Appleの価格は1000円です!"
print(normalize_text(sample_text))
# 出力イメージ: appleの価格は0円です

6. まとめ

自然言語処理における正規化は、「大文字小文字の統一」「全角半角の整理」「不要な記号・数字の削除」「固有表現の抽象化」など、テキストのノイズを取り除くための必須のステップです。
これらの前処理を丁寧に設計・実行することで、機械学習モデルの精度と安定性を劇的に高めることができます!


PR