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

【DS検定対策】AIの「知識の源」!コーパス(Corpus)の重要性

AIが言葉を理解し、生成するためには、お手本となる膨大な文章データが必要です。単なるテキストの集まりを超えた「コーパス」の役割を学びましょう。

1. 【 問題 】

自然言語処理において、言語の法則や構造を抽出するために、実際の言語使用例を大量に集め、検索や分析ができるように構造化したデータベースを何と呼ぶでしょうか?

① 形態素
② コーパス(Corpus)
③ オントロジー
④ シソーラス


2. 【 解答 】

正解: ② コーパス(Corpus)

3. 整理:ただの「文章」と「コーパス」の違い

インターネット上の文章をただ集めただけでは、質の高いAIは育ちません。コーパスには「構造化」という重要な工程が含まれます。

【 コーパスを構成する要素 】

[ 1. 生テキスト(Raw Text) ]
小説、ニュース、SNS、論文など、実際に使われている文章。

[ 2. アノテーション(メタデータ) ]
★ ここが重要!
単語ごとに「品詞情報」を付与したり、文の「感情スコア」を付けたりして、コンピュータが処理しやすい情報を付け加えること。

--------------------------

代表的なコーパス:
・現代日本語書き言葉均衡コーパス(BCCWJ)
・Wikipediaのダンプデータ
・青空文庫のテキストデータ

4. コーパスの活用シーン

1. 辞書・文法作成: 言葉の使われ方を統計的に分析し、より自然な文法モデルを作ります。
2. LLMの学習: ChatGPTなどの大規模言語モデルも、Web上の巨大なコーパスを学習することで言語能力を獲得しています。
3. 翻訳精度向上: 対訳コーパス(日本語と英語が対になったデータ)により、翻訳AIを強化します。


5. DS検定形式:実戦4択クイズ

問:コーパスに品詞情報などの付随情報を追加する作業を一般に何と呼ぶか。

① クレンジング   ② アノテーション   ③ スクレイピング   ④ トークン化

【 正解: ② 】

解説: データに対して「ラベル」や「注釈」を付ける作業をアノテーションと呼びます。コーパスの価値は、このアノテーションの質と量で決まると言っても過言ではありません。


6. まとめ

DS検定において「言語を構造化したデータベース」「大量の使用例」という表現が出たら「コーパス」です。データベースエンジニアとしても、非構造化データを構造化データに変える「情報の宝庫」として覚えておきたい用語ですね!

PR

【Kaggle挑戦記】Digit Recognizer:画像認識にLightGBMで挑む

S4E11の「名前(Name)」というノイズとの戦いを経て、今回は心機一転、画像認識の登竜門である「Digit Recognizer(手書き数字認識)」に挑戦しました。 画像認識といえばディープラーニング(CNN)が定石ですが、まずは慣れ親しんだLightGBMで「どこまで通用するか」をデバッグします。

1. 戦略:画像を「784個の変数」と見なす

28x28ピクセルの画像データを、意味を持つ「形」として捉えるのではなく、0から255の数値が入った784個のカラムとして扱います。 Macのローカル環境(ターミナル)にて、以下の多クラス分類(0〜9)用パラメータで実行しました。

params = {
    'objective': 'multiclass',
    'num_class': 10,
    'metric': 'multi_logloss',
    'verbosity': -1,
    'boosting_type': 'gbdt',
    'learning_rate': 0.1
}

2. 実行結果:Macターミナルのログ

学習はスムーズに進み、検証データにおいて非常に高い精度をマークしました。

Training until validation scores don't improve for 50 rounds
Did not meet early stopping. Best iteration is:
[100] valid_0's multi_logloss: 0.0857917

--- Validation Accuracy: 0.97417 ---
--- Submission file created: submission_digit_lgb.csv ---

3. リーダーボードの結果

Kaggleへ提出した結果、最終的な正解率は以下の通りとなりました。

正解率:0.97139

画像認識の専用モデルを使わずとも、約97.1%という精度を叩き出すことができました。 これは「ピクセルごとの輝度値」だけでも、数字の特徴を捉えるには十分な情報量が含まれていることを示唆しています。

4. 考察:エンジニアとしての気づき

前回のS4E11では「データの中身(Name)を疑う」ことが鍵でしたが、今回は「純粋な数値のパターン」が勝負でした。

  • 特徴量の多さ: 784個の変数を同時に扱う負荷も、Macのローカル環境で軽快に処理できました。
  • 多クラス分類の挙動: 0か1かの二値分類とは異なり、10種類の確率を計算する「multiclass」の動きをログから確認できたのは収穫です。

97%を超えたここから先は、CNNを導入して「形や線のつながり」を学習させる領域になります。 しかし、エンジニアの「手癖」としてのLightGBMが、画像認識においてもここまで強力なベースラインになることを確認できた、実りある修行となりました。


次なる実戦「Playground Series S4E12」の開始、あるいは地質予測の新コンペへの参戦に向け、 この「数値の羅列をねじ伏せる感覚」を研ぎ澄ませておきたいと思います。



【Kaggle挑戦記】S4E11 #2:ノイズを削って精度を出す。名前(Name)削除の劇的ビフォーアフター

前回、予測の重要度ランキングで「Name(名前)」が1位という、エンジニアとして看過できない「仕様バグ」に近い状態に直面しました。 今回はこの不適切な依存関係を排除し、コードをリファクタリングして再挑戦した結果を報告します。

1. 実装:不要な依存関係を排除した「クリーン」なモデル

「名前で予測する」というハードコーディングに近い過学習を防ぐため、物理的にカラムをドロップしました。 また、コンペの締め切り後(After Deadline)でも確実に評価を通すため、型変換と出力を最適化した「修正版コード」を投入しました。

import pandas as pd
import lightgbm as lgb
from sklearn.preprocessing import LabelEncoder

# 1. データの読み込み
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

# 2. 前処理:ターゲットの数値化
le = LabelEncoder()
if train['Depression'].dtype == 'object':
    train['Depression'] = le.fit_transform(train['Depression'])

# 3. 特徴量の選択(「名前」を明示的にドロップ!)
drop_cols = ['id', 'Name']
X = train.drop(drop_cols + ['Depression'], axis=1)
y = train['Depression']
X_test = test.drop(drop_cols, axis=1)

# 4. カテゴリ変数の処理(LightGBM用)
cat_cols = X.select_dtypes(include=['object']).columns.tolist()
for col in cat_cols:
    X[col] = X[col].astype('category')
    X_test[col] = X_test[col].astype('category')

# 5. モデルの構築
params = {
    'objective': 'binary',
    'metric': 'binary_error',
    'verbosity': -1,
    'random_state': 42
}

model = lgb.LGBMClassifier(**params)
model.fit(X, y)

# 6. 予測と提出ファイルの作成
submission = pd.DataFrame({
    'id': test['id'],
    'Depression': model.predict(X_test)
})
submission['Depression'] = submission['Depression'].astype(int)
submission.to_csv('submission_final.csv', index=False)

2. コンソール出力:健全なランキングへの変遷

実行後、コンソールに表示されたランキングは、前回とは全く異なる「納得感」のある顔ぶれになりました。 可読性のために標準的なログスタイルで出力結果を記載します。

--- Submission file created successfully! ---
            feature  importance
2             City          494
12            Degree          388
4          Profession          359
1                Age          315
15  Financial Stress          224

3. スコア:ノイズを消して「実力」が向上

締め切り後(After Deadline)のLate Submissionですが、結果は意外なものでした。 名前を消したことで、むしろスコアが上昇したのです。

指標前回(Nameあり)今回(Nameなし)
Public Score 0.94008 0.94152 (↑)
Private Score 0.93868 0.93961 (↑)

4. 考察とまとめ

「名前」という強力なノイズがモデルを惑わせていたことが、スコアの向上によって証明されました。 不要なカラムを削除したことで、モデルが「City(都市)」や「Degree(学位)」といった、メンタルヘルスに真に影響を与えるコンテキストに集中できるようになった結果です。

「なぜ動くか分からないコード」を放置せず、違和感のある変数を削ぎ落とす。 バックエンドのデバッグと同じ姿勢で取り組むことが、Kaggleにおける精度向上にも直結することを実感した一戦でした。


Kaggleの履歴に「After Deadline」と「Error」のログが残ることは、試行錯誤の証。 次の「本物のコンペ」では、このデバッグの知見を最初からぶつけていきたいと思います。



【DS検定対策】言葉の「つながり」を可視化!共起分析とネットワーク図

特定の単語が「どの単語と一緒に使われやすいか」を分析することで、文章の背後にあるテーマや構造を浮き彫りにするのが共起分析です。

1. 【 問題 】

テキストマイニングにおいて、一つの文章や文の中に、複数の特定の単語が同時に出現する状態を「共起」と呼びます。この共起関係を統計的に分析し、図(ネットワーク図)などで可視化する手法を何と呼ぶでしょうか?

① センチメント分析
② 共起分析
③ 主成分分析
④ 対応分析(コレスポンデンス分析)


2. 【 解答 】

正解: ② 共起分析

3. 整理:「セットで現れる」ことに意味がある

単語の出現回数だけでは、「何について語られているか」の深い文脈は分かりません。共起分析をすることで、言葉のネットワークが見えてきます。

【 共起分析の可視化:共起ネットワーク 】

[ 図の読み方 ]
ノード(円):単語を表す。大きいほど出現頻度が高い。
エッジ(線):共起関係を表す。太いほど「セット」で使われる度合いが強い。

(例:スマートフォンのレビュー分析)
「バッテリー」──「持ち」:電池の寿命に関する話題
「カメラ」──「暗所」:夜景撮影に関する話題
--------------------------

活用例:
・アンケート自由記述から「不満の構造」を特定する。
・ニュース記事からトレンドワードの関連性を探る。

4. 共起の強さを測る指標

単に同時に出た回数だけでなく、以下の指標がよく使われます。
1. Jaccard(ジャカード)係数: 2つの単語がどれだけ「いつも一緒」にいるかの割合。DS検定でもよく問われる指標です。
2. Dice係数 / Simpson係数: 共起の度合いを測るための統計的指標。


5. DS検定形式:実戦4択クイズ

問:共起分析の結果を可視化した「共起ネットワーク図」において、単語間の結びつきの強さを表す線のことを何と呼ぶか。

① ノード   ② セントロイド   ③ エッジ   ④ クラスタ

【 正解: ③ 】

解説: 円(点)をノード、それらを結ぶ線をエッジと呼びます。共起分析では、このエッジが太いほど、その単語ペアに強い関連性があることを示します。


6. まとめ

DS検定において「単語の同時出現」「ネットワーク図による可視化」というキーワードが出たら「共起分析」です。頻度だけでは見落としてしまう「文脈」を捉えるための強力なツールとして覚えておきましょう!

【DS検定対策】言葉の裏の「感情」を読み解く!センチメント分析

テキストデータから「嬉しい」「悲しい」「不満」といった感情の傾向を抽出する。顧客の声をビジネスに活かすための必須技術が、センチメント分析です。

1. 【 問題 】

テキストマイニングにおいて、文章の中から書き手の主観的な感情や態(ポジティブ、ネガティブ、ニュートラルなど)を判定する手法を何と呼ぶでしょうか?

① 形態素解析
② センチメント分析(感情分析)
③ 構文解析
④ トピックモデル


2. 【 解答 】

正解: ② センチメント分析(感情分析)

3. 整理:どうやって「感情」を判定するのか?

センチメント分析には、大きく分けて「辞書ベース」と「機械学習ベース」の2つのアプローチがあります。

【 感情分析の仕組み 】

[ 1. 感情極性辞書による方法 ]
「美味しい」「速い」=ポジティブ (+1)
「壊れた」「遅い」=ネガティブ (-1)
といった辞書を用意し、文章内の単語の合計スコアで判定する。

[ 2. 機械学習による方法 ]
大量の「ポジティブな文章」と「ネガティブな文章」をAIに学習させ、新しい文章の傾向を予測させる。

--------------------------

活用例:
・新商品のTwitter(X)での評判調査
・コールセンターへの問い合わせ内容の自動仕分け
・アンケートの自由記述欄の満足度スコア化

4. 分析の落とし穴

1. 皮肉や二重否定: 「最高に最悪だ」のような皮肉や、「悪くない」といった表現は、単語レベルの辞書だけでは誤判定しやすいため、文脈の理解が求められます。
2. ドメイン(分野)依存: 映画のレビューでの「ヤバい」はポジティブかもしれませんが、医療データでの「ヤバい」は深刻なネガティブです。


5. DS検定形式:実戦4択クイズ

問:センチメント分析において、単語ごとにポジティブ・ネガティブの度合いを数値化したリストのことを何と呼ぶか。

① ストップワードリスト   ② 感情極性辞書   ③ 逆文書頻度   ④ コーパス

【 正解: ② 】

解説: 単語に「感情の極性(プラス・マイナス)」を持たせた辞書です。日本語では「日本語評価極性辞書」などが有名です。


6. まとめ

DS検定において「主観的な感情」「ポジネガ判定」というキーワードが出たら「センチメント分析」です。テキストデータの「量」だけでなく「質」を測るための手法として、しっかりマスターしておきましょう!