Releases: VowpalWabbit/vowpal_wabbit
9.10.0
General Notes
Updates to sparse weights, VW Slim, Search, and other bug fixes.
Click here to see all changes in this release
What's Changed
Features
- feat: sparse model benchmarks by @bassmang in #4653
- feat: not self consistent speed up by @mrucker in #4652
- feat: Flatbuffer format by @Sharvani2002 in #3989
- feat: Expose non-io_buf API for fb_parser by @lokitoth in #4683
- feat: Support cleaning up spare examples correctly in read_span_flatbuffer() by @lokitoth in #4684
Fixes
- fix: stash and restore prediction when calling learn during learn_returns_prediction==false calls by @jackgerrits in #4632
- fix: update to reflect the fact that coin's learn does not return a prediction by @jackgerrits in #4621
- fix!: no binary stuff in boosting by @ataymano in #4611
- fix: Skip of newline for single-examples by @bassmang in #4636
- fix: sparse weights iterator end->end by @bassmang in #4647
- fix: Fixing model version check for Active reduction by @peterychang in #4655
- fix: Gtest fix by @bassmang in #4657
- fix: prevent feature corruption in LRU cache by @mrucker in #4650
- fix: ParseInsitu is not compatable with rlclientlib C# bindings by @bassmang in #4668
- fix: fix #4669 by handling empty decision scores elements by @jackgerrits in #4670
- fix: Search bug fixes by @byronxu99 in #4673
- fix: set mac CI to version 13 by @bassmang in #4691
- fix: VW Slim by @byronxu99 in #4674
- fix: string-view-lite: Include
<string>
before usingstd::basic_string
by @StephanTLavavej in - fix: macos-11 -> macos-12 (deprecation) by @bassmang in #4698
- fix: remove flaky test from compat tests by @bassmang in #4699
Other Changes
- docs: update wasm docs by @jackgerrits in #4626
- test: [RLOS2023] Add new e2e test framework for vw by @michiboo in #4644
- test: check weights match by @bassmang in #4649
- refactor: use standard library for inverse sqrt by @bassmang in #4665
- refactor: [sparse_weights] get for predict by @bassmang in #4651
- build: vcpkg update by @ataymano in #4672
- build: Fix building against RapidJSON 1.1.0 as sys dep by @geofft in #4682
- docs: Fix typo in Command Line Basics tutorial by @josecumbe in #4679
- feat: direct interface for active.cc and variable rename for understandability by @beygel in #4671
- style: forgotten lint fix by @ataymano in #4688
- ci: Disable Windows-only CMake Workflow by @lokitoth in #4678
- docs: Simplification of the DFtoVW tutorial by @etiennekintzler in #4693
- refactor: option to turn on sse2 optimization by @bassmang in #4666
#4695 - feat: Visual studio 2022 CMake preset by @rajan-chari in #4656
- chore: update version to 9.10.0 by @bassmang in #4696
New Contributors
- @Sharvani2002 made their first contribution in #3989
- @geofft made their first contribution in #4682
- @josecumbe made their first contribution in #4679
- @StephanTLavavej made their first contribution in #4695
Full Changelog: 9.9.0...9.10.0
9.9.0
This release includes several new reductions including contextual bandits with graph feedback as well as a completely new interaction grounded learning reduction. There are also WASM bindings available for Vowpal Wabbit now.
Contextual Bandits with Graph Feedback
Contextual Bandits (CB) with graph feedback can be used for scenarios where some actions, when taken, reveal information other actions (not taken), or maybe don't reveal any information at all. If there exists prior knowledge of this relationship between actions then that knowledge can be used to make exploration and learning more efficient.
See here for more details.
Contextual Bandits with interaction grounded learning
Interaction grounded learning (IGL) can be used for the scenario where user doesn't have a reward function. It will automatically learn a personalized reward function from user's feedback and optimize directly for the latent user satisfaction
See here for more details
Vowpal Wabbit package in npm
Now that WASM bindings are available, Vowpal Wabbit can be used in JavaScript and TypeScript applications via the npm package. For more details, see here
Click here to see all changes in this release
What's Changed
- test: [automl] improve runtest and test changes by @lalo in #4531
- fix: fix multiline typo by @swaptr in #4533
- refactor: separate cb_to_cs_adf_mtr and cb_to_cs_adf_dr by @bassmang in #4532
- feat: add a training loss calculation to the predict method of PLT reduction by @mwydmuch in #4534
- refactor: [workspace] split 'all' into multiple structs. split config and runtime vars. by @lalo in #4493
- fix: [parser] Fix potential crash on unjoined parser thread by @peterychang in #4537
- chore: remove 404 link by @jackgerrits in #4547
- feat: system for compile feature flags by @jackgerrits in #4544
- refactor: migrate csv to feature by @jackgerrits in #4550
- feat: IGL reduction by @cheng-tan in #4295
- refactor: move to flatbuffers feature by @jackgerrits in #4553
- feat: print features in version by @jackgerrits in #4549
- build: make lda optional with compile feature by @jackgerrits in #4555
- fix: deprecated github actions by @bassmang in #4559
- feat: IGL save resume by @cheng-tan in #4554
- refactor: migrate las simd to compile feature by @jackgerrits in #4558
- build: add search compile feature by @jackgerrits in #4561
- feat(CB_GF): correct update rule and simulation unit test by @olgavrou in #4565
- feat(CB_GF): turn on graph feedback in generated python wheels by @olgavrou in #4566
- feat(CB_GF): accept graph in json format by @olgavrou in #4568
- refactor: make allow_override for vector option a compile error instead of runtime error by @jackgerrits in #4569
- fix: benchmark ci by @olgavrou in #4572
- feat: Networking compile time flag by @olgavrou in #4571
- feat: initial WASM support by @jackgerrits in #4562
- feat: WASM initial CB model API by @olgavrou in #4574
- fix: [epsilon_decay] dont use exploration for challenger p_pred by @bassmang in #4576
- feat: WASM VW JS wrapper file/classes by @olgavrou in #4575
- feat: WASM logging examples to file by @olgavrou in #4578
- fix: pydoc ci by @bassmang in #4577
- feat: WASM sample pmf and predict_and_sample by @olgavrou in #4579
- feat: IGL predict only model by @cheng-tan in #4573
- docs: WASM add jsdoc comments to vw.js by @olgavrou in #4580
- refactor: WASM separate logging class by @olgavrou in #4582
- feat: Build vw-wasm for browser plugin by @cheng-tan in #4583
- feat: Add emt_initial flag to the EMT reduction by @mrucker in #4556
- test: turn on tests for rlos2023 by @ataymano in #4586
- test: python ci on rlos PR by @ataymano in #4588
- feat: option for user to pass in an array and receive and array durin… by @olgavrou in #4584
- fix: [epsilon_decay] deterministic p_pred bug by @bassmang in #4590
- docs: add readme with examples and API docs by @olgavrou in #4592
- feat: WASM packaging by @olgavrou in #4593
- feat: WASM typescript instead of javascript for vw wrapper by @olgavrou in #4594
- fix: WASM package scoping and cleanup error class check by @olgavrou in #4596
- fix: WASM versioned docs and 0.0.4 release by @olgavrou in #4598
- fix(CB_GF): correct constraints, huge cleanup, and clip and normalize probabilities by @olgavrou in #4581
- feat: WASM both node and es6 and version bump to 0.0.5 by @olgavrou in #4601
- fix: WASM npm install and test before publish and version bump 0.0.6 by @olgavrou in #4602
- build: enable warnings for non exhaustive switches by @jackgerrits in #4570
- refactor: [eps_decay] Remove unused estimator include by @lalo in #4604
- feat: expose explore eval stats to python interface by @olgavrou in #4451
- fix: vcpkg for windows ci by @bassmang in #4608
- fix: [epsilon_decay] save_load weight indices by @bassmang in #4606
- feat: flag to save and load per model state by @bassmang in #4605
- fix: Add error message when passing unsigned integers to tovw by @jackgerrits in #4610
- perf: only format model values if writing text model by @jackgerrits in #4613
- feat: add dense example creation func to wasm by @jackgerrits in #4615
- fix: changing ftrl defaults by @ataymano in #4607
- fix: hide graph feedback tests behind flag by @bassmang in #4617
- chore: update version to 9.9.0 by @jackgerrits in #4625
New Contributors
Full Changelog: 9.8.0...9.9.0
9.8.0
General Notes
Upgrades to benchmarking, naming conventions, and minor bug fixes.
Click here to see all changes in this release
What's Changed
Features
- feat: Switch to scalar code for unimplemented interactions in las simd code path. by @zwd-ms in #4487
- feat: support tags for options by @jackgerrits in #4507
- feat: [gd] persist ppw extra state by @lalo in #4023
- feat: [LAS] add example ft hash and cache and re-use rows of matrix if actions do not change by @olgavrou in #4509
- feat: [LAS] with CCB by @olgavrou in #4520
Fixes
- fix: move explore_eval above epsilon_decay by @bassmang in #4501
- fix: [epsilon_decay] output prob ACTION_PROBS, skip: 449 by @bassmang in #4502
- fix: skip compat tests by @bassmang in #4503
- fix: Fix model merging not reweighting input by @jackgerrits in #4508
- fix: [epsdecay] return champ prediction always by @lalo in #4518
- fix: cbzo ppw fix by @bassmang in #4519
- fix: multi-model state for cb_adf by @bassmang in #4513
- fix: [automl] avoid ccb pulling in generate_interactions by @lalo in #4524
Other Changes
- refactor: split out 400+ valgrind tests by @bassmang in #4482
- build: Don't add SSE flags when cross compiling to MacOS universal2 binary by @jackgerrits in #4489
- refactor: Migrate raw function pointers to std::function by @byronxu99 in #4461
- refactor: [all] remove cost_sensitive from workspace by @lalo in #4490
- refactor: [sd] move prog val config to sd by @lalo in #4491
- chore: update submodules by @bassmang in #4492
- ci: [epsilon_decay] benchmarks by @bassmang in #4494
- refactor: register additional metrics at start not at finish by @jackgerrits in #4499
- chore: force eigen submodule path to output a message if submodule mi… by @olgavrou in #4504
- refactor: allow any pointer in object_pool by @jackgerrits in #4473
- chore: [LAS] don't force mtr with LAS by @olgavrou in #4516
- test: fix pytype issue in test runner and utl by @jackgerrits in #4517
- refactor: make flat_example an implementation detail of ksvm by @jackgerrits in #4505
- refactor: automatically set label parser after stack created by @jackgerrits in #4471
- refactor: add api to set data object associated with learner by @jackgerrits in #4523
- refactor: dedup dict const by @bassmang in #4525
- refactor: rename wpp, ppw, ws, params_per_problem, problem_multiplier, num_learners, increment -> feature_width by @bassmang in #4521
- refactor: remove resize in gd setup by @bassmang in #4526
- chore: Update Version to 9.8.0 by @bassmang in #4529
Full Changelog: 9.7.0...9.8.0
9.7.0
Eigen Memory Tree
An Eigen Memory Tree (EMT) is a memory based learning reduction. EMTs will remember previous training examples and use this memory to assign labels to future requested predictions. For more information, see the EMT wiki page
Robust confidence sequence estimator
Cubic config oracle in automl
We are now able to search over cubic interactions on top of quadratic interactions in automl . Automl
Vector CPU instructions
Vector CPU instructions for faster computation in the CB with Large Action Space reduction. LAS
Predict only models
Ability to save predict only models from some reductions (automl, epsilon-decay). this removes the reductions from the reduction stack and allows older versions of VW to predict.
Enforce minimum probability for SquareCB
[SquareCB] (https://github.com/VowpalWabbit/vowpal_wabbit/wiki/Contextual-Bandit-Exploration-with-SquareCB)
Support for probabilities for PLT
Added support for probabilities output for the PLT reduction + fix it in version 9+.
Target rate added to explore eval
The goal of explore eval is to evaluate different exploration algorithms using the data from a logged policy. Explore Eval
VW refactors
- Improved finish_example in all reductions
- Parsers for different formats moved into their own libraries
- Namespacing of library fixed - all things under VW
Click here to see all changes in this release
What's Changed
Features
- feat: explore eval example target rate by @olgavrou in #4277
- feat: [gd] invert_hash readeable model with hexfloat by @lalo in #3999
- feat: explore eval target rate by @olgavrou in #4285
- feat: Add explicit simd implementation for one pass svd in large action spaces. by @zwd-ms in #4261
- feat: Add avx2 implementation for one pass svd in large action spaces. by @zwd-ms in #4281
- feat: Handle ignore_linear in las simd and throw on unsupported interactions. by @zwd-ms in #4282
- feat: spin off automl predict_only_model to standard cb model by @bassmang in #4279
- feat: add mix with uniform impl by @jackgerrits in #4301
- feat: Enforce minimum probability for squarecb and update impl by @jackgerrits in #4298
- feat: add unique_ptr support to model_utils by @jackgerrits in #4341
- feat: use strong type for no pred by @jackgerrits in #4343
- feat: use strong type for no label by @jackgerrits in #4342
- feat: Adding EMT reduction. by @mrucker in #4264
- feat: [automl] trace to csv files by @lalo in #4355
- feat: robust confidence sequence estimator by @bassmang in #4297
- feat: [automl] config oracle cubic on top of quadratic by @lalo in #4351
- feat: update for probabilistic label tree reduction (#2766) - support for --probabilities option and fixed compatibility with VW 9+ version by @mwydmuch in #4138
- feat: constexpr uniform_hash and type fixes by @jackgerrits in #4415
- feat: Enable learner type checks at build. by @zwd-ms in #4411
- feat: stabilize unique_ptr based initialize function by @jackgerrits in #4438
- feat: Added new CCB predict benchmark by @rajan-chari in #4421
- feat: [CB_GF] CB with graph feedback text input by @olgavrou in #4392
- feat: [epsilon_decay] predict_only_model by @bassmang in #4458
Fixes
- fix!: resolve csoaa_ldf prediction return correctness by @jackgerrits in #4395
- fix!: [LAS] las + squarecb to re-use squarecb gamma by @olgavrou in #4479
- fix!: [py] use full word for namespace and add test by @lalo in #4485
- fix: [Explore_eval] fix threshold for adaptive multiplier by @marco-rossi29 in #4168
- fix: Add pragma once to merge.h by @byronxu99 in #4284
- fix: [epsilon_decay] process models in descending order when shifting by @bassmang in #4286
- fix: [CI] check for missing args consistently in forwards/backwards compat by @olgavrou in #4289
- fix: [CI] backwards compat don't fail if model file is missing by @olgavrou in #4291
- fix: silence unused warning when las simd not enabled by @jackgerrits in #4299
- fix: Build las simd on x86 only and rename command line flag. by @zwd-ms in #4300
- fix: [automl] update champ score when it matches labelled_action by @lalo in #4326
- fix: fix get_features function returning dangling pointer by @jackgerrits in #4328
- fix: [automl] config oracle edge cases by @lalo in #4327
- fix: remove type numpy aliases as they are now removed upstream by @jackgerrits in #4363
- fix: fix loop binding to temporary by @jackgerrits in #4379
- fix: [automl] update print logic for new oracle by @lalo in #4384
- fix: exception safety in learner builder by @jackgerrits in #4429
- fix: remove cerr from cs_robust by @bassmang in #4441
- fix: [automl/epsilon_decay] brentq optimization by @bassmang in #4449
- fix: pydocs formatting by @bassmang in #4464
- fix: invert_hash for coin/ftrl by @bassmang in #4465
- fix: Account for | in make_valid_name() by @darwinyip in #4468
- fix: [LAS] LAS not a cb adf common reduction, fixes metrics with LAS bug by @olgavrou in #4476
- fix: [automl] allow multiple models underneath automl by @bassmang in #4463
- fix: include t, min and max label in model merging by @jackgerrits in #4483
Other Changes
- ci: use shared caches for vcpkg job by @jackgerrits in #4270
- build: add missing include by @jackgerrits in #4275
- refactor: use model utils instead of macro in recall tree by @jackgerrits in #4248
- refactor: [automl] remove lb_trick by @bassmang in #4283
- docs: Update off_policy_evaluation.md by @olgavrou in #4280
- ci: compatibility CI checks to not fail on newly added arguments by @olgavrou in #4287
- test: remove flaky test (win) by @lalo in #4290
- build: Use nix to manage dev tooling starting with clang-tidy by @jackgerrits in #4292
- build: remove regex from clang-tidy-diff command as it wasnt working by @jackgerrits in #4294
- chore: use clang-format-14 for formatting by @jackgerrits in #4302
- build: consume string-view-lite as a sys dep for vcpkg by @jackgerrits in #4303
- refactor: implement scaffold for finish_example split and POC migrations by @jackgerrits in #4296
- refactor: move csv parser into csv namespace by @jackgerrits in #4304
- refactor: split apart output and progressive log by @jackgerrits in #4308
- refactor: move accumulate funcs into details namespace by @jackgerrits in #4305
- refactor: migrate mwt finish_example by @jackgerrits in https://github.com/VowpalWabbit/vow...
9.6.0
Large Action Spaces
This introduces the Large Actions Spaces (LAS) feature. LAS is an algorithm that lets exploration happen efficiently when there are a large number of actions in a contextual bandit dataset. The main idea behind it is to eliminate actions that are similar and explore only over the most diverse actions in the dataset. For more information, see the LAS wiki page.
Style Changes
This release introduces additional style changes to make VW code formatting more consistent. Variable and type names are snake_case
, constants and macros are UPPERCASE
, and the VW::details
namespace is used to hide implementation details.
Faster Compile Times
Through @jackgerrits's changes to some header files, VW now builds much faster! On one machine, compile times went from around 30 seconds to 17.
Click here to see all changes in this release
What's Changed
- build: remove FORCE_COLORED_OUTPUT by @jackgerrits in #4213
- style: fix some more style issues by @jackgerrits in #4211
- feat: implement serialization and deserialization for model deltas by @jackgerrits in #4222
- chore: update boost_math, fmt, vcpkg, zlib by @bassmang in #4223
- style: another round of style updates by @jackgerrits in #4224
- style: update style and namespacing for constants by @jackgerrits in #4226
- fix: [LAS] don't use shared features during SVD calculation by @olgavrou in #4225
- fix: [LAS] ensure vw prediction makes it to exploration by @olgavrou in #4227
- fix: VW should not add anything to namespace std by @jackgerrits in #4230
- style: update style of label_type_t by @jackgerrits in #4229
- test: [epsilon decay] find champ change in simulator by @bassmang in #4228
- refactor: reduce build time by @jackgerrits in #4232
- feat: [LAS] filter out (potentially) more actions than d based on singular values by @olgavrou in #4234
- build: do not add sse flags when doing MacOS arm cross build by @jackgerrits in #4235
- style: update label type to all caps by @bassmang in #4236
- style: update prediction type to all caps by @bassmang in #4237
- build: allow VW_CXX_STANDARD to be provided by consumer of VW by @jackgerrits in #4238
- refactor: remove beam.h by @jackgerrits in #4241
- style: more style fixes by @jackgerrits in #4240
- style: another round of style updates by @jackgerrits in #4242
- feat: [LAS] sparse Rademacher by @olgavrou in #4243
- chore: [LAS] remove unused implementations and set max actions default by @olgavrou in #4247
- refactor: move LabelDict namespace items into other namespaces, add const by @jackgerrits in #4245
- fix: don't run tests with iterations (and a simulator) with valgrind … by @olgavrou in #4251
- chore: [LAS] remove compile time flag and its own custom CI by @olgavrou in #4249
- fix: don't run tests with iterations with asan and ubsan by @olgavrou in #4253
- fix: [LAS] block size should never be zero by @olgavrou in #4252
- fix: [LAS] always return full predictions by @olgavrou in #4255
- refactor: use model_utils for save_load in las by @jackgerrits in #4263
- refactor: remove unused field in sparse_iterator by @jackgerrits in #4259
- test: add make_args for easier workspace creation in tests by @jackgerrits in #4267
- ci: change caching for benchmark job by @jackgerrits in #4269
- build: resolve cmake version check TODO in DetectCXXStandard.cmake by @jackgerrits in #4268
- fix!: save/load entire tag in flat_example + bump version to 9.6 by @bassmang in #4266
- test: apply make_args across test projects by @jackgerrits in #4272
- fix: This patches a bug with flat_example collision cleanup by @mrucker in #4265
- fix: explore_eval don't learn if logged action not in predicted actions by @olgavrou in #4262
- fix: [LAS] full predictions regardless of learn/predict path by @olgavrou in #4273
Full Changelog: 9.5.0...9.6.0
9.5.0
Style Changes
This release includes some improvements to the style and naming conventions in VW. This includes using snake_case
for all variable and class names, and converting most structs to classes. These style changes will be standardized and enforced in later releases.
Confidence Sequence Estimator
Confidence sequences have become the default estimators when evaluating policies in multi-model reductions such as AutoML and Epsilon Decay.
Click here to see all changes in this release
Changes
Features
- feat: integrate confidence sequences in automl and epsilon_decay by @bassmang in #4125
- feat: add experimental to python by @bassmang in #4165
- feat: Improve large actions multithreading. by @zwd-ms in #4158
- feat: [epsilon decay] add initial epsilon option by @bassmang in #4170
- feat: Model merging with delta objects by @byronxu99 in #4177
- feat: Add ftrl to dump_weights_to_json and compat CIs by @bassmang in #4193
Fixes
- fix: build issue for model merger tool by @jackgerrits in #4160
- fix: remove experimental and fix up model version test by @bassmang in #4162
- fix: test 67 windows failure by @bassmang in #4167
- fix: one_of for loss_option by @bassmang in #4178
- fix: Fix test 67 by @jackgerrits in #4194
- fix: small build fixes for LAS on MacOS by @jackgerrits in #4202
- fix: LAS unit test bug by @bassmang in #4210
- fix: quake_inv_sqrt func for aarch64 test failure by @bassmang in #4217
- fix: only remove ksvm dump_weights by @bassmang in #4195
- fix: Add native runtime dependencies to nuspec by @lokitoth in #4216
Other Changes
- chore: [LAS] code cleanup by @olgavrou in #4153
- ci: Upgrade Ubuntu version used in CI pipelines by @byronxu99 in #4161
- ci: check current VW wheel against most recent models by @bassmang in #4169
- ci: Enable test 67 with ASan by @byronxu99 in #4176
- refactor: Use github-action-benchmark for running benchmarks by @byronxu99 in #4152
- docs: Update readme for benchmarks by @byronxu99 in #4181
- ci: check model weights for gd-based tests for forward and backward compat by @bassmang in #4172
- style: resolve style issues in allreduce project by @jackgerrits in #4187
- refactor: cleanup includes by @jackgerrits in #4188
- refactor: split sparse and dense parameters by @jackgerrits in #4190
- refactor: move open_socket into details namespace by @jackgerrits in #4189
- refactor: use operators for inequality instead of custom compare functions by @jackgerrits in #4192
- refactor: remove unused type in allreduce by @jackgerrits in #4191
- ci: settle on consistent style and add warnings for violation by @jackgerrits in #4183
- style: fix style issues in config by @jackgerrits in #4198
- style: don't warn on short variable names, add static constant rule by @jackgerrits in #4196
- style: move action scores into VW namespace by @jackgerrits in #4199
- style: update allreduce to snake_case by @jackgerrits in #4197
- refactor: replace classes with structs for consistency by @bassmang in #4205
- refactor: move ccb items into VW namespace by @jackgerrits in #4204
- style: rename label_data to VW::simple_label by @jackgerrits in #4200
- ci: Fix randomly failing .NET benchmarks by @byronxu99 in #4209
- refactor: move several labels into VW namespace, style updates by @jackgerrits in #4206
- style: apply more style fixes per clang-tidy by @jackgerrits in #4208
- docs: only document public includes with doxygen by @jackgerrits in #4212
- refactor: update structs to classes with public by @bassmang in #4215
- style: style fixes in io project by @jackgerrits in #4201
- refactor: No RapidJSON in header files by @byronxu99 in #4219
- refactor: remove empty public: by @bassmang in #4220
- chore: Update Version to 9.5.0 by @bassmang in #4221
Full Changelog: 9.4.0...9.5.0
9.4.0
We tagged 9.4.0
a few weeks ago but a few delays caused the rest of the release to only be completed now. The contents of these release notes and all associated artifacts correspond to the 9.4.0
tag on September 15.
DotNet Core
DotNet core support is here! It works if you manually import dependencies, but it will become automatic in the upcoming 9.4.1
.
Native CSV Parser
As part of RLOS Fest this year @HollowMan6 implemented Native CSV parsing support. It is currently disabled by default but is available using a CMake option (VW_BUILD_CSV
). This feature makes it possible to download CSV datasets and process them without any extra steps. @HollowMan6 also created a tutorial to explain how to use the feature on the well known iris dataset. Thanks for all of your hard work!
Click here to see all changes in this release
Changes
Features
- feat: native CSV parsing by @HollowMan6 in #4073
- feat: [las] spanner rank one determinant update implementation by @olgavrou in #4090
- feat: confidence sequences estimator by @bassmang in #4120
- feat: .NET Core Support by @lokitoth in #3969
- feat: Semantic Versioning by @byronxu99 in #4134
- feat: ptr queue to generic queue by @olgavrou in #4140
- feat: simple thread pool by @olgavrou in #4137
- feat: [LAS] use thread pool in LAS one_pass implementation by @olgavrou in #4141
- feat: Performance benchmarks for .NET C# bindings by @byronxu99 in #4133
Fixes
- fix: [automl] multiple fixes by @lalo in #4089
- fix: [las] unit-test-fails to link by @lalo in #4118
- fix: dump_options typo by @bassmang in #4119
- fix: [automl] call process_example before predict by @lalo in #4122
- fix: [automl] generate challengers on first example by @lalo in #4123
- fix(csv): default label regardless of if label column present by @jackgerrits in #4127
- fix: Fix minor typos in large action space benchmarks by @zwd-ms in #4128
- fix: add one_of to csoaa_ldf by @bassmang in #4130
- fix: Only create launch_vs target if it does not already exist by @byronxu99 in #4135
Other changes
- refactor: [automl] split config oracle out by @lalo in #4107
- refactor: [automl] move files to details dir by @lalo in #4108
- refactor: [automl] small refactors by @lalo in #4109
- refactor: clear labels before reading from cache by @bassmang in #4113
- refactor: [automl] template for oracle by @lalo in #4111
- chore: [las] separate spanners and remove aatop SVD impl by @olgavrou in #4116
- test: [automl] add unit tests for oracle & refactor by @lalo in #4115
- refactor: [automl] remove estimator dependency from oracle by @lalo in #4117
- refactor: [automl] prepare aml_estimator for other estimator impl by @lalo in #4114
- test: add csv parser to throughput measurement tool by @jackgerrits in #4110
- ci: check all runtests models for forwards model compatibility by @olgavrou in #4126
- ci: clang-tidy only errors by @lalo in #4129
- ci: Build and test with AddressSanitizer by @byronxu99 in #4103
- refactor: [automl] iterator based config generators by @lalo in #4121
- perf: [LAS] speedup by removing branch from hot path by @olgavrou in #4136
- test: Resolve gtest loading issues on Windows by @jackgerrits in #4131
- docs: pin theme to 0.9.0 to resolve missing TOC by @jackgerrits in #4139
- ci: Fix pytype error by @byronxu99 in #4142
- build: fix windows.h GetObject issue by @jackgerrits in #4143
- refactor: [automl] allow_override for selected options by @bassmang in #4144
- test: [LAS ] add spanner tests and test file separation by @olgavrou in #4146
- test: [LAS] calculate num of non-degenerate singular values by @olgavrou in #4147
- docs: [LAS] add some comments in the code explaining one-pass SVD by @olgavrou in #4148
- refactor: one_of for wap_ldf and cbzo, clean rank options by @bassmang in #4145
- chore: Update Version to 9.4.0 by @lokitoth in #4151
Full Changelog: 9.3.0...9.4.0
9.3.0
This release includes a new experimental feature to merge VW models and bug fixes.
9.2.0
This release includes a large refactoring of the library structure, support for learn and predict directly from a string in Java, access to model weights in Python, and many more small features and bug fixes.
9.1.0
This release includes a new way to output readable weights, removal of the Boost Program Options dependency, a new loss function and plenty of bug fixes.