For most cases using a standard character, there will not be a big difference between axis values and movement speed. Axis values are translated more to acceleration, but generally for characters there is not much drifting going on so using input values will probably work fine.
But if you really want to know instantaneous movement direction, you can use the dot product as follows. This will deal correctly with cases where, for example, your input is reverse, but your characters momentum is still carrying him forwards.
FVector Vel = Character->GetVelocity();
FVector Forward = Character->GetActorForwardVector();
FVector Right = Character->GetActorRightVector();
float ForwardSpeed = FVector::Dot(Vel, Forward);
float RightSpeed = FVector::Dot(Vel, Right);
To clarify, these values give you the components of velocity in the direction the character is facing, and perpendicular to the direction the character is facing. Negative values mean the character is moving backwards/to his left.