Frqux’s AI laboratory

AIの技術が進化する今日

自然言語処理AI学習時の前処理について

1.自然言語処理の前処理

自然言語処理では、文章データの前処理の有無や品質によって結果が大きく変わってくるんですよね。

文章データを使ったAIの学習や、テキストデータを扱ったお仕事をする場合に参考になるよう要点をまとめて説明します。


正規化

テキストデータの前処理には正規化があります。

ここでいう正規化とは、簡単に言うと正しい形に文字をそろえることです。

例えば、以下のような英文があったとします。

  • I am a cat.
  • i am a cat.
  • I AM A CAT.

これらはすべて「私は猫です。」という意味の英文ですが、これらをそのままAIの学習に使ってしまうと精度が下がる可能性があります。

なぜなら、翻訳のAIなどを見てもわかる通り、大文字と小文字の使い分けができているものがほとんどだと思うのですが、この大文字と小文字の区別も学習しています。

なので、正規化を行い文字の形をそろえる必要があるんですね。
次に、文字正規化の種類を4つ紹介します。

NFD

Normalization Form Canonical Decomposition(NFD)です。

正準等価性によって文字を分解する方法です。


NFC

Normalization Form Canonical Composition(NFC)です。

正準等価性によって文字を分解し、その後合成する方法です。


NFKD

Normalization Form Compatibility Decomposition(NFKD)です。

互換等価性によって文字を分解する方法です。


NFKC

Normalization Form Compatibility Composition(NFKC)です。

互換等価性によって文字を分解し、その後正準等価性によって合成する方法です。


2.Pythonで正規化を行う方法

「正準等価性って何?」「互換等価性ってなんだよ」という方でも簡単にテキストデータを正規化することができるライブラリがあるのでそれを使いましょう。

unicodedataモジュール

unicodedataというモジュールを使えば、簡単に正規化ができます。

使い方は簡単で、Python標準モジュールのためインストールする必要がありません。
Pythonでインポートして使うだけです。

import unicodedata

text = "日曜日を英語でいうとSunday"

# NFDを使いたい場合。
unicodedata.normalize("NFD", text)

# NFCを使いたい場合。
unicodedata.normalize("NFC", text)

# NFKDを使いたい場合。
unicodedata.normalize("NFKD", text)

# NFKCを使いたい場合。
unicodedata.normalize("NFKC", text)

unicodedata.normalize(form, unistr)のような形で記述すれば正規化が可能です。

公式Docmentは以下です。
unicodedata --- Unicode データベース — Python 3.11.4 ドキュメント


3.終わりに

近年開発が盛んになっている自然言語系のAIを学習する際に、学習データの正規化は欠かせません。

ご自分で簡単なAIを作ってみる場合でも、簡単にできますので正規化をやってみましょう。

では。


ps.久々の投稿で、はてな記法忘れてて焦った。