Biome Generation Algorithm with Independent Size and Rarity

I have a working terrain generation system, and I’m trying to tweak the biome generation to get what I want. I’m trying to get a biome generation system where I can set the size and rarity independently, but I’m stuck trying to think of an algorithm to accomplish this. The world size is infinite and chunks are generated procedurally.

It’s also important for the biome generation algorithm for a chunk to be deterministic and independent of the chunks around it because the chunks are being generated and unloaded as the player moves.

I have already tried using a heightmap with noise. The problem with using noise functions is that rarer biomes must always be smaller. Biomes that are very rare will be hundreds of times smaller than normal biomes.