NLPとは何か

自然言語処理(Natural Language Processing)は、人間の言語をコンピューターで理解・生成する技術です。ChatGPTの登場でNLPへの注目が急増し、エンジニアにとって必須知識となりつつあります。

テキスト前処理の基本

import re
import MeCab  # 日本語形態素解析
from collections import Counter

text = "機械学習を使った自然言語処理の入門記事です。"

# MeCabで形態素解析(日本語)
tagger = MeCab.Tagger()
node = tagger.parseToNode(text)

words = []
while node:
    if node.feature.split(',')[0] in ['名詞', '動詞', '形容詞']:
        words.append(node.surface)
    node = node.next

print(Counter(words).most_common(10))

文書のベクトル化

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
    "機械学習の入門記事",
    "自然言語処理の基礎",
    "ディープラーニングの応用"
]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)

TF-IDF:単語の重要度を文書全体での希少性で補正します。頻出する汎用語の重みを下げ、特徴的な語を際立たせます。

Word2Vec:意味をベクトルで表現

from gensim.models import Word2Vec

sentences = [["機械", "学習", "入門"],
             ["自然", "言語", "処理"],
             ["深層", "学習", "応用"]]

model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)

# 類似語検索
similar = model.wv.most_similar("機械")

Transformerとその後

技術 特徴
RNN/LSTM 系列データ処理(勾配消失問題あり)
Attention 重要な部分に注目する仕組み
Transformer Attention機構を全面採用
BERT 双方向学習・文脈理解
GPT 自己回帰型生成モデル

HuggingFace Transformersで実践

from transformers import pipeline

# 感情分析
sentiment = pipeline("sentiment-analysis",
    model="koheiduck/bert-japanese-finetuned-sentiment")
result = sentiment("この製品はとても素晴らしいです!")
print(result)  # [{'label': 'POSITIVE', 'score': 0.99}]

# テキスト生成
generator = pipeline("text-generation", model="gpt2")
text = generator("AIの未来は", max_length=50)

主な応用分野

  • 感情分析:レビュー・SNSの極性判定
  • 文書分類:スパム・カテゴリ分類
  • 機械翻訳:DeepL・Google翻訳の根幹技術
  • 情報抽出:固有表現認識(人名・地名・日付)
  • 質問応答:チャットボット・RAGシステム

LLMの活用が進む現代でも、前処理や基礎NLPの理解は効果的なプロンプト設計やRAG構築に不可欠です。