はじめに
こんにちは、しゅんです。
今回は、FHIBEデータセットの分析と可視化について、特にApple のembedding-atlasを使用してデータをどのように可視化できるかを紹介します。まず初めに、前回の記事で実行したコードを使って作成したグラフを紹介し、その結果をもとにデータの多様性や偏りを理解する方法について解説します。
前回の記事
グラフ
前回の記事で紹介したコードに--plot-dir /path/を指定して実行した結果、以下のようなグラフが自動で保存されます。各グラフは、データセットのさまざまな属性(年齢帯、カメラ機種、代名詞、祖先カテゴリなど)の分布を示しています。
1. 年齢帯分布(Age Distribution)
- タイトル: "Age distribution / 年齢帯分布"
- X軸: 年齢帯(例:25-34、18-24など)
- Y軸: 画像数
- 説明: 年齢帯ごとの画像数を示したグラフです。特に25-34歳のグループが最も多く、次に18-24歳が続きます。このデータセットは若年層(特に25-34歳)のデータが多いことがわかります。
2. カメラ機種別分布(Top Camera Models)
- タイトル: "Top camera models / カメラ機種上位"
- X軸: カメラ機種(例:realme C11 2021, Apple iPhone 11など)
- Y軸: 画像数(そのカメラで撮影された画像数)
- 説明: データセット内で最も多く使用されているカメラ機種に関する分布を示すグラフです。realme C11 2021やTECNO CI6など、エントリーレベルのスマートフォンが多く使われていることがわかります。
3. 代名詞分布(Pronoun Distribution)
-
タイトル: "Pronoun distribution / 代名詞分布"
-
X軸: 代名詞(例:He/him/his、She/her/hers など)
-
Y軸: 件数(代名詞の使用数)
-
説明: ユーザーの自己申告に基づく代名詞の使用分布を示すグラフです。"He/him/his"と"She/her/hers"が最も多く、それぞれ53.2%と46.0%を占めています。これにより、データセット内でのジェンダーに関する情報がどう分布しているかがわかります。
4. 祖先カテゴリ分布(Ancestry Distribution)
- タイトル: "Ancestry distribution / 祖先カテゴリ分布"
- X軸: 祖先カテゴリ(例:Africa、South-Eastern Asiaなど)
- Y軸: 件数(そのカテゴリに属する画像の数)
- 説明: 各祖先カテゴリに関連する画像数の分布を示すグラフです。特にアフリカと南東アジアのカテゴリが多く、南アジアや中東アフリカなどが次に続きます。データセットはこれらの地域の人物が多くを占めていることがわかります。
5. アノテータの代名詞分布(Annotator Pronouns)
-
タイトル: "Annotator pronouns / アノテータ代名詞"
-
X軸: 代名詞(例:She/her/hers、He/him/his)
-
Y軸: アノテータ数
-
説明: アノテータの代名詞使用分布を示すグラフです。最も多く使われている代名詞は"She/her/hers"と"He/him/his"で、"They/them/their"はほとんど使われていません。
6. QAアノテータの祖先カテゴリ分布(QA Annotator Ancestry)
- タイトル: "Annotator ancestry / アノテータ祖先カテゴリ (QAannotator_demographics.csv)"
- X軸: 祖先カテゴリ
- Y軸: アノテータ数
- 説明: QAアノテータの祖先カテゴリ分布を示すグラフです。South-Eastern Asiaが圧倒的に多く、次いでEastern Europeが続いています。
7. QAアノテータの代名詞分布(QA Annotator Pronouns)
- タイトル: "Annotator pronouns / アノテータ代名詞 (QAannotator_demographics.csv)"
- X軸: 代名詞(例:She/her/hers、He/him/his)
- Y軸: アノテータ数
-
説明: QAアノテータの代名詞使用分布を示すグラフです。"She/her/hers"と"He/him/his"がほぼ同数で使用されており、"They/them/their"はほとんど使われていません。
Apple のembedding-atlas で可視化のための環境構築
rich
tabulate
matplotlib
japanize-matplotlib
umap-learn
scikit-learn
pandas
numpy
pyarrow
Code
Apple のembedding-atlas で可視化のための前処理コード
from pathlib import Path
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
import umap
root = Path("/Volumes/data/SONY_AI/fhibe.20250716.u.gT5_rFTA_downsampled_public")
csv_path = root / "data/processed/fhibe_downsampled/fhibe_downsampled.csv"
# 読み込み
df = pd.read_csv(csv_path)
# メタデータ列(可視化時に表示したい列)
meta_cols = [
# ファイルパスは CSV では filepath なので relative_path の代わりに使用
"filepath", "image_id", "subject_id", "is_primary", "manufacturer", "model",
"age", "pronoun", "ancestry", "natural_skin_color", "apparent_skin_color",
]
# 存在する列だけ採用して KeyError を避ける
meta_cols = [c for c in meta_cols if c in df.columns]
df_meta = df[meta_cols].copy()
# 数値列・カテゴリ列を分けてエンコード(存在する列だけ使う)
num_cols = [c for c in ["image_height", "image_width", "age"] if c in df.columns]
cat_cols = [c for c in ["pronoun", "ancestry", "manufacturer", "model", "natural_skin_color", "apparent_skin_color"] if c in df.columns]
num = df[num_cols].fillna(df[num_cols].median(numeric_only=True)) if num_cols else pd.DataFrame()
try:
enc = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
except TypeError:
# For scikit-learn < 1.4
enc = OneHotEncoder(handle_unknown="ignore", sparse=False)
cat = enc.fit_transform(df[cat_cols].fillna("missing")) if cat_cols else np.empty((len(df), 0))
X = np.hstack([num.values, cat])
# UMAP で 2D 化
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, metric="cosine", random_state=42)
proj = reducer.fit_transform(X)
# 保存
out = df_meta.copy()
out["projection_x"] = proj[:, 0]
out["projection_y"] = proj[:, 1]
out.to_parquet("fhibe_metadata_projection.parquet", index=False)
print("✅ fhibe_metadata_projection.parquet saved", out.shape)
これでparquetファイルが保存されます。
実行手順について
前提条件僕の前に公開したembedding-atlas記事を見てください
embedding-atlas /Users/syun/python_project/FHIBE-Qiita-Article/fhibe_metadata_projection.parquet \
--x projection_x \
--y projection_y \
--text filepath
embedding-atlas
やはり、Appleのembedding-atlasは非常に使いやすいツールです。
下に載せている動画の通り、例えば、隣に棒グラフを表示して、カーソルでデータポイントを選択することでフィルターをかけることが可能です。
例えば、She/her/hersを使っている年齢帯が25-34の皆さんのデータを選択し、その後カメラ機種のモデルや地域などの情報を瞬時に可視化することができます。これにより、どのカメラが多く使われているか、どの地域のデータが多いのかなど、直感的に確認することができます。
この可視化方法を使うことで、データをより深く理解し、分析の効率を大きく向上させることができます。
Apple のembedding-atlasで可視化してみました https://t.co/jQWRIjNBtz pic.twitter.com/k5DywKDH8E
— SYUN@一刻も早く卒業したい (@syun88AI) December 5, 2025
分析と考察
fhibe_downsampled.csv のメタデータには、合計10,941件の画像データがあり、1,981件のユニークな被写体が存在していることが示されています。主画像(Hero shots)が10,318件で、画像の解像度は最小923x921ピクセルから最大2048x2048ピクセルにわたっており、平均解像度は2005x1567ピクセルです。
-
年齢層の偏り: 平均年齢が31.7歳と比較的若い層が多いことがわかります。特に
25-34歳層が40.8%を占め、次いで18-24歳層が31.2%を占めています。この偏りは、AIやロボティクス関連のプロジェクトにおける若年層の参加者の多さを反映している可能性があります。
年齢層の分布
-
主な年齢帯: 25-34歳(40.8%)と18-24歳(31.2%)の2つの年齢層が圧倒的に多いことがわかります。これらの年齢層は、一般的に大学や大学院生、若手研究者、エンジニアが多く含まれている年齢層です。この分布は、データセットの利用者層が主に若年層であることを示唆しており、例えば大学や企業の研究所で収集されたデータが中心である可能性があります。
-
年齢のバランス: 65歳以上の年齢層がわずか2.4%に過ぎない点からも、データセットには比較的若年層が多く含まれており、特に高齢層のデータが不足していることがわかります。今後、この層のデータを強化することで、より多様な年齢層を網羅した分析が可能になるでしょう。
カメラモデルの分布
カメラメーカー別で見ると、realme と TECNO が上位に位置し、それぞれ15.1%と11.6%を占めています。特に realme C11 2021 と TECNO CI6 の使用率が高く、このデータセットにおいてこれらの機種が多く使用されていることがわかります。次に、Apple iPhone 11(6.2%)がランクインしており、iPhoneシリーズが一定のシェアを持っていることが確認できます。
- カメラメーカーの偏り: これらの結果から、このデータセットは特定の地域や市場で多く利用されているカメラ機器(特にエントリーレベルのスマートフォン)を反映している可能性があります。高価なカメラやプロフェッショナル向けの機材が少ないため、一般消費者向けのカメラがメインであることがわかります。
代名詞の分布
代名詞の使用に関する統計を見ると、"He/him/his" が53.2%、"She/her/hers" が45.9%と、ほぼ均等に分かれていますが、"Prefer not to say" や "They/them/their" はそれぞれ0.1%程度の割合となっています。
- 社会的背景の反映: 代名詞に関するデータは、性別や個人のアイデンティティに関する意識が反映されている可能性が高いです。このデータを元に、ジェンダーに関する多様な表現が現代社会においてどのように認識されているかを分析することができます。
祖先カテゴリの分布
Africa(48.0%)と Asia(39.9%)が大きなシェアを占めており、特に南東アジア(19.3%)や南アジア(15.2%)が注目されます。このデータセットが、アジアやアフリカを中心とした多様な人種・文化に基づいていることを示唆しています。
- 地域的多様性: これらの結果から、データセットが特定の地域(アフリカ、アジア)に偏っていることがわかります。この偏りを考慮した上で、AIや機械学習のモデルの適用範囲を広げるためには、他の地域や文化のデータを追加することが求められます。
髪質と髪色の分析
- 髪質の分布: 自然な髪質では、直毛(Straight) が37.2%を占め、次に縮れ毛(Kinky-coily)が33.5%、 ウェーブ(Wavy) が22.3%となっています。このような分布は、髪質が多様であることを示しており、これを考慮した分析が重要です。
- 髪色の分布: 髪色の分布では、ダークブラウン/ブラック(Dark brown/black) が圧倒的に多く(86.7%)、次いでライトブラウン(Light brown) が5.8%を占めています。このデータを基に、異なる髪色や髪質に対する認識がどのように異なるかを探ることができます。
結論
FHIBEデータセットに基づいた分析を通じて、データセットがAIの公平性評価において非常に有用であることが確認されました。特に、データセットに含まれる年齢層、地域、代名詞の使用、髪質や髪色の多様性など、現代社会における多様な属性を反映している点が重要です。
-
年齢層の偏り: 特に若年層(25-34歳、18-24歳)のデータが多いことがわかりますが、これはAI技術が特に若年層をターゲットにしたプロジェクトで利用されていることを示しており、特定の層に偏った結果を避けるためにも、今後は他の年齢層をカバーするためのデータ強化が求められます。データの多様性を高めることで、より公平で精度の高いAIモデルの開発が可能になります。
-
地域的偏り: アジアやアフリカに多くのデータが集中していることがわかりました。これにより、AIモデルがこれらの地域に特化した高い精度を誇る一方で、他の地域に対しても公平性を保つためにさらなるデータ強化が必要です。このデータセットは地域に関する偏りを理解し、それを補完するための貴重なリソースを提供しています。
-
代名詞の使用: 代名詞の使用に関しては、"He/him/his" と "She/her/hers" がほぼ均等に分布し、ジェンダー意識の多様性が反映されています。この結果は、AIのジェンダー公平性を考える上で重要な要素となります。このデータを活用することで、ジェンダーに関する多様な表現に対応したAIモデルの構築が可能になります。
-
カメラ機種の偏り: 使用されるカメラ機種が一般消費者向けの機器(例えば、realme C11 2021やTECNO CI6)が多く、これにより消費者層に特化したデータが集まっています。このデータを基に、特定の消費者層をターゲットにしたAIモデルの精度が向上し、他の市場への展開に向けたさらなるデータ補完が求められます。
-
髪質と髪色の分析: 髪質や髪色に関する多様性を反映したデータは、AIが異なる髪の特徴に対して公正に対応できるモデルの開発に貢献します。特に、直毛や縮れ毛、ダークブラウンやブラックの髪色が多くを占めていますが、このデータをもとに多様な髪の特徴に対応するAIモデルの設計が可能です。
このように、FHIBEデータセットはAIの公平性を評価するために非常に有益なリソースであり、データセット内での多様な属性分布を通じて、偏りのないAIモデルの開発が支援されます。今後、年齢層や地域、性別などのデータをさらに補完し、多様性をより一層強化することが、モデルの公平性を高め、より精度の高いAI技術の実現に繋がると考えられます。
今回も最後まで見てくれてありがとうございます。





