Skip to content

Commit 7ba2d9d

Browse files
authored
chore(ml): update to the latest version of the reading level model (#2365)
2 parents 5304ba4 + 885dcce commit 7ba2d9d

File tree

3 files changed

+65
-55
lines changed

3 files changed

+65
-55
lines changed

pom-dependency-tree.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
ai.elimu:webapp:war:2.6.150-SNAPSHOT
1+
ai.elimu:webapp:war:2.6.151-SNAPSHOT
22
+- ai.elimu:model:jar:model-2.0.128:compile
33
| \- com.google.code.gson:gson:jar:2.13.1:compile
44
| \- com.google.errorprone:error_prone_annotations:jar:2.38.0:compile
Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
22
<PMML xmlns="http://www.dmg.org/PMML-4_4" xmlns:data="http://jpmml.org/jpmml-model/InlineTable" version="4.4">
33
<Header>
4-
<Application name="SkLearn2PMML package" version="0.110.0"/>
5-
<Timestamp>2024-08-17T11:40:01Z</Timestamp>
4+
<Application name="SkLearn2PMML package" version="0.126.0"/>
5+
<Timestamp>2026-04-05T10:55:37Z</Timestamp>
66
</Header>
77
<DataDictionary>
88
<DataField name="reading_level" optype="continuous" dataType="double"/>
@@ -31,41 +31,74 @@
3131
<Node score="4.0">
3232
<True/>
3333
<Node score="2.0">
34-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="319.0"/>
35-
<Node score="1.0">
36-
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="15.5"/>
34+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="507.0"/>
35+
<Node score="2.0">
36+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="210.0"/>
3737
<Node score="1.0">
38-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="210.0"/>
39-
<Node score="1.0">
40-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="127.0"/>
41-
</Node>
38+
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="15.5"/>
4239
<Node score="2.0">
43-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="135.5"/>
40+
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="7.5"/>
41+
<Node score="1.0">
42+
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="23.5"/>
43+
<Node score="1.0">
44+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="126.0"/>
45+
</Node>
46+
<Node score="2.0">
47+
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="15.5"/>
48+
</Node>
49+
</Node>
4450
</Node>
4551
</Node>
46-
<Node score="2.0">
47-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="234.5"/>
52+
<Node score="1.0">
53+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="123.0"/>
4854
</Node>
4955
</Node>
5056
<Node score="1.0">
51-
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="20.0"/>
57+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="266.0"/>
58+
<Node score="3.0">
59+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="257.0"/>
60+
<Node score="2.0">
61+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="252.5"/>
62+
<Node score="1.0">
63+
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="10.0"/>
64+
</Node>
65+
</Node>
66+
</Node>
5267
</Node>
53-
</Node>
54-
<Node score="2.0">
55-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="521.5"/>
56-
<Node score="3.0">
57-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="383.5"/>
68+
<Node score="4.0">
69+
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="6.5"/>
70+
</Node>
71+
<Node score="1.0">
72+
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="7.5"/>
73+
</Node>
74+
<Node score="2.0">
75+
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="10.5"/>
76+
<Node score="2.0">
77+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="305.0"/>
78+
</Node>
79+
<Node score="3.0">
80+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="389.0"/>
81+
</Node>
5882
</Node>
5983
</Node>
6084
<Node score="2.0">
61-
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="51.5"/>
85+
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="50.5"/>
86+
<Node score="4.0">
87+
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="11.0"/>
88+
</Node>
6289
<Node score="3.0">
6390
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="47.5"/>
64-
<Node score="4.0">
65-
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="559.5"/>
91+
<Node score="2.0">
92+
<SimplePredicate field="double(word_count)" operator="lessOrEqual" value="561.5"/>
6693
</Node>
6794
</Node>
6895
</Node>
96+
<Node score="3.0">
97+
<SimplePredicate field="double(paragraph_count)" operator="lessOrEqual" value="54.5"/>
98+
<Node score="4.0">
99+
<SimplePredicate field="double(chapter_count)" operator="lessOrEqual" value="18.0"/>
100+
</Node>
101+
</Node>
69102
</Node>
70103
</TreeModel>
71104
</PMML>

src/test/java/ai/elimu/util/ml/ReadingLevelUtilTest.java

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,30 @@
55

66
import static org.junit.jupiter.api.Assertions.assertEquals;
77

8+
/**
9+
* Simple tests for verifying that the machine learning model is not broken.
10+
* The test parameters are based on the regression lines visualized at
11+
* https://github.com/elimu-ai/ml-storybook-reading-level/tree/main/pmml/step1_prepare
12+
*/
813
public class ReadingLevelUtilTest {
914

1015
@Test
1116
public void testPredictReadingLevel_Level1() {
12-
13-
int chapterCount = 12;
14-
int paragraphCount = 18;
15-
int wordCount = 150;
16-
17-
ReadingLevel result = ReadingLevelUtil.predictReadingLevel(chapterCount, paragraphCount, wordCount);
18-
assertEquals(ReadingLevel.LEVEL1, result, "Expected ReadingLevel to be LEVEL1, but got: " + result);
19-
17+
assertEquals(ReadingLevel.LEVEL1, ReadingLevelUtil.predictReadingLevel(10, 16, 100));
2018
}
2119

2220
@Test
2321
public void testPredictReadingLevel_Level2() {
24-
25-
int chapterCount = 20;
26-
int paragraphCount = 30;
27-
int wordCount = 300;
28-
29-
ReadingLevel result = ReadingLevelUtil.predictReadingLevel(chapterCount, paragraphCount, wordCount);
30-
assertEquals(ReadingLevel.LEVEL2, result, "Expected ReadingLevel to be LEVEL2, but got: " + result);
31-
22+
assertEquals(ReadingLevel.LEVEL2, ReadingLevelUtil.predictReadingLevel(12, 32, 500));
3223
}
3324

3425
@Test
3526
public void testPredictReadingLevel_Level3() {
36-
37-
int chapterCount = 25;
38-
int paragraphCount = 40;
39-
int wordCount = 350;
40-
41-
ReadingLevel result = ReadingLevelUtil.predictReadingLevel(chapterCount, paragraphCount, wordCount);
42-
assertEquals(ReadingLevel.LEVEL3, result, "Expected ReadingLevel to be LEVEL3, but got: " + result);
43-
27+
assertEquals(ReadingLevel.LEVEL3, ReadingLevelUtil.predictReadingLevel(15, 45, 900));
4428
}
4529

4630
@Test
4731
public void testPredictReadingLevel_Level4() {
48-
49-
int chapterCount = 15;
50-
int paragraphCount = 45;
51-
int wordCount = 559;
52-
53-
ReadingLevel result = ReadingLevelUtil.predictReadingLevel(chapterCount, paragraphCount, wordCount);
54-
assertEquals(ReadingLevel.LEVEL4, result, "Expected ReadingLevel to be LEVEL4, but got: " + result);
55-
32+
assertEquals(ReadingLevel.LEVEL4, ReadingLevelUtil.predictReadingLevel(17, 60, 1_200));
5633
}
57-
}
34+
}

0 commit comments

Comments
 (0)