In semi-supervised learning (SSL), we use a small amount of labeled data to train models on a bigger unlabeled dataset. Quite common in practice sometimes.
In unsupervised domain adaptation (UDA), we have access to a source labeled dataset and a target unlabeled dataset. Then the task is to learn a model that can generalize well to the target dataset. Again, quite practical stuff.
In my latest example on keras.io 1, I present an implementation and walkthrough of AdaMatch 3 which beautifully unifies SSL and UDA. I also introduced a couple of preliminaries to make it easier for folks who are not familiar with relevant concepts. Expect plots, figures, code, and illustrative code comments.

  
      

      keras.io
  

  
    

Keras documentation: Semi-supervision and domain adaptation with AdaMatch 12