# Imports
import gzip
import json
import re
import mwapi
import pandas as pd
# Parameters for accessing the API that contains metadata about each translated article
session = mwapi.Session(host='https://en.wikipedia.org',
user_agent='mwapi (python) -- outreachy content translation')
# articles translated from English -> Spanish
parameters = {'action':'query',
'format':'json',
'list':'cxpublishedtranslations',
'from':'en',
'to':'es',
'limit':500,
'offset':20000}
res = session.get(parameters)
res['result']['translations'][:10]
[{'translationId': '374655', 'sourceTitle': 'American Vandal', 'targetTitle': 'Usuario:Misaelflorezav/American Vandal', 'sourceLanguage': 'en', 'sourceRevisionId': '802832925', 'targetRevisionId': '102214615', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/American Vandal', 'targetURL': '//es.wikipedia.org/wiki/Usuario:Misaelflorezav/American Vandal', 'publishedDate': '20170928215416', 'stats': {'any': 0.21890547263682, 'human': 0.084920226453937, 'mt': 0.13398524618288, 'mtSectionsCount': 2}}, {'translationId': '374660', 'sourceTitle': 'End Records', 'targetTitle': 'End Records', 'sourceLanguage': 'en', 'sourceRevisionId': '746876472', 'targetRevisionId': '102215116', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/End Records', 'targetURL': '//es.wikipedia.org/wiki/End Records', 'publishedDate': '20170928221445', 'stats': {'any': 1.1047708138447, 'human': 1.1047708138447, 'mt': 0, 'mtSectionsCount': 0}}, {'translationId': '374661', 'sourceTitle': '60S ribosomal protein L10', 'targetTitle': 'Proteína L10 de la unidad ribosómica 60S\xa0', 'sourceLanguage': 'en', 'sourceRevisionId': '797871239', 'targetRevisionId': '102215432', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/60S ribosomal protein L10', 'targetURL': '//es.wikipedia.org/wiki/Proteína L10 de la unidad ribosómica 60S\xa0', 'publishedDate': '20170928223045', 'stats': {'any': 0.27921220127297, 'human': 0.27476882430647, 'mt': 0.0044433769664945, 'mtSectionsCount': 3}}, {'translationId': '374663', 'sourceTitle': 'Ned Washington', 'targetTitle': 'Ned Washington', 'sourceLanguage': 'en', 'sourceRevisionId': '796534066', 'targetRevisionId': '102215375', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/Ned Washington', 'targetURL': '//es.wikipedia.org/wiki/Ned Washington', 'publishedDate': '20170928222819', 'stats': {'any': 1.0329474621549, 'human': 1.0255268625705, 'mt': 0.0074205995844464, 'mtSectionsCount': 2}}, {'translationId': '374674', 'sourceTitle': 'Greek legislative election, 1936', 'targetTitle': 'Elecciones parlamentarias de Grecia de 1936', 'sourceLanguage': 'en', 'sourceRevisionId': '797738429', 'targetRevisionId': '102216616', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/Greek legislative election, 1936', 'targetURL': '//es.wikipedia.org/wiki/Elecciones parlamentarias de Grecia de 1936', 'publishedDate': '20170928233753', 'stats': {'any': 0.74281709880869, 'human': 0.7281009110021, 'mt': 0.014716187806587, 'mtSectionsCount': 2}}, {'translationId': '374675', 'sourceTitle': 'Maltese general election, 1927', 'targetTitle': 'Elecciones generales de Malta de 1927', 'sourceLanguage': 'en', 'sourceRevisionId': '787160410', 'targetRevisionId': '102216883', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/Maltese general election, 1927', 'targetURL': '//es.wikipedia.org/wiki/Elecciones generales de Malta de 1927', 'publishedDate': '20170928235113', 'stats': {'any': 0.94422310756972, 'human': 0.89322709163347, 'mt': 0.050996015936255, 'mtSectionsCount': 5}}, {'translationId': '374719', 'sourceTitle': 'Dançando', 'targetTitle': 'Dançando', 'sourceLanguage': 'en', 'sourceRevisionId': '801281364', 'targetRevisionId': '102222244', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/Dançando', 'targetURL': '//es.wikipedia.org/wiki/Dançando', 'publishedDate': '20170929060104', 'stats': {'any': 0.86393027832443, 'human': 0.85704245150408, 'mt': 0.0068878268203542, 'mtSectionsCount': 4}}, {'translationId': '374751', 'sourceTitle': 'BFR (rocket)', 'targetTitle': 'BFR (cohete)', 'sourceLanguage': 'en', 'sourceRevisionId': '802912035', 'targetRevisionId': '102223820', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/BFR (rocket)', 'targetURL': '//es.wikipedia.org/wiki/BFR (cohete)', 'publishedDate': '20170929080018', 'stats': {'any': 0.014279624893436, 'human': 0.00078147200909349, 'mt': 0.013498152884342, 'mtSectionsCount': 4}}, {'translationId': '374858', 'sourceTitle': 'MatrixNet', 'targetTitle': 'MatrixNet', 'sourceLanguage': 'en', 'sourceRevisionId': '774931364', 'targetRevisionId': '102229789', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/MatrixNet', 'targetURL': '//es.wikipedia.org/wiki/MatrixNet', 'publishedDate': '20170929150431', 'stats': {'any': 0.61847988077496, 'human': 0.55290611028316, 'mt': 0.065573770491803, 'mtSectionsCount': 4}}, {'translationId': '374869', 'sourceTitle': 'Gradient boosting', 'targetTitle': 'Gradient boosting', 'sourceLanguage': 'en', 'sourceRevisionId': '801498395', 'targetRevisionId': '102230661', 'targetLanguage': 'es', 'sourceURL': '//en.wikipedia.org/wiki/Gradient boosting', 'targetURL': '//es.wikipedia.org/wiki/Gradient boosting', 'publishedDate': '20180524022255', 'stats': {'any': 0.050171256336484, 'human': 0.048417591450884, 'mt': 0.0017536648856008, 'mtSectionsCount': 3}}]
df = pd.DataFrame(res['result']['translations'])
df.head(10)
publishedDate | sourceLanguage | sourceRevisionId | sourceTitle | sourceURL | stats | targetLanguage | targetRevisionId | targetTitle | targetURL | translationId | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 20170928215416 | en | 802832925 | American Vandal | //en.wikipedia.org/wiki/American Vandal | {'any': 0.21890547263682, 'human': 0.084920226... | es | 102214615 | Usuario:Misaelflorezav/American Vandal | //es.wikipedia.org/wiki/Usuario:Misaelflorezav... | 374655 |
1 | 20170928221445 | en | 746876472 | End Records | //en.wikipedia.org/wiki/End Records | {'any': 1.1047708138447, 'human': 1.1047708138... | es | 102215116 | End Records | //es.wikipedia.org/wiki/End Records | 374660 |
2 | 20170928223045 | en | 797871239 | 60S ribosomal protein L10 | //en.wikipedia.org/wiki/60S ribosomal protein L10 | {'any': 0.27921220127297, 'human': 0.274768824... | es | 102215432 | Proteína L10 de la unidad ribosómica 60S | //es.wikipedia.org/wiki/Proteína L10 de la uni... | 374661 |
3 | 20170928222819 | en | 796534066 | Ned Washington | //en.wikipedia.org/wiki/Ned Washington | {'any': 1.0329474621549, 'human': 1.0255268625... | es | 102215375 | Ned Washington | //es.wikipedia.org/wiki/Ned Washington | 374663 |
4 | 20170928233753 | en | 797738429 | Greek legislative election, 1936 | //en.wikipedia.org/wiki/Greek legislative elec... | {'any': 0.74281709880869, 'human': 0.728100911... | es | 102216616 | Elecciones parlamentarias de Grecia de 1936 | //es.wikipedia.org/wiki/Elecciones parlamentar... | 374674 |
5 | 20170928235113 | en | 787160410 | Maltese general election, 1927 | //en.wikipedia.org/wiki/Maltese general electi... | {'any': 0.94422310756972, 'human': 0.893227091... | es | 102216883 | Elecciones generales de Malta de 1927 | //es.wikipedia.org/wiki/Elecciones generales d... | 374675 |
6 | 20170929060104 | en | 801281364 | Dançando | //en.wikipedia.org/wiki/Dançando | {'any': 0.86393027832443, 'human': 0.857042451... | es | 102222244 | Dançando | //es.wikipedia.org/wiki/Dançando | 374719 |
7 | 20170929080018 | en | 802912035 | BFR (rocket) | //en.wikipedia.org/wiki/BFR (rocket) | {'any': 0.014279624893436, 'human': 0.00078147... | es | 102223820 | BFR (cohete) | //es.wikipedia.org/wiki/BFR (cohete) | 374751 |
8 | 20170929150431 | en | 774931364 | MatrixNet | //en.wikipedia.org/wiki/MatrixNet | {'any': 0.61847988077496, 'human': 0.552906110... | es | 102229789 | MatrixNet | //es.wikipedia.org/wiki/MatrixNet | 374858 |
9 | 20180524022255 | en | 801498395 | Gradient boosting | //en.wikipedia.org/wiki/Gradient boosting | {'any': 0.050171256336484, 'human': 0.04841759... | es | 102230661 | Gradient boosting | //es.wikipedia.org/wiki/Gradient boosting | 374869 |
# I'll use this example for the rest of the notebook
df[df['sourceTitle'] == 'Gradient boosting']
publishedDate | sourceLanguage | sourceRevisionId | sourceTitle | sourceURL | stats | targetLanguage | targetRevisionId | targetTitle | targetURL | translationId | |
---|---|---|---|---|---|---|---|---|---|---|---|
9 | 20180524022255 | en | 801498395 | Gradient boosting | //en.wikipedia.org/wiki/Gradient boosting | {'any': 0.050171256336484, 'human': 0.04841759... | es | 102230661 | Gradient boosting | //es.wikipedia.org/wiki/Gradient boosting | 374869 |
article_idx = 9 # Gradient Boosting when I executed this notebook, though this may change over time
gboost_source_title = df.loc[article_idx, 'sourceTitle']
gboost_target_title = df.loc[article_idx, 'targetTitle']
gboost_tid = df.loc[article_idx,'translationId']
gboost_source_revid = df.loc[article_idx, 'sourceRevisionId']
print(gboost_source_title)
print(gboost_target_title)
print(gboost_tid)
print(gboost_source_revid)
Gradient boosting Gradient boosting 374869 801498395
Parallel translations can either be accessed through the dump files or API. Use the dump files if you are planning on analyzing the entire corpus (or a large proportion) of translated articles. The API is best for looking at a few examples. The API and dump files are not exactly the same though: the dump file does not include any sections where the user did not include any translated content but the API still does.
.text.json.gz
file based on instructions here: https://www.mediawiki.org/wiki/Content_translation/Published_translations#Dumpsupload
button if you go to your dashboard (click on the PAWS logo in top right)json.load
directly on the fin
variable. Instead, you have to remove them as below to load in the dump file.# 1st option: Download dump to access all translated articles
json_str = ""
with gzip.open('cx-corpora.en2es.text.json.gz', 'rt') as fin:
for line in fin:
json_str += line.strip()
# remove repetitive commas
json_str = re.sub(',{2,}', ',', json_str)
parallel_corpus = json.loads(json_str)
# if this still throws an error, it's probably a trailing comma
# find where that comma is and instead do something like:
# parallel_corpus = json.loads(json_str[:<comma-idx>] + json_str[<comma-idx>+1:])
# Example:
# id: a string composed of <translationID>/<sectionID>
# <translationID> is in the data accessed from the first API
# each section in the article that was translated gets its own <sectionID>
# mt indicates whether machine translation was used in the interface
print("Descriptive statistics:")
print("{0} translated sections.".format(len(parallel_corpus)))
print("{0} translated articles.".format(len(set(sec['id'].split('/')[0] for sec in parallel_corpus))))
mt_counts = {}
for sec in parallel_corpus:
if sec['mt']:
service = sec['mt']['engine']
mt_counts[service] = mt_counts.get(service, 0) + 1
else:
mt_counts['no-mt'] = mt_counts.get('no-mt', 0) + 1
print("Machine translation services used: {0}".format(mt_counts))
print("\nExample:\n", parallel_corpus[0])
Descriptive statistics: 303040 translated sections. 28203 translated articles. Machine translation services used: {'no-mt': 108098, 'Apertium': 163433, 'Yandex': 20242, 'Google': 9475, 'source-mt': 1, 'scratch': 1788, 'TestClient': 3} Example: {'id': '10059/mwEg', 'sourceLanguage': 'en', 'targetLanguage': 'es', 'source': {'content': "Before New Montgomery Street was created, an inner street called Jane Street ran parallel to Second and Third Street.[1] In the 1870s, Montgomery Street South was established in its place as the southern extension of Montgomery Street, one of the main thoroughfares in San Francisco's Financial District, running north from Market to Telegraph Hill. The extension was strongly supported by businessman and Bank of California founder William Ralston – who started the construction of the original Palace Hotel, at the time the largest hotel in the Western United States – in an effort to expand San Francisco's business district to the yet undeveloped area south of Market.[2][3] Ralston's original plans to connect Montgomery Street to the waterfront failed due to the unwillingness of two property owners (governor Milton Latham and shipping baron John Parrott) to sell their mansions on Rincon Hill, which is why Montgomery Street South never got past Howard Street.[1][4]"}, 'mt': None, 'target': {'content': 'Antes de Montgomery Nuevo Calle estuvo creado, una calle interior llamó Jane Calle corrió paralela a Segundo y Tercera Calle.[1] En el @1870s, Sur de Calle del Montgomery estuvo establecido en su sitio como la extensión del sur de Montgomery Calle, uno del principal thoroughfares en el distrito Financiero de San Francisco, corriendo del norte de Mercado a Cerro de Telégrafo. La extensión era fuertemente apoyada por businessman y Banco de fundador de California William Ralston @– quién empezó la construcción del Hotel de Palacio original, en el tiempo el hotel más grande en los Estados Unidos Occidentales @– en un esfuerzo para expandir el distrito empresarial de San Francisco al todavía undeveloped sur de área de Mercado.[2][3] Ralston planes originales para conectar Montgomery Calle al waterfront falló debido al unwillingness de dos dueños de propiedad (gobernador Milton Latham y embarcando barón John Parrott) para vender sus mansiones en Rincon Cerro, el cual es por qué Montgomery Calle Al sur pasado conseguido nunca Howard Calle.[1][4]'}}
# Translated sections for "Gradient boosting" article
for translated_section in parallel_corpus:
if translated_section['id'].split('/')[0] == gboost_tid:
print(translated_section, '\n')
{'id': '374869/mwAQ', 'sourceLanguage': 'en', 'targetLanguage': 'es', 'source': {'content': 'Gradient boosting is a machine learning technique for regression and classification problems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees. It builds the model in a stage-wise fashion like other boosting methods do, and it generalizes them by allowing optimization of an arbitrary differentiable loss function.'}, 'mt': {'engine': 'Apertium', 'content': 'El gradiente que aumenta es una técnica de aprendizaje de la máquina para regresión y problemas de clasificación, el cual produce un modelo de predicción en la forma de un ensemble de modelos de predicción débil, típicamente árboles de decisión. Construye el modelo en una etapa-moda sensata como otros métodos de aumentar , y les generalice por dejar optimización de una función de pérdida diferenciable arbitraria.'}, 'target': {'content': 'El gradiente que aumenta es una técnica de aprendizaje automático\xa0utilizado para el análisis de la regresión y para problemas de clasificación estadística, el cual produce un modelo predictivo en la forma de un conjunto de modelos de predicción débiles, típicamente árboles de decisión. Construye el modelo de forma escalonada como lo hacen otros métodos de boosting ,\xa0y los generaliza permitiendo la optimización aribitraria de una función de pérdida diferenciable.'}} {'id': '374869/mwvQ', 'sourceLanguage': 'en', 'targetLanguage': 'es', 'source': {'content': 'Gradient boosting can be used in the field of learning to rank. The commercial web search engines Yahoo[12] and Yandex[13] use variants of gradient boosting in their machine-learned ranking engines.'}, 'mt': {'engine': 'Apertium', 'content': 'El gradiente que aumenta puede ser utilizado en el campo de aprender a rango. Los motores de búsqueda de web comerciales Yahoo[12] y Yandex[13] variantes de uso del gradiente que aumenta en su máquina-aprendido ranking motores.'}, 'target': {'content': 'La potenciación del gradiente puede ser utilizado en el campo de aprendizaje de clasificación. Los motores de búsqueda de web comerciales Yahoo[12] y Yandex[13]\xa0utilizan variantes de gradient boosting en sus motores de búsqueda.'}} {'id': '374869/undefined07679025be2a0b218e5c0', 'sourceLanguage': 'en', 'targetLanguage': 'es', 'source': {'content': 'See also'}, 'mt': {'engine': 'Apertium', 'content': 'Ve también'}, 'target': {'content': 'Ver también'}} {'id': '374869/mwCw', 'sourceLanguage': 'en', 'targetLanguage': 'es', 'source': {'content': 'The idea of gradient boosting originated in the observation by Leo Breiman[1] that boosting can be interpreted as an optimization algorithm on a suitable cost function. Explicit regression gradient boosting algorithms were subsequently developed by Jerome H. Friedman[2][3] simultaneously with the more general functional gradient boosting perspective of Llew Mason, Jonathan Baxter, Peter Bartlett and Marcus Frean.[4][5] The latter two papers introduced the abstract view of boosting algorithms as iterative functional gradient descent algorithms. That is, algorithms that optimize a cost function over function space by iteratively choosing a function (weak hypothesis) that points in the negative gradient direction. This functional gradient view of boosting has led to the development of boosting algorithms in many areas of machine learning and statistics beyond regression and classification.'}, 'mt': None, 'target': {'content': 'La idea de la potenciación del gradiente fue originado en la observación realizada por Leo Breiman[1] que el Boosting puede ser interpretado como un algoritmo de optimización en una función de coste adecuada. El gradiente de regresión explícito que aumenta los algoritmos fue posteriormente desarrollado por Jerome H. Friedman[2][3] Simultáneamente con el gradiente funcional más general que aumenta perspectiva de Llew Mason, Jonathan Baxter, Peter Bartlett y Marcus Frean.[4][5]\xa0Estos dos últimos documentos presentaron la visión abstracta de los algoritmos de aumento de potenciación como algoritmos iterativos de descenso de gradientes funcionales. Es decir, algoritmos que optimizan una función de coste sobre el espacio funcional mediante la elección iterativa de una función (hipótesis débil) que apunta en la dirección del gradiente negativo. Esta visión de gradiente funcional de potenciación ha llevado al desarrollo de algoritmos de potenciación en muchas áreas del aprendizaje automático y estadísticas más allá de la regresión y la clasificación.'}}
# 2nd option: You could also retrieve the "Gradient boosting" sections through the API
# articles translated from English -> Spanish
parallel_corpus_parameters = {'action':'query',
'format':'json',
'list':'contenttranslationcorpora',
'translationid':gboost_tid,
'striphtml':True}
parallel_corpus_res = session.get(parameters)
parallel_corpus_res
{'batchcomplete': '', 'query': {'contenttranslationcorpora': {'sections': {'mwAQ': {'sequenceid': 0, 'source': {'engine': None, 'content': 'Gradient boosting is a machine learning technique for regression and classification problems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees. It builds the model in a stage-wise fashion like other boosting methods do, and it generalizes them by allowing optimization of an arbitrary differentiable loss function.', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': {'engine': 'Apertium', 'content': 'El gradiente que aumenta es una técnica de aprendizaje de la máquina para regresión y problemas de clasificación, el cual produce un modelo de predicción en la forma de un ensemble de modelos de predicción débil, típicamente árboles de decisión. Construye el modelo en una etapa-moda sensata como otros métodos de aumentar , y les generalice por dejar optimización de una función de pérdida diferenciable arbitraria.', 'timestamp': '2017-09-29T15:26:33Z'}, 'user': {'engine': None, 'content': 'El gradiente que aumenta es una técnica de aprendizaje automático\xa0utilizado para el análisis de la regresión y para problemas de clasificación estadística, el cual produce un modelo predictivo en la forma de un conjunto de modelos de predicción débiles, típicamente árboles de decisión. Construye el modelo de forma escalonada como lo hacen otros métodos de boosting ,\xa0y los generaliza permitiendo la optimización aribitraria de una función de pérdida diferenciable.', 'timestamp': '2017-10-11T15:57:19Z'}}, 'mwvQ': {'sequenceid': 0, 'source': {'engine': None, 'content': 'Gradient boosting can be used in the field of learning to rank. The commercial web search engines Yahoo[12] and Yandex[13] use variants of gradient boosting in their machine-learned ranking engines.', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': {'engine': 'Apertium', 'content': 'El gradiente que aumenta puede ser utilizado en el campo de aprender a rango. Los motores de búsqueda de web comerciales Yahoo[12] y Yandex[13] variantes de uso del gradiente que aumenta en su máquina-aprendido ranking motores.', 'timestamp': '2017-09-29T15:39:39Z'}, 'user': {'engine': None, 'content': 'La potenciación del gradiente puede ser utilizado en el campo de aprendizaje de clasificación. Los motores de búsqueda de web comerciales Yahoo[12] y Yandex[13]\xa0utilizan variantes de gradient boosting en sus motores de búsqueda.', 'timestamp': '2017-10-11T15:57:19Z'}}, 'mwxA': {'sequenceid': 0, 'source': {'engine': None, 'content': 'AdaBoost Random forest xgboost LightGBM', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': {'engine': 'Apertium', 'content': 'AdaBoost Bosque aleatorio xgboost LightGBM', 'timestamp': '2017-10-11T15:57:19Z'}, 'user': None}, 'undefined07679025be2a0b218e5c0': {'sequenceid': 0, 'source': {'engine': None, 'content': 'See also', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': {'engine': 'Apertium', 'content': 'Ve también', 'timestamp': '2017-09-29T15:42:06Z'}, 'user': {'engine': None, 'content': 'Ver también', 'timestamp': '2017-10-11T15:57:19Z'}}, 'undefinedb515e6806294a59a15c5a': {'sequenceid': 0, 'source': {'engine': None, 'content': 'References', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': {'engine': 'Apertium', 'content': 'Referencias', 'timestamp': '2017-10-11T15:57:19Z'}, 'user': None}, 'undefinedf9f52c9411a2ae24c8cb3': {'sequenceid': 0, 'source': {'engine': None, 'content': 'Usage', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': {'engine': 'Apertium', 'content': 'Uso', 'timestamp': '2017-10-11T15:57:19Z'}, 'user': None}, 'mwCw': {'sequenceid': 0, 'source': {'engine': None, 'content': 'The idea of gradient boosting originated in the observation by Leo Breiman[1] that boosting can be interpreted as an optimization algorithm on a suitable cost function. Explicit regression gradient boosting algorithms were subsequently developed by Jerome H. Friedman[2][3] simultaneously with the more general functional gradient boosting perspective of Llew Mason, Jonathan Baxter, Peter Bartlett and Marcus Frean.[4][5] The latter two papers introduced the abstract view of boosting algorithms as iterative functional gradient descent algorithms. That is, algorithms that optimize a cost function over function space by iteratively choosing a function (weak hypothesis) that points in the negative gradient direction. This functional gradient view of boosting has led to the development of boosting algorithms in many areas of machine learning and statistics beyond regression and classification.', 'timestamp': '2017-10-11T15:57:19Z'}, 'mt': None, 'user': {'engine': None, 'content': 'La idea de la potenciación del gradiente fue originado en la observación realizada por Leo Breiman[1] que el Boosting puede ser interpretado como un algoritmo de optimización en una función de coste adecuada. El gradiente de regresión explícito que aumenta los algoritmos fue posteriormente desarrollado por Jerome H. Friedman[2][3] Simultáneamente con el gradiente funcional más general que aumenta perspectiva de Llew Mason, Jonathan Baxter, Peter Bartlett y Marcus Frean.[4][5]\xa0Estos dos últimos documentos presentaron la visión abstracta de los algoritmos de aumento de potenciación como algoritmos iterativos de descenso de gradientes funcionales. Es decir, algoritmos que optimizan una función de coste sobre el espacio funcional mediante la elección iterativa de una función (hipótesis débil) que apunta en la dirección del gradiente negativo. Esta visión de gradiente funcional de potenciación ha llevado al desarrollo de algoritmos de potenciación en muchas áreas del aprendizaje automático y estadísticas más allá de la regresión y la clasificación.', 'timestamp': '2017-10-11T15:57:19Z'}}}}}}