Song looked to have fired the Irons ahead on five minutes as he rifled a 25-yard strike into the net following a corner, choosing not to celebrate against his former club.
The assistant’s flag was raised immediately, though, as three West Ham players were standing offside in front of Arsenal goalkeeper Wojciech Szczesny.
Arsenal looked to use their pace on the break. Santi Cazorla floated in a free-kick, but Laurent Koscielny got in Alexis Sanchez’s way as he stooped for a header, which went wide
Arsenal took the lead on 41 minutes. Cazorla darted through a crowded left side of the area, where he was tripped by Winston Reid after the defender fell backwards
No sooner had the home fans burst into renditions of “1-0 to the referee” than Arsenal doubled their lead.
A neat exchange of passes between Cazorla and Debuchy released Alex Oxlade-Chamberlain down the right and his low cross went through Reid’s legs before Welbeck slid in ahead of Tomkins to slot home on 44 minutes.
West Ham were much more positive at the start of the second half, with a deep cross from Diafra Sakho headed behind at the far post by Per Mertesacker as Carroll closed in.
The Irons maintained the pressure and pulled a goal back on 54 minutes. Tomkins got to the byline and floated a high ball into the six-yard box, Kouyate got up above Debuchy to head past Szczesny, who was wrong-footed by a slight deflection.
Arsenal were prevented from restoring their two-goal cushion when Adrian produced a strong left-handed save to beat away a fierce drive from Cazorla following more good work from Sanchez.
During the closing moments of five minutes of stoppage time a looping header from Valencia dropped onto the roof of the net, but the Hammers could not find a leveller.