-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
Currently the FastTree ranking code has an #if to control whether it uses native or .NET code, as declared here.
| <DefineConstants>$(DefineConstants);USE_FASTTREENATIVE;NO_STORE;CORECLR</DefineConstants> |
Normally this takes the form of #if USE_FASTTREENATIVE, except for here.
| #if USE_FASTTREENATIVE2 |
That 2, I'm somewhat embarrassed to report, is an unintentional mistake I made some time ago. It was part of a change involving some hundreds of files, and I think I just made a small error.
Now, somehow, this didn't get noticed. It however differs in its support of a few arguments. These arguments are hidden and not recommended to be used for general users, but nonetheless they may be important, and having it not be supported was unintentional.
machinelearning/src/Microsoft.ML.FastTree/FastTreeRanking.cs
Lines 854 to 857 in ecc6857
| if (_useShiftedNdcg || _costFunctionParam == 'c' || _distanceWeight2 || _normalizeQueryLambdas) | |
| { | |
| throw new Exception("Shifted NDCG / ContinuousWeightedRanknet / distanceWeight2 / normalized lambdas are only supported by unmanaged code"); | |
| } |
This is not to say we shouldn't shift to not use the native library, but I'd rather it be done in a controlled fashion to ensure compatibility (which this thing does not do), rather than unintentionally as I did here.
This issue is directly relevant to @najeeb-kazmi and @rogancarr .