David Pomerenke commited on
Commit
50128d8
·
1 Parent(s): 1983d1c

Add number of speakers

Browse files
Files changed (5) hide show
  1. index.html +38 -3
  2. languagebench.py +17 -2
  3. languages.rq +28 -0
  4. languages.tsv +0 -0
  5. results.json +60 -0
index.html CHANGED
@@ -10,6 +10,17 @@
10
  padding: 20px;
11
  font-family: sans-serif;
12
  }
 
 
 
 
 
 
 
 
 
 
 
13
  </style>
14
  </head>
15
 
@@ -25,15 +36,39 @@
25
  const response = await fetch('results.json');
26
  const results = await response.json();
27
 
28
- const languages = [...new Set(results.map(r => r.target_language))];
 
 
 
 
 
 
 
 
 
 
 
 
29
  const chartsDiv = document.getElementById('charts');
30
 
31
  languages.forEach(language => {
 
 
 
32
  const h2 = document.createElement('h2');
33
  h2.textContent = language;
34
- chartsDiv.appendChild(h2);
 
 
 
 
 
 
 
 
 
35
 
36
- const languageData = results.filter(r => r.target_language === language);
37
 
38
  // Create plot using the more idiomatic Observable Plot approach
39
  const plot = Plot.plot({
 
10
  padding: 20px;
11
  font-family: sans-serif;
12
  }
13
+
14
+ .language-header {
15
+ margin-bottom: 10px;
16
+ }
17
+
18
+ .speaker-count {
19
+ font-size: 0.8em;
20
+ color: #666;
21
+ font-weight: normal;
22
+ margin: 0;
23
+ }
24
  </style>
25
  </head>
26
 
 
36
  const response = await fetch('results.json');
37
  const results = await response.json();
38
 
39
+ // Get unique languages with their speaker counts
40
+ const languageMap = new Map();
41
+ results.forEach(r => {
42
+ if (!languageMap.has(r.target_language_name)) {
43
+ languageMap.set(r.target_language_name, r.speakers);
44
+ }
45
+ });
46
+
47
+ // Sort languages by speaker count (descending)
48
+ const languages = [...languageMap.entries()]
49
+ .sort((a, b) => b[1] - a[1])
50
+ .map(([lang]) => lang);
51
+
52
  const chartsDiv = document.getElementById('charts');
53
 
54
  languages.forEach(language => {
55
+ const headerDiv = document.createElement('div');
56
+ headerDiv.className = 'language-header';
57
+
58
  const h2 = document.createElement('h2');
59
  h2.textContent = language;
60
+ h2.style.marginBottom = '5px';
61
+
62
+ const speakerP = document.createElement('p');
63
+ speakerP.className = 'speaker-count';
64
+ const speakerCount = (languageMap.get(language) / 1_000_000).toFixed(1);
65
+ speakerP.textContent = `${speakerCount}M speakers`;
66
+
67
+ headerDiv.appendChild(h2);
68
+ headerDiv.appendChild(speakerP);
69
+ chartsDiv.appendChild(headerDiv);
70
 
71
+ const languageData = results.filter(r => r.target_language_name === language);
72
 
73
  // Create plot using the more idiomatic Observable Plot approach
74
  const plot = Plot.plot({
languagebench.py CHANGED
@@ -4,10 +4,11 @@ import os
4
  from os import getenv
5
 
6
  import evaluate
 
7
  from dotenv import load_dotenv
 
8
  from openai import AsyncOpenAI
9
  from tqdm.asyncio import tqdm_asyncio
10
- from joblib.memory import Memory
11
 
12
  # config
13
  models = [
@@ -17,9 +18,10 @@ models = [
17
  "qwen/qwen-2.5-72b-instruct",
18
  "meta-llama/llama-3.1-8b-instruct",
19
  ]
 
20
  original_language = "eng_Latn"
21
  dataset = "floresp-v2.0-rc.3/dev"
22
- # target_languages = [f.split(".")[1] for f in os.listdir(dataset)]
23
  target_languages = [
24
  "eng_Latn",
25
  "deu_Latn",
@@ -34,9 +36,11 @@ load_dotenv()
34
  client = AsyncOpenAI(
35
  base_url="https://openrouter.ai/api/v1",
36
  api_key=getenv("OPENROUTER_API_KEY"),
 
37
  )
38
  cache = Memory(location=".cache", verbose=0).cache
39
  bleu = evaluate.load("sacrebleu")
 
40
 
41
 
42
  @cache
@@ -54,6 +58,14 @@ async def translate(model, target_language, sentence):
54
  return reply.choices[0].message.content
55
 
56
 
 
 
 
 
 
 
 
 
57
  async def main():
58
  n = 30
59
  results = []
@@ -71,11 +83,14 @@ async def main():
71
  metrics = bleu.compute(
72
  predictions=predictions, references=target_sentences[:n]
73
  )
 
74
  results.append(
75
  {
76
  "model": model,
77
  "original_language": original_language,
78
  "target_language": target_language,
 
 
79
  "bleu": metrics["score"],
80
  }
81
  )
 
4
  from os import getenv
5
 
6
  import evaluate
7
+ import pandas as pd
8
  from dotenv import load_dotenv
9
+ from joblib.memory import Memory
10
  from openai import AsyncOpenAI
11
  from tqdm.asyncio import tqdm_asyncio
 
12
 
13
  # config
14
  models = [
 
18
  "qwen/qwen-2.5-72b-instruct",
19
  "meta-llama/llama-3.1-8b-instruct",
20
  ]
21
+ # models = ["gpt-4o-mini"]
22
  original_language = "eng_Latn"
23
  dataset = "floresp-v2.0-rc.3/dev"
24
+ target_languages = sorted([f.split(".")[1] for f in os.listdir(dataset)][:10])
25
  target_languages = [
26
  "eng_Latn",
27
  "deu_Latn",
 
36
  client = AsyncOpenAI(
37
  base_url="https://openrouter.ai/api/v1",
38
  api_key=getenv("OPENROUTER_API_KEY"),
39
+ # api_key=getenv("OPENAI_API_KEY"),
40
  )
41
  cache = Memory(location=".cache", verbose=0).cache
42
  bleu = evaluate.load("sacrebleu")
43
+ language_stats = pd.read_csv("languages.tsv", sep="\t")
44
 
45
 
46
  @cache
 
58
  return reply.choices[0].message.content
59
 
60
 
61
+ def get_language_stats(language_code):
62
+ lang, script = language_code.split("_")
63
+ stats = language_stats[language_stats["iso639_3"] == lang]
64
+ if stats.empty:
65
+ return dict()
66
+ return stats.iloc[0].to_dict()
67
+
68
+
69
  async def main():
70
  n = 30
71
  results = []
 
83
  metrics = bleu.compute(
84
  predictions=predictions, references=target_sentences[:n]
85
  )
86
+ stats = get_language_stats(target_language)
87
  results.append(
88
  {
89
  "model": model,
90
  "original_language": original_language,
91
  "target_language": target_language,
92
+ "target_language_name": stats.get("itemLabel_en", target_language),
93
+ "speakers": stats.get("maxSpeakers"),
94
  "bleu": metrics["score"],
95
  }
96
  )
languages.rq ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # https://query.wikidata.org/
2
+ SELECT DISTINCT ?item (MAX(?numberOfSpeakers) AS ?maxSpeakers) (MAX(?speakersTime) AS ?mostRecentTime) ?iso639_1 ?iso639_3 ?itemLabel ?itemLabel_en
3
+ WHERE {
4
+ ?item wdt:P31 wd:Q34770; # General "language" type to include all languages
5
+ wdt:P220 ?iso639_3. # Language with ISO 639-3 code
6
+
7
+ ?item p:P1098 ?numberOfSpeakersStatement.
8
+ ?numberOfSpeakersStatement ps:P1098 ?numberOfSpeakers.
9
+
10
+ OPTIONAL {
11
+ ?numberOfSpeakersStatement pq:P585 ?speakersTime.
12
+ }
13
+
14
+ OPTIONAL {
15
+ ?item wdt:P218 ?iso639_1.
16
+ ?item rdfs:label ?itemLabel_1 . FILTER(lang(?itemLabel_1) = ?iso639_1)
17
+ }
18
+ OPTIONAL {
19
+ ?item rdfs:label ?itemLabel_3 . FILTER(lang(?itemLabel_3) = ?iso639_3)
20
+ }
21
+ BIND(COALESCE(?itemLabel_3, ?itemLabel_1) AS ?itemLabel)
22
+
23
+ OPTIONAL {
24
+ ?item rdfs:label ?itemLabel_en . FILTER(lang(?itemLabel_en) = 'en')
25
+ }
26
+ }
27
+ GROUP BY ?item ?iso639_1 ?iso639_3 ?itemLabel ?itemLabel_en
28
+ ORDER BY DESC(?maxSpeakers) DESC(?mostRecentTime)
languages.tsv ADDED
The diff for this file is too large to render. See raw diff
 
results.json CHANGED
@@ -3,180 +3,240 @@
3
  "model": "openai/gpt-4o-mini",
4
  "original_language": "eng_Latn",
5
  "target_language": "eng_Latn",
 
 
6
  "bleu": 96.0187510193446
7
  },
8
  {
9
  "model": "google/gemini-flash-1.5",
10
  "original_language": "eng_Latn",
11
  "target_language": "eng_Latn",
 
 
12
  "bleu": 79.64837722618887
13
  },
14
  {
15
  "model": "anthropic/claude-3.5-sonnet",
16
  "original_language": "eng_Latn",
17
  "target_language": "eng_Latn",
 
 
18
  "bleu": 47.89694173473209
19
  },
20
  {
21
  "model": "qwen/qwen-2.5-72b-instruct",
22
  "original_language": "eng_Latn",
23
  "target_language": "eng_Latn",
 
 
24
  "bleu": 57.08253125905762
25
  },
26
  {
27
  "model": "meta-llama/llama-3.1-8b-instruct",
28
  "original_language": "eng_Latn",
29
  "target_language": "eng_Latn",
 
 
30
  "bleu": 71.3986619616758
31
  },
32
  {
33
  "model": "openai/gpt-4o-mini",
34
  "original_language": "eng_Latn",
35
  "target_language": "deu_Latn",
 
 
36
  "bleu": 42.76912386979146
37
  },
38
  {
39
  "model": "google/gemini-flash-1.5",
40
  "original_language": "eng_Latn",
41
  "target_language": "deu_Latn",
 
 
42
  "bleu": 48.166702527508484
43
  },
44
  {
45
  "model": "anthropic/claude-3.5-sonnet",
46
  "original_language": "eng_Latn",
47
  "target_language": "deu_Latn",
 
 
48
  "bleu": 47.56638188073429
49
  },
50
  {
51
  "model": "qwen/qwen-2.5-72b-instruct",
52
  "original_language": "eng_Latn",
53
  "target_language": "deu_Latn",
 
 
54
  "bleu": 38.8670415108337
55
  },
56
  {
57
  "model": "meta-llama/llama-3.1-8b-instruct",
58
  "original_language": "eng_Latn",
59
  "target_language": "deu_Latn",
 
 
60
  "bleu": 32.2942935571844
61
  },
62
  {
63
  "model": "openai/gpt-4o-mini",
64
  "original_language": "eng_Latn",
65
  "target_language": "fra_Latn",
 
 
66
  "bleu": 47.70220301445618
67
  },
68
  {
69
  "model": "google/gemini-flash-1.5",
70
  "original_language": "eng_Latn",
71
  "target_language": "fra_Latn",
 
 
72
  "bleu": 49.50529382461407
73
  },
74
  {
75
  "model": "anthropic/claude-3.5-sonnet",
76
  "original_language": "eng_Latn",
77
  "target_language": "fra_Latn",
 
 
78
  "bleu": 50.55719906730571
79
  },
80
  {
81
  "model": "qwen/qwen-2.5-72b-instruct",
82
  "original_language": "eng_Latn",
83
  "target_language": "fra_Latn",
 
 
84
  "bleu": 43.43766704709355
85
  },
86
  {
87
  "model": "meta-llama/llama-3.1-8b-instruct",
88
  "original_language": "eng_Latn",
89
  "target_language": "fra_Latn",
 
 
90
  "bleu": 37.38013101452594
91
  },
92
  {
93
  "model": "openai/gpt-4o-mini",
94
  "original_language": "eng_Latn",
95
  "target_language": "spa_Latn",
 
 
96
  "bleu": 34.65606074843554
97
  },
98
  {
99
  "model": "google/gemini-flash-1.5",
100
  "original_language": "eng_Latn",
101
  "target_language": "spa_Latn",
 
 
102
  "bleu": 34.49205632717459
103
  },
104
  {
105
  "model": "anthropic/claude-3.5-sonnet",
106
  "original_language": "eng_Latn",
107
  "target_language": "spa_Latn",
 
 
108
  "bleu": 34.58637890527096
109
  },
110
  {
111
  "model": "qwen/qwen-2.5-72b-instruct",
112
  "original_language": "eng_Latn",
113
  "target_language": "spa_Latn",
 
 
114
  "bleu": 33.41419407814188
115
  },
116
  {
117
  "model": "meta-llama/llama-3.1-8b-instruct",
118
  "original_language": "eng_Latn",
119
  "target_language": "spa_Latn",
 
 
120
  "bleu": 29.470460185415075
121
  },
122
  {
123
  "model": "openai/gpt-4o-mini",
124
  "original_language": "eng_Latn",
125
  "target_language": "cmn_Hans",
 
 
126
  "bleu": 0.7678283495493847
127
  },
128
  {
129
  "model": "google/gemini-flash-1.5",
130
  "original_language": "eng_Latn",
131
  "target_language": "cmn_Hans",
 
 
132
  "bleu": 0.3178534804335777
133
  },
134
  {
135
  "model": "anthropic/claude-3.5-sonnet",
136
  "original_language": "eng_Latn",
137
  "target_language": "cmn_Hans",
 
 
138
  "bleu": 0.8670958769249191
139
  },
140
  {
141
  "model": "qwen/qwen-2.5-72b-instruct",
142
  "original_language": "eng_Latn",
143
  "target_language": "cmn_Hans",
 
 
144
  "bleu": 0.6796400550094367
145
  },
146
  {
147
  "model": "meta-llama/llama-3.1-8b-instruct",
148
  "original_language": "eng_Latn",
149
  "target_language": "cmn_Hans",
 
 
150
  "bleu": 0.027154305073795664
151
  },
152
  {
153
  "model": "openai/gpt-4o-mini",
154
  "original_language": "eng_Latn",
155
  "target_language": "cmn_Hant",
 
 
156
  "bleu": 2.175042632198715
157
  },
158
  {
159
  "model": "google/gemini-flash-1.5",
160
  "original_language": "eng_Latn",
161
  "target_language": "cmn_Hant",
 
 
162
  "bleu": 0.3480387797702917
163
  },
164
  {
165
  "model": "anthropic/claude-3.5-sonnet",
166
  "original_language": "eng_Latn",
167
  "target_language": "cmn_Hant",
 
 
168
  "bleu": 3.8196828383724886
169
  },
170
  {
171
  "model": "qwen/qwen-2.5-72b-instruct",
172
  "original_language": "eng_Latn",
173
  "target_language": "cmn_Hant",
 
 
174
  "bleu": 2.1029807575075994
175
  },
176
  {
177
  "model": "meta-llama/llama-3.1-8b-instruct",
178
  "original_language": "eng_Latn",
179
  "target_language": "cmn_Hant",
 
 
180
  "bleu": 0.017008567925605175
181
  }
182
  ]
 
3
  "model": "openai/gpt-4o-mini",
4
  "original_language": "eng_Latn",
5
  "target_language": "eng_Latn",
6
+ "target_language_name": "English",
7
+ "speakers": 1132366680,
8
  "bleu": 96.0187510193446
9
  },
10
  {
11
  "model": "google/gemini-flash-1.5",
12
  "original_language": "eng_Latn",
13
  "target_language": "eng_Latn",
14
+ "target_language_name": "English",
15
+ "speakers": 1132366680,
16
  "bleu": 79.64837722618887
17
  },
18
  {
19
  "model": "anthropic/claude-3.5-sonnet",
20
  "original_language": "eng_Latn",
21
  "target_language": "eng_Latn",
22
+ "target_language_name": "English",
23
+ "speakers": 1132366680,
24
  "bleu": 47.89694173473209
25
  },
26
  {
27
  "model": "qwen/qwen-2.5-72b-instruct",
28
  "original_language": "eng_Latn",
29
  "target_language": "eng_Latn",
30
+ "target_language_name": "English",
31
+ "speakers": 1132366680,
32
  "bleu": 57.08253125905762
33
  },
34
  {
35
  "model": "meta-llama/llama-3.1-8b-instruct",
36
  "original_language": "eng_Latn",
37
  "target_language": "eng_Latn",
38
+ "target_language_name": "English",
39
+ "speakers": 1132366680,
40
  "bleu": 71.3986619616758
41
  },
42
  {
43
  "model": "openai/gpt-4o-mini",
44
  "original_language": "eng_Latn",
45
  "target_language": "deu_Latn",
46
+ "target_language_name": "German",
47
+ "speakers": 105000000,
48
  "bleu": 42.76912386979146
49
  },
50
  {
51
  "model": "google/gemini-flash-1.5",
52
  "original_language": "eng_Latn",
53
  "target_language": "deu_Latn",
54
+ "target_language_name": "German",
55
+ "speakers": 105000000,
56
  "bleu": 48.166702527508484
57
  },
58
  {
59
  "model": "anthropic/claude-3.5-sonnet",
60
  "original_language": "eng_Latn",
61
  "target_language": "deu_Latn",
62
+ "target_language_name": "German",
63
+ "speakers": 105000000,
64
  "bleu": 47.56638188073429
65
  },
66
  {
67
  "model": "qwen/qwen-2.5-72b-instruct",
68
  "original_language": "eng_Latn",
69
  "target_language": "deu_Latn",
70
+ "target_language_name": "German",
71
+ "speakers": 105000000,
72
  "bleu": 38.8670415108337
73
  },
74
  {
75
  "model": "meta-llama/llama-3.1-8b-instruct",
76
  "original_language": "eng_Latn",
77
  "target_language": "deu_Latn",
78
+ "target_language_name": "German",
79
+ "speakers": 105000000,
80
  "bleu": 32.2942935571844
81
  },
82
  {
83
  "model": "openai/gpt-4o-mini",
84
  "original_language": "eng_Latn",
85
  "target_language": "fra_Latn",
86
+ "target_language_name": "French",
87
+ "speakers": 208157220,
88
  "bleu": 47.70220301445618
89
  },
90
  {
91
  "model": "google/gemini-flash-1.5",
92
  "original_language": "eng_Latn",
93
  "target_language": "fra_Latn",
94
+ "target_language_name": "French",
95
+ "speakers": 208157220,
96
  "bleu": 49.50529382461407
97
  },
98
  {
99
  "model": "anthropic/claude-3.5-sonnet",
100
  "original_language": "eng_Latn",
101
  "target_language": "fra_Latn",
102
+ "target_language_name": "French",
103
+ "speakers": 208157220,
104
  "bleu": 50.55719906730571
105
  },
106
  {
107
  "model": "qwen/qwen-2.5-72b-instruct",
108
  "original_language": "eng_Latn",
109
  "target_language": "fra_Latn",
110
+ "target_language_name": "French",
111
+ "speakers": 208157220,
112
  "bleu": 43.43766704709355
113
  },
114
  {
115
  "model": "meta-llama/llama-3.1-8b-instruct",
116
  "original_language": "eng_Latn",
117
  "target_language": "fra_Latn",
118
+ "target_language_name": "French",
119
+ "speakers": 208157220,
120
  "bleu": 37.38013101452594
121
  },
122
  {
123
  "model": "openai/gpt-4o-mini",
124
  "original_language": "eng_Latn",
125
  "target_language": "spa_Latn",
126
+ "target_language_name": "Spanish",
127
+ "speakers": 485000000,
128
  "bleu": 34.65606074843554
129
  },
130
  {
131
  "model": "google/gemini-flash-1.5",
132
  "original_language": "eng_Latn",
133
  "target_language": "spa_Latn",
134
+ "target_language_name": "Spanish",
135
+ "speakers": 485000000,
136
  "bleu": 34.49205632717459
137
  },
138
  {
139
  "model": "anthropic/claude-3.5-sonnet",
140
  "original_language": "eng_Latn",
141
  "target_language": "spa_Latn",
142
+ "target_language_name": "Spanish",
143
+ "speakers": 485000000,
144
  "bleu": 34.58637890527096
145
  },
146
  {
147
  "model": "qwen/qwen-2.5-72b-instruct",
148
  "original_language": "eng_Latn",
149
  "target_language": "spa_Latn",
150
+ "target_language_name": "Spanish",
151
+ "speakers": 485000000,
152
  "bleu": 33.41419407814188
153
  },
154
  {
155
  "model": "meta-llama/llama-3.1-8b-instruct",
156
  "original_language": "eng_Latn",
157
  "target_language": "spa_Latn",
158
+ "target_language_name": "Spanish",
159
+ "speakers": 485000000,
160
  "bleu": 29.470460185415075
161
  },
162
  {
163
  "model": "openai/gpt-4o-mini",
164
  "original_language": "eng_Latn",
165
  "target_language": "cmn_Hans",
166
+ "target_language_name": "Mandarin",
167
+ "speakers": 1074000000,
168
  "bleu": 0.7678283495493847
169
  },
170
  {
171
  "model": "google/gemini-flash-1.5",
172
  "original_language": "eng_Latn",
173
  "target_language": "cmn_Hans",
174
+ "target_language_name": "Mandarin",
175
+ "speakers": 1074000000,
176
  "bleu": 0.3178534804335777
177
  },
178
  {
179
  "model": "anthropic/claude-3.5-sonnet",
180
  "original_language": "eng_Latn",
181
  "target_language": "cmn_Hans",
182
+ "target_language_name": "Mandarin",
183
+ "speakers": 1074000000,
184
  "bleu": 0.8670958769249191
185
  },
186
  {
187
  "model": "qwen/qwen-2.5-72b-instruct",
188
  "original_language": "eng_Latn",
189
  "target_language": "cmn_Hans",
190
+ "target_language_name": "Mandarin",
191
+ "speakers": 1074000000,
192
  "bleu": 0.6796400550094367
193
  },
194
  {
195
  "model": "meta-llama/llama-3.1-8b-instruct",
196
  "original_language": "eng_Latn",
197
  "target_language": "cmn_Hans",
198
+ "target_language_name": "Mandarin",
199
+ "speakers": 1074000000,
200
  "bleu": 0.027154305073795664
201
  },
202
  {
203
  "model": "openai/gpt-4o-mini",
204
  "original_language": "eng_Latn",
205
  "target_language": "cmn_Hant",
206
+ "target_language_name": "Mandarin",
207
+ "speakers": 1074000000,
208
  "bleu": 2.175042632198715
209
  },
210
  {
211
  "model": "google/gemini-flash-1.5",
212
  "original_language": "eng_Latn",
213
  "target_language": "cmn_Hant",
214
+ "target_language_name": "Mandarin",
215
+ "speakers": 1074000000,
216
  "bleu": 0.3480387797702917
217
  },
218
  {
219
  "model": "anthropic/claude-3.5-sonnet",
220
  "original_language": "eng_Latn",
221
  "target_language": "cmn_Hant",
222
+ "target_language_name": "Mandarin",
223
+ "speakers": 1074000000,
224
  "bleu": 3.8196828383724886
225
  },
226
  {
227
  "model": "qwen/qwen-2.5-72b-instruct",
228
  "original_language": "eng_Latn",
229
  "target_language": "cmn_Hant",
230
+ "target_language_name": "Mandarin",
231
+ "speakers": 1074000000,
232
  "bleu": 2.1029807575075994
233
  },
234
  {
235
  "model": "meta-llama/llama-3.1-8b-instruct",
236
  "original_language": "eng_Latn",
237
  "target_language": "cmn_Hant",
238
+ "target_language_name": "Mandarin",
239
+ "speakers": 1074000000,
240
  "bleu": 0.017008567925605175
241
  }
242
  ]