Courses
データへのラベリングは高コストで時間がかかり、領域依存的であり、多くのチームは十分な量を確保できません。
モデルの学習には常にラベル付きデータが必要ですが、正しくラベリングするには時間がかかり、しばしば領域の専門家が必要です。たとえば、医用画像には放射線科医、法律文書には弁護士が必要です。感情分析のような単純なタスクでも、誰かが腰を据えて各サンプルに手作業でタグを付ける必要があります。その結果、ほとんどのMLチームはごく少量のラベル付きデータセットと、活用できない大量のラベルなしデータを抱えることになります。
セミ教師あり学習は、両方を使って学習することでこの問題を解決します。少量のラベル付きデータセットを大量のラベルなしデータと組み合わせ、モデルにパターンを学習させます。
本記事では、セミ教師あり学習の仕組みを分解し、代表的な手法を紹介し、どのような場面で有効かを解説します。
ところで、教師あり機械学習とは正確には何でしょうか。教師あり学習アルゴリズムの基本的な仕組みは、こちらのブログで解説しています。
セミ教師あり学習とは?
セミ教師あり学習は、ラベル付きデータとラベルなしデータの組み合わせで学習する機械学習の手法です。
名前が示すとおり、教師あり学習と教師なし学習の中間に位置します。教師あり学習はすべてのサンプルにラベルが必要です。教師なし学習はまったくラベルを使いません。セミ教師あり学習は、少量のラベル付きサンプルと、それに比べてはるかに多いラベルなしサンプルを併用します。
ラベル付きデータはモデルに「何を見るべきか」を伝えます。ラベルなしデータはデータの構造を示します。両者を組み合わせることで、いずれか一方だけでは得られない情報をモデルに与えられます。
セミ教師あり学習の仕組み
プロセスは少量のラベル付きデータセットから始まります——正解が分かっている数百件のサンプルなどです。
そこに、はるかに大きいラベルなしデータセットを取り込みます。数千、場合によっては数百万のサンプルで、ラベルは付いていません。モデルはこのラベルなしデータを使って、データ点同士の潜在的なパターンや関係性を学習します。
そのうえで、ラベル付きサンプルが正しい答えへと構造を導きます。モデルはすでにラベルなしサンプルからデータの整理のされ方を把握しています。ラベルは、その構造のどの領域がどの出力に対応するかを教えます。
簡単な例を挙げましょう。
メールをスパムか非スパムかに分類するとします。ラベル付きメールが100通、ラベルなしが1万通あります。まずモデルは、語のパターンや構造に基づいてメールがどのようにグループ化されるかを学びます。次に、100通のラベル付き例を使って、どのグループがスパムでどれがスパムでないかを特定します。結果として、100通のラベル付きメールだけで学習した場合よりも良い性能のモデルが得られます。
セミ教師あり vs 教師あり vs 教師なし学習
各学習手法を見て、セミ教師あり学習が他の2つと比べてどこに位置するかを確認しましょう。
教師あり学習
教師あり学習は完全にラベル付きのデータで学習します。データセット内の各サンプルには入力と既知の出力があり、モデルはその写像を学びます。
十分なラベル付き例があるときにはうまく機能します。しかし、この「十分」はタスクによっては数千、数百万サンプルを意味することもあります。これを用意するのは高コストで、ときに不可能です。
教師なし学習
教師なし学習はラベルを一切使いません。モデルは生のデータを見て自力で構造を見つけます。代表例はクラスタリングや次元削減です。
長所はラベル付きデータが不要なこと。短所は、モデルが実際に重要なものを把握していないことです。パターンは見つけますが、それが解きたい問題に一致するとは限りません。
セミ教師あり学習
セミ教師あり学習は両者の良いとこ取りです。小さなラベル付きデータセットでタスクを定義し、大きなラベルなしデータセットでデータの構造を学ばせます。
ラベル付きデータはモデルに正しい方向を示し、ラベルなしデータはサンプル同士の関係を示します。この組み合わせは、同じ少量のラベルだけで学習する教師あり学習よりもしばしば高性能になります。ラベルなしデータがなければ見落としたであろうパターンを検出できるからです。
以下は3手法の簡単な比較です:

機械学習手法の比較表
まとめると、ラベリングに時間がかかり、ラベルなしデータが多いなら、セミ教師あり学習を検討する価値があります。次に一般的な手法を紹介します。
代表的なセミ教師あり学習の手法
セミ教師あり学習にはいくつかの実装方法があります。各手法はラベル付き・ラベルなしの分割を異なる形で扱います。代表的なものを見ていきましょう。
自己学習(Self-training)
最も簡単なアプローチです。まずラベル付きデータでモデルを学習し、次にラベルなしサンプルに対して予測を行います。信頼度の高い予測を疑似ラベルとしてラベル付き集合に追加し、拡張されたデータセットでモデルを再学習します。
モデルの改善が止まるか、ラベルなしデータが尽きるまでこのプロセスを繰り返します。実装は容易ですが、初期段階で誤った予測をすると、その誤りがデータセットに取り込まれてしまいます。
協調学習(Co-training)
1つではなく2つのモデルを使います。各モデルはデータの異なる「ビュー」(特徴量の異なる部分集合のようなもの)で学習します。
たとえばWebページの分類では、一方のモデルはページ上のテキストを、もう一方はそのページに向けられたリンクのアンカーテキストを見る、という具合です。各モデルは相手のためにラベルなしサンプルにラベル付けを行い、複数ラウンドにわたって互いに教え合います。
狙いは、一方の強みで他方の弱みを補うことです。各ビュー単独でも十分な情報がある場合、協調学習は自己学習を上回ることがあります。片方の誤りをもう一方が修正できるためです。
ラベル伝播(Label propagation)
この手法では、各データ点をノードとし、類似した点同士をエッジで結ぶグラフを構築します。ラベルはラベル付きノードから隣接ノードへと「広がって」いきます。
前提は、類似したデータ点は同じラベルを共有するはずだ、というものです。ラベル付きサンプルがラベルなしサンプルのクラスタの近くにあれば、そのラベルなしサンプルは同じクラスに属する可能性が高いと考えます。グラフを通じてラベルが伝播し、最終的にすべてのノードにラベルが割り当てられます。
明確なクラスタ構造があるデータで有効ですが、クラス境界があいまいな場合はうまくいかないことがあります。
セミ教師ありニューラルネットワーク
ディープラーニングにも独自のセミ教師あり手法があります。代表的なものを2つ挙げます。
- 一貫性正則化(Consistency regularization): ノイズや拡張といった小さな摂動を加えても、同じ入力に対して同じ出力を出すようモデルを促します。良いモデルは、入力をわずかに変えただけで予測が変わるべきではないという考えです
- ニューラルネットにおける疑似ラベリング: 自己学習に似ていますが、バッチ単位で行います。学習中にモデルがラベルなしサンプルにラベルを生成し、実ラベルとともに損失関数で使用します。
FixMatchやMixMatchのような手法はこれらのアイデアを組み合わせており、ごく少量のラベルでもベンチマークで良好な結果を示しています。
セミ教師あり学習が重要な理由
セミ教師あり学習を気にかけるべき理由はひとつ、コストです。
ラベリングにはデータ、領域の専門家、時間、そして費用が必要です。セミ教師あり学習は、少ないラベルからより多くの価値を引き出すことでコストを抑えます。
次に性能です。500件のラベル付きと5万件のラベルなしで学習したモデルは、同じ500件のラベル付きだけで学習したモデルをしばしば上回ります。ラベルなしデータによってデータ分布の全体像がつかめるため、予測が改善されます。
そして現実として、ほとんどのデータセットにはラベルなしデータがあふれています。どの企業も、誰もラベリングする時間がないログ、画像、文書、録音を大量に抱えています。セミ教師あり学習は、そうしたデータから有用なものを生み出せます。
セミ教師あり学習の適用分野
セミ教師あり学習は、ラベルの取得が難しい領域で特に活用されています。
画像分類は最も一般的なユースケースのひとつです。何千枚もの画像にラベルを付けるのは骨が折れますが、ラベルなし画像の収集は簡単です。セミ教師あり手法を使えば、数百枚のラベル付き画像だけで高精度な分類器を学習できます。
テキスト分類でも同様です。数百万件の顧客レビューやサポートチケットがあっても、手作業でラベル付けされたものはごく一部かもしれません。セミ教師あり学習は、データセット全体にうまく一般化する分類器の構築を助けます。
音声認識も興味深い分野です。音声を書き起こすのは多大な労力を要しますが、生の音声データは豊富です。ラベルなしの録音は音響パターンの学習に役立ち、書き起こし済みサンプルが正しい対応関係を教えます。
医療データ解析は領域特化の優れた事例です。医師にスキャンや診療記録のラベリングを依頼するのは高コストで時間がかかり、医師には他に優先すべき仕事があります。しかし、病院には大量のラベルなし臨床データがあります。セミ教師あり手法は、完全なラベル付きデータセットを用意せずとも診断モデルの構築を助けます。
セミ教師あり学習の利点
セミ教師あり学習が多くのプロジェクトに適している理由は次のとおりです。
- 必要なラベル付きデータが少ない: 完全な教師あり手法に比べ、ラベルの一部だけで良い結果が得られます
- 汎化性能が向上する: ラベルなしデータにより、より幅広い例に触れられるため、未知データでの性能が向上します
- 費用対効果が高い: ラベリングが高コストまたは時間のかかる場面——たいていそうですが——で、手元のデータを最大限に活用して時間と予算を節約できます
データは多いがラベルが少ない場合は、セミ教師あり学習を検討するとよいでしょう。
セミ教師あり学習の限界
セミ教師あり学習には、知っておくべきトレードオフがいくつかあります。
- ラベルなしデータの質が重要: ラベルなしデータの分布がラベル付きデータと異なると、モデルは誤ったパターンを学習します
- 誤った疑似ラベル: 自己学習のような手法では、確信度が高くても誤った予測が正解として扱われます。モデルはその誤ったラベルで学習し、誤りが強化されて将来の予測が悪化します
- 教師ありより複雑: 調整すべきハイパーパラメータや設計上の選択肢が増え、問題が起きる箇所も増えます。教師ありモデルはより単純で説明もしやすいです。セミ教師あり手法は複雑さを加えるため、ラベル付きデータがすでに十分な場合は、その価値が見合わないこともあります
いずれも致命的というわけではありませんが、着手前に理解しておきましょう。
実践のセミ教師あり学習(Pythonの例)
scikit-learnのLabelSpreadingアルゴリズムを使い、簡単なPythonの例でセミ教師あり学習を見てみましょう。
データセットを作成し、その一部だけにラベルを付け、残りはモデルに推定させます。
データの準備
まずデータセットを生成し、ラベルの大半をマスクしてセミ教師ありの状況を再現します。
import numpy as np
from sklearn.datasets import make_moons
from sklearn.semi_supervised import LabelSpreading
from sklearn.metrics import accuracy_score
# Generate a dataset with 500 samples
X, y_true = make_moons(n_samples=500, noise=0.2, random_state=42)
# Keep only 10%, mask the rest as -1
rng = np.random.RandomState(42)
labeled_idx = rng.choice(500, size=50, replace=False)
y_train = np.full(500, -1) # -1 means unlabeled in scikit-learn
y_train[labeled_idx] = y_true[labeled_idx]
print(f"Labeled samples: {np.sum(y_train != -1)}")
print(f"Unlabeled samples: {np.sum(y_train == -1)}")

ラベル付きとラベルなしサンプル数
scikit-learnでは、-1がラベルなしサンプルを表します。500サンプルのうち、ラベル付きは50だけです。残りの450をモデルが推定する必要があります。
学習と予測
次にLabelSpreadingモデルを学習し、ラベルなしデータにどれだけ正しくラベル付けできるかを確認します。
model = LabelSpreading(kernel="knn", n_neighbors=7)
model.fit(X, y_train)
y_pred = model.transduction_
# Check accuracy on the originally unlabeled samples
unlabeled_mask = y_train == -1
accuracy = accuracy_score(y_true[unlabeled_mask], y_pred[unlabeled_mask])
print(f"Accuracy on unlabeled samples: {accuracy:.2%}")

ラベルなしサンプルの正解率
データの10%だけをラベル付き例として用いたにもかかわらず、モデルは大半のラベルなしサンプルに正しくラベルを付けました。これが核心です。
結果の可視化
正解率は高く(ほぼ96%)、どのサンプルが誤分類されたのかを視覚的に確認してみましょう。

真のラベルと予測ラベル
予測ラベルは真のラベルとほぼ完全に一致しており、モデルは500サンプル中50のラベル付き例しか見ていないにもかかわらず高精度です。右の図では、誤分類されたサンプルが赤で示されています。
セミ教師あり学習でよくある間違い
セミ教師あり学習の強力さを見てきましたが、あらゆる状況に最適というわけではありません。よくある間違いとその回避策を挙げます。
- ラベルなしデータは常に有益だと思い込む: そうとは限りません。ラベルなしデータの分布がラベル付きデータと異なる場合、モデルは実タスクに適用できないパターンを学んでしまいます。ラベル付き・ラベルなしの両方が同じソースから来ており、同じ問題を表していることを必ず確認してください
- 不十分な初期モデル: セミ教師あり手法は初期の教師ありモデルを土台にします。最初のモデルが弱い(サンプルが少なすぎる、ハイパーパラメータが不適切など)と、その後のすべての工程に問題が引き継がれます。ラベルなしデータを加える前に、可能な限り強い教師ありベースラインを用意してください
- 疑似ラベルへの過信: 疑似ラベルの品質は、それを生成したモデルの品質次第です。すべての疑似ラベルを鵜呑みにすると、学習ラウンドを経るごとに誤りが増幅します。高い信頼度のしきい値を設定し、モデルが自信のある疑似ラベルだけを使いましょう。残りは破棄します
- データ分布の無視: セミ教師あり手法は、ラベルなしデータの構造がラベルに有用な情報を与えると仮定します。データに明確なクラスタや滑らかな決定境界がない場合、この仮定は成り立ちません
これら4つの落とし穴を避けるには、強い教師ありベースラインから始め、ラベルなしデータを段階的に追加し、各ステップで本当に性能が向上しているかを確認してください。
セミ教師あり学習を使うべきとき
セミ教師あり学習が適しているのは次の3つの状況です。
- ラベル付きデータが限られているとき: 少量のラベル付きデータしかなく、追加のラベリングが高コストまたは遅い場合、セミ教師あり学習で精度をもう一段引き上げられます
- ラベルなしデータが豊富なとき: この手法には大量のラベルなしデータが必要です。ラベルなしが少量しかなければ、モデルは十分な構造を学べません。ラベル付きとラベルなしの規模の差が大きいほど、セミ教師あり手法の効果は高まります
- データに明確な構造があるとき: 類似したデータ点が同じラベルを共有する場合に最も効果的です。データがクラスタを形成していたり、クラス間の境界が滑らかであれば、ラベルなしデータがそのパターンをさらに明確にします。クラスが混在していて明確な分離がない場合、ラベルなしデータの効果は限定的です。
この3条件すべてに当てはまるなら、セミ教師あり学習を試す価値があります。
結論
平たく言えば、セミ教師あり学習は「すべてにラベルを付けなくても、より良いモデルを学習する」方法です。少量のラベル付きデータセットを大量のラベルなしデータと組み合わせ、両方から学ばせます。
利点は明確です。ラベリング時間の削減、市場投入までの短縮、コスト低減、そして限られたラベルだけで学習する場合よりも良い性能。医療、法律、NLPのように、ラベリングに領域専門家が必要な分野では特に重要です。
大量のラベルなしデータがあるなら、セミ教師あり学習を試してみてください。優れた教師ありベースラインから始め、データの構造に合った手法を選び、ラベルなしデータが本当に効果をもたらすかを測定しましょう。scikit-learnのLabelSpreading は最初の実験として好適ですが、FixMatchやMixMatchのような手法も試してみてください。
2026年に即戦力を目指すなら、Machine Learning Engineer トラックをご受講ください。基礎からMLOpsまで網羅しています。
FAQs
セミ教師あり学習とは何ですか?
セミ教師あり学習は、少量のラベル付きデータと大量のラベルなしデータの双方でモデルを学習する機械学習の手法です。ラベル付きデータがモデルに「何を見るか」を教え、ラベルなしデータがデータ全体の構造理解を助けます。これにより、ラベル付きデータだけで学習するよりも良い結果が得られます。
セミ教師あり学習は、教師あり・教師なし学習とどう違いますか?
教師あり学習は全サンプルに既知の出力が付いたラベル付きデータのみを使います。教師なし学習はラベルなしデータのみを使い、自力でパターンを見つけます。セミ教師あり学習は、タスクを定義する小さなラベル付きデータセットと、データ構造を学ぶための大きなラベルなしデータセットの両方を使います。
セミ教師あり学習はいつ使うべきですか?
ラベル付きデータが少なく、ラベルなしデータが多く、さらにデータに自然なクラスタや滑らかなクラス境界など明確な構造があるときに使ってください。医用画像や法律文書の分析のようにラベリングが高コスト、または専門家を要する場合でも、すべてにラベルを付けずに高精度なモデルを構築できます。
セミ教師あり学習における自己学習とは何ですか?
自己学習(Self-training)は、まずラベル付きデータでモデルを学習し、その後ラベルなしサンプルに対してラベルを予測する手法です。最も信頼度の高い予測を疑似ラベルとしてラベル付き集合に追加し、拡張データセットで再学習します。初期の誤予測が後の学習で強化されるリスクがあるため、高い信頼度のしきい値を設定するべきです。