猿でもわかるAIプログラミングシリーズ 🐵💻 感情分析AI：文章から気分を判定しよう




## 1. はじめに：テキストから「気持ち」を読み取るってどういうこと？

日々のチャット、レビュー、アンケート、SNS——現代のビジネスやプロダクトは「文章」と密接に関わっています。では、その中に込められた「感情」を自動的に読み取れたら、何ができるでしょう？

* 顧客の満足度をリアルタイムに把握できる
* 社内のフィードバックを定量化して分析できる
* ソーシャルリスニングでブランドの印象をモニタリングできる

本記事では、**簡単なPythonコードとオープンソースライブラリだけで、感情分析のAIを構築する方法**を丁寧に紹介します。「感情分析って聞いたことはあるけど、実際どうやってやるの？」という方に向けて、実践的かつ分かりやすく解説していきます！

---

## 2. 感情分析とは？技術の概要

### ✔ 感情分析（Sentiment Analysis）とは

感情分析は、自然言語処理（NLP）のタスクの一つで、**テキストがポジティブ・ネガティブ・中立のどれかを分類する手法**です。

主なアプローチには以下のようなものがあります：

| アプローチ     | 説明                | メリット・デメリット         |
| --------- | ----------------- | ------------------ |
| ルールベース    | キーワード辞書やスコアを使って分類 | 実装が簡単／精度に限界あり      |
| 機械学習      | 教師あり学習で分類器を学習     | 精度が高いが、学習データが必要    |
| ディープラーニング | BERTなどの事前学習モデルを活用 | 高精度だが、重くチューニングが難しい |

今回のチュートリアルでは、\*\*scikit-learnを使ったシンプルな機械学習モデル（ロジスティック回帰）\*\*を使って、感情分析を体験してみます。

---

## 3. 実装してみよう：感情分析AIの構築手順

### 📦 使用ライブラリ

```bash
pip install pandas scikit-learn matplotlib
```

### 🧪 ステップ1：データセットの準備

今回は、英語の映画レビューのサンプルを使います（簡略化のため、10件に絞っています）。

```python
import pandas as pd

data = [
    ("I loved this movie, it was fantastic!", "positive"),
    ("This film was terrible and boring", "negative"),
    ("Absolutely wonderful acting!", "positive"),
    ("Worst movie I've ever seen", "negative"),
    ("Not bad, could be better", "neutral"),
    ("I enjoyed every moment of it", "positive"),
    ("The plot was weak and uninteresting", "negative"),
    ("It’s okay, not great but not terrible", "neutral"),
    ("Brilliant direction and screenplay", "positive"),
    ("I wouldn't recommend this to anyone", "negative"),
]

df = pd.DataFrame(data, columns=["text", "label"])
```

### 🧹 ステップ2：前処理とベクトル化

```python
from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(df["text"])
```

### 🤖 ステップ3：モデルの訓練とテスト

```python
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

y = df["label"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
```

### 📈 出力例（例）

```
              precision    recall  f1-score   support

    negative       1.00      1.00      1.00         1
     neutral       1.00      1.00      1.00         1
    positive       1.00      1.00      1.00         1
```

---

## 4. 現場で役立つTipsとハマりがちな落とし穴

### 💡 実務で使うときのポイント

* **データの偏りに注意**：ポジティブばかりだとモデルが偏る
* **表記ゆれ対策**："good"と"Good"、"gr8"などを正規化する工夫が必要
* **辞書ベースとの併用も◎**：ルールで簡単に弾けるものは先に処理

### 🐛 よくあるエラーと対処

| 問題             | 対処方法                 |
| -------------- | -------------------- |
| 精度が出ない         | データの質を見直す、前処理を改善     |
| 学習が終わらない       | 特徴量数の削減、max\_iterの増加 |
| Neutral判定が多すぎる | 中立データが多すぎる → バランス調整  |

---

## 5. 応用編：日本語に対応するには？

英語では`CountVectorizer`が便利ですが、日本語では形態素解析が必要です。
以下のツールを組み合わせて日本語にも対応できます：

| ツール                       | 用途                     |
| ------------------------- | ---------------------- |
| MeCab + unidic            | 日本語の分かち書き              |
| janome                    | Pythonで使える軽量な日本語形態素解析器 |
| transformers + BERT日本語モデル | 精度重視のアプローチ             |

例：日本語のBERTモデルを使うときは以下のようになります（transformers使用）：

```python
from transformers import pipeline

classifier = pipeline("sentiment-analysis", model="daigo/bert-base-japanese-sentiment")
result = classifier("今日はとても楽しかったです！")
print(result)
```

```
[{'label': 'ポジティブ', 'score': 0.99}]
```

---

## 6. まとめ：感情分析AIでできること・できないこと

### ✅ メリット

* テキストの「感情」を自動で読み取れる
* カスタマーサポート・SNS・レビュー分析に活用可能
* 軽量モデルでも業務で十分使えるシーンあり

### ❌ 注意点

* 微妙なニュアンス（皮肉など）の理解はまだ難しい
* 感情のラベル設計に主観が入りやすい
* 文脈が長い・複雑だと誤判定しやすい

### 🔮 今後の展望

* ChatGPTやClaudeなどのLLMと組み合わせたハイブリッド型分析
* 組織内チャットや会議議事録のリアルタイム感情可視化
* フィードバック→施策改善の自動ループ構築

---

## 📌 さいごに

「文章の気分を読む」なんて一見ふわっとしたテーマですが、実際に手を動かしてみると、**ロジックと工夫次第でかなり実用的なものが作れる**ことが分かったと思います。

ぜひこの記事をきっかけに、自社のフィードバック分析やサービスのUX改善に感情分析AIを取り入れてみてください。きっと、気づきのある体験が得られるはずです！

---

🧠 **次回予告**：
「天気予報AIを作ってみた（過去データ使用）」〜実務に使えるテキスト分類モデル構築〜もお楽しみに！