The 25-year-old will face world number 14 Dane Caroline Wozniacki, who overcame Czech second seed Karolina Pliskova 5-7 6-1 6-1.
"Caroline is one of the best athletes on tour, so I know I am going to be running for a lot of balls," she said.
"I'm looking forward to it, it is going to be a battle and I will try my best."
Konta broke Williams twice in the first set as she moved into a 3-0 lead, before the 36-year-old American salvaged one of those breaks.
Williams struggled with her first serve and saved five break points early in the second set before breaking Konta to take a 3-1 lead.
But the British number one battled back to break Williams on three occasions on her way to sealing victory shortly after midnight local time.
Konta will reach a career-high world number seven ranking if she lifts the trophy on Saturday.
Earlier, Roger Federer continued his stunning start to 2017 by reaching the men's semi-finals with a dramatic win against Czech 10th seed Tomas Berdych.
The 35-year-old Swiss survived two match points in the deciding tie-break before winning 6-2 3-6 7-6 (8-6). Federer has now won 17 of his 18 matches this year.
He will now face Australia's Nick Kyrgios who defeated Germany's Alexander Zverev 6-4 6-7 (11-9) 6-3.
Find out how to get into tennis in our special guide.
Federer, who claimed his first major for five years at the Australian Open in January, served for the match at 5-3 in the deciding set, only for Berdych to break to love and go on to force a deciding tie-break.
However, he choked at the crucial moment as his losing streak against Federer - which goes back to March 2013 - was extended to a seventh match.
Federer's progression means a meeting with long-time rival Rafael Nadal in Sunday's final remains a possibility.
Spain's 14-time Grand Slam champion Nadal, who lost to Federer in Melbourne, recorded a 6-2 6-3 win over American Jack Sock to reach the last four.
He faces Italian Fabio Fognini, who became the first unseeded player in 10 years to make the semi-finals by beating Kei Nishikori.
Johanna Konta defeated seven-time Grand Slam champion Venus Williams 6-4 7-5 to become the first British woman to reach the Miami Open final.