Shane Long scored his 50th league goal, but Naby Keita drew Liverpool level shortly before the break and Mohamed Salah and Jordan Henderson struck within six minutes of each other after half-time.
Southampton are not out of the dark yet in 16th place on 33 points, which is level with Brighton and Burnley and five ahead of relegation threatened Cardiff City with six games remaining.
Liverpool struggled at the start of each half, but scored from crucial errors, including Salah, whose long run from a Southampton corner broke a one-all deadlock on 80 minutes.
Ryan Bertrand provided a spark down the left for Southampton, who was looking for a third-straight league win, and he combined with Pierre Emile Hojbjerg and Long to produce the opening goal after just six minutes.
Angus Gunn made a fine save against former Saints man Sadio Mane after the hosts took the lead, but Keita’s headed on 36 minutes unluckily careened off the goalkeeper and against the post before crossing the line.
Salah then turned fortunes in Liverpool’s favour when he charged towards a backpedaling Bertrand before hitting a left-footed attempt beyond Gunn to make it 2-1.
Henderson added a third four minutes before full-time against a spent Southampton, who had just 33 percent of the possession.
Southampton: Gunn, Bertrand, Vestergaard (Austin 83), Yoshida, Bendarek, Valery, Hojbjerg, Romeu (Armstrong 83), Ward-Prowse, Armstrong, Redmond, Long (Sims 62).
Unused subs: McCarthy (GK), Targett, Stephens, Gallagher.
Goals: Long (9).
Bookings: Bednarek (48), Bertrand (75).
Liverpool: Alisson, Alexander-Arnold (Henderson 59), Matip, Van Dijk, Robertson, Wijnaldum (Milner 59), Fabinho, Keita (Lovren 88), Salah, Mane, Firmino.
Unused subs: Mignolet (GK), Moreno, Shaqiri, Origi.
Goals: Keita (36), Salah (80), Henderson (86).
Bookings: Salah (81), Robertson (89), Henderson (90), Mane (90+4).