ONNX export of a reloaded NgramExtractingTransformer (useAllLengths: true) writes min_gram_length = ngramLength — the exported graph counts only the longest n-grams
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 72/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- csharp, machine-learning
- Lĩnh vực
- backend, machine-learning
Hướng nghiên cứu
Start by tracing ONNX export for NgramExtractingTransformer, comparing the export path immediately after Fit with the path after Model.Save and Model.Load. The issue provides a minimal C# reproduction and expected graph attributes: min_gram_length should be 1 with useAllLengths: true. Reproduce the value mismatch on the provided text output and confirm the reloaded export counts all n-gram lengths.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
System information
- Microsoft.ML 5.0.1, Microsoft.ML.OnnxConverter 0.23.1, Microsoft.ML.OnnxRuntime 1.31.0
- .NET 10 (net10.0), macOS arm64
Describe the bug
An NgramExtractingTransformer created with useAllLengths: true exports to ONNX correctly when it is converted straight after Fit. After a Model.Save / Model.Load round trip, the same transformer exports a TfIdfVectorizer node with min_gram_length equal to max_gram_length. The resulting graph counts only the longest n-grams. The conversion reports success, so nothing shows that the graph is wrong.
To reproduce
Text column of the UCI SMS Spam Collection (4,459 training rows, 1,115 compared):
var t = ml.Transforms.Text.TokenizeIntoCharactersAsKeys("c", "text")
.Append(ml.Transforms.Text.ProduceNgrams("text", "c", ngramLength: 4, useAllLengths: true,
weighting: NgramExtractingEstimator.WeightingCriteria.Tf))
.Fit(train);
The text output vector (width 75,141) from ML.NET, compared with the same output of the exported graph run in ONNX Runtime:
| rows that differ | |
|---|---|
t exported directly (ml.Model.ConvertToOnnx(t, train, stream, "text")) |
0 / 1,115 |
ml.Model.Save(t, …) → ml.Model.Load(…) → export |
1,115 / 1,115 |
In the graph of the reloaded transformer, the TfIdfVectorizer node has min_gram_length: 4, max_gram_length: 4 while ngram_counts is [0, 112, 6500, 59291]. The pool holds 1-, 2-, 3- and 4-grams, but only 4-grams are counted, so every 1–3-gram slot is 0. A logistic regression trained on these features scores every row of the reloaded export at about its intercept (probability ≈ 0.0017; ML.NET gives 0.0000–1.0000).
Workaround: use one ProduceNgrams per length (useAllLengths: false, lengths 1..4) followed by Concatenate. This exports correctly after a reload.
Expected behavior
The exported min_gram_length is 1 when useAllLengths is true, whether or not the transformer went through Model.Save / Model.Load. In other words, the all-lengths setting survives deserialization in what the ONNX save path reads.
Why it matters
Models are usually exported from a saved file (train → save → export later). In that path the conversion succeeds and the graph silently produces different values. Only a value-by-value comparison catches it.
- Ngôn ngữ chính
- C#
- Star
- 9.4k
- Fork
- 2k
- Merge trung bình
- 2 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 64
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của dotnet/machinelearning
-
area-Native untriaged
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
dotnet/machinelearning#7837 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area-TensorFlow untriaged
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
dotnet/machinelearning#7836 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
ToArrowRecordBatches accumulates arrays from previous batches, producing invalid record batchesĐang mởarea-DataFrame bug untriaged
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
dotnet/machinelearning#7799 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
LlamaTokenizer encodes some runs of repeated characters differently from SentencePieceCó thể đã có người làm @Laurianti đã nhận 42 ngày trước. Đang mởarea-Tokenizers untriaged
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
dotnet/machinelearning#7751 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
BertTokenizer merges words separated only by `\n`, `\t` or `\r`Có thể đã có người làm @Laurianti đã nhận 23 ngày trước. Đang mởarea-Tokenizers green
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
dotnet/machinelearning#7724 · 3 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của dotnet/machinelearning
Issue tương tự
-
bug emitter:client:csharp
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
microsoft/typespec#12572 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
needs-area-label
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 2 ngày
-
AWS Lambda: KeyNotFoundException drops HTTP-triggered transactions when allowAllHeaders is disabledĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
newrelic/newrelic-dotnet-agent#3949 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area-networking
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
dotnet/aspnetcore#70545 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 87/100
Maintainer thường phản hồi trong vòng 1 ngày