はじめに
自然言語処理(NLP:Natural Language Processing)は、コンピュータが人間の言葉を理解・処理する技術です。ChatGPTやClaudeなどの生成AIもNLPの技術が土台になっています。
僕がE資格の勉強をする中で「NLPは難しそう」という印象を持っていましたが、実際に実装してみると意外と取っつきやすい部分も多いです。この記事では、テキスト分類の基本的な実装を通じてNLPの入門を解説します。
自然言語処理の基本的な流れ
テキストデータを機械学習で扱うには、文字列を数値に変換するステップが必要です。基本的な流れは次のとおりです。
- テキストのクリーニング(不要な文字の除去)
- トークナイズ(単語に分割)
- ベクトル化(数値に変換)
- モデルで学習・予測
日本語テキストの前処理
日本語は英語と違い、単語間にスペースがないため、形態素解析が必要です。
pip install mecab-python3 unidic-lite
import MeCab
mecab = MeCab.Tagger()
def tokenize_japanese(text):
"""日本語テキストを単語リストに分割"""
node = mecab.parseToNode(text)
words = []
while node:
if node.feature.split(',')[0] not in ['BOS/EOS']:
words.append(node.surface)
node = node.next
return words
text = "機械学習は楽しいです"
print(tokenize_japanese(text))
# ['機械', '学習', 'は', '楽しい', 'です']
TF-IDFベクトル化
TF-IDFは文書中の単語の重要度を数値化する手法です。よく出てくる単語は重要度が低く、珍しい単語は高くなります。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# サンプルデータ(ポジティブ・ネガティブ分類)
texts = [
"この商品は素晴らしいです",
"品質がとても良い",
"最悪の商品でした",
"全然使えない",
"とても満足しています",
"二度と買わない"
]
labels = [1, 1, 0, 0, 1, 0] # 1=ポジティブ, 0=ネガティブ
# TF-IDFベクトル化
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(texts)
# 学習・予測
clf = LogisticRegression()
clf.fit(X, labels)
# 新しいテキストで予測
new_text = ["この商品は良かったです"]
new_vec = vectorizer.transform(new_text)
print(clf.predict(new_vec)) # [1]
Word2Vecで単語をベクトル化
TF-IDFは単語の出現頻度を見るだけですが、Word2Vecは単語の意味を考慮したベクトルを作ります。「犬」と「猫」は意味が近いため、似たベクトルになります。
from gensim.models import Word2Vec
# 単語リストのリスト
sentences = [
['機械', '学習', '楽しい'],
['深層', '学習', '難しい'],
['Python', '便利']
]
# Word2Vecの学習
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
# 単語ベクトルの取得
vector = model.wv['機械']
print(vector.shape) # (100,)
# 類似単語の検索
similar = model.wv.most_similar('学習')
print(similar)
BERTを使った高精度分類
近年のNLPで主流なのがTransformerベースのモデルです。日本語に対応したBERTモデルを使えば、高精度なテキスト分類が実現できます。
from transformers import BertJapaneseTokenizer, BertForSequenceClassification
import torch
# 日本語BERTのトークナイザー
tokenizer = BertJapaneseTokenizer.from_pretrained(
'cl-tohoku/bert-base-japanese'
)
# テキストのトークナイズ
text = "機械学習の勉強が楽しいです"
inputs = tokenizer(
text,
return_tensors='pt',
max_length=128,
truncation=True,
padding=True
)
print(inputs)
BERTはファインチューニング(事前学習済みモデルを特定タスクに合わせて再学習)することで、少ないデータでも高い精度が出ます。
NLPの主な応用例
- 感情分析:レビューや口コミのポジネガ判定
- 文書分類:メールのスパム判定、ニュースカテゴリ分類
- 固有表現抽出:人名・地名・組織名の抽出
- 機械翻訳:日英翻訳など
- 質問応答:ChatGPT・Claudeなどの基盤技術
まとめ
NLPの入門として押さえるべきポイントをまとめます。
- 日本語テキストは形態素解析(MeCab)で単語に分割する
- シンプルなタスクはTF-IDF + ロジスティック回帰から始める
- Word2Vecで単語の意味を考慮したベクトル化が可能
- 高精度を求めるならBERT系のモデルを使う
NLPは機械学習の中でも応用範囲が広く、ビジネスへの貢献度も高い分野です。まずはTF-IDFを使ったシンプルな分類から試してみてください。
📌 プログラミング・AI学習のおすすめスクール
- 資格と仕事に強い個人レッスン → 【Winスクール】プログラミング・AI講座

※本記事にはアフィリエイトリンクが含まれます。


コメント