(a) bi-annual = every two years. (bi = two; annual = year)
(b) semi-annual = two times a year. (semi = half; annual = year)
The problem is that many native speakers use these words interchangably. To prevent any misunderstanding, it's better to use plain English. That is, just say "every two years" or "twice a year."