<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Onyme &#187; Tests</title>
	<atom:link href="http://blog.onyme.com/category/tests/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.onyme.com</link>
	<description>Analyse sémantique et Traitement Automatisé de la Langue</description>
	<lastBuildDate>Mon, 14 Mar 2016 23:26:30 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>La R&amp;D pilotée par les tests avec TestNG</title>
		<link>http://blog.onyme.com/la-rd-pilotee-par-les-tests-avec-testng/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-rd-pilotee-par-les-tests-avec-testng</link>
		<comments>http://blog.onyme.com/la-rd-pilotee-par-les-tests-avec-testng/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 08:10:03 +0000</pubDate>
		<dc:creator>Thibaud VIBES</dc:creator>
				<category><![CDATA[Outils]]></category>
		<category><![CDATA[Tests]]></category>

		<guid isPermaLink="false">http://blog.onyme.com/?p=545</guid>
		<description><![CDATA[Dans un précédent billet, nous vous présentions notre démarche de R&#38;D pilotée par les tests qui consiste à évaluer en continu les différents prototypes ou algorithmes mis au point pendant un projet de R&#38;D. 

Dans ce billet nous allons utiliser un cas client pour illustrer la démarche et présenter les outils que nous avons utilisé.]]></description>
				<content:encoded><![CDATA[<p>Dans un précédent billet, nous vous présentions notre démarche de <a href="http://blog.onyme.com/la-rd-pilotee-par-les-tests/">R&amp;D pilotée par les tests</a> qui consiste à évaluer en continu les différents prototypes ou algorithmes mis au point pendant un projet de R&amp;D.</p>
<p>Dans ce billet nous allons utiliser un cas client pour illustrer la démarche et présenter les outils que nous avons utilisé.</p>
<p>Le cadre du projet est l&#8217;amélioration de l&#8217;agent conversationnel (ou <em>bot</em>) développé par un client. Parmis les différents points, il y a celui d&#8217;améliorer sa capacité à reconnaître et classer les messages de type &#8220;interaction sociale&#8221;. Voici un exemple d&#8217;interactions sociales simples :</p>
<ul>
<li> &#8220;Bonjour&#8221; / &#8220;Hello&#8221; (catégorisation de l&#8217;interaction sociale: <strong>OUVERTURE</strong>)</li>
<li> &#8220;A bientôt&#8221; / &#8220;Au revoir&#8221; / &#8220;Bye&#8221; (<strong>FERMETURE</strong>)</li>
<li> &#8220;Comment vas tu?&#8221; / &#8220;Comment ça va?&#8221; (<strong>SANTE</strong>)</li>
<li> &#8220;T&#8217;es trop nul&#8221; (<strong>DESAPPROBATION</strong>)</li>
<li> &#8230;</li>
</ul>
<p>Nous avons notamment en charge le développement d&#8217;un composant qui reçoit en entrée une phrase et qui fournit en sortie une liste de catégories (si le message est bien une interaction sociale). Le format de sortie est une liste d&#8217;objets de type <em>SocialInteraction</em> :<br />
<img class="aligncenter size-full wp-image-561" src="http://blog.onyme.com/wp-content/uploads/2010/12/SocialInteractionUML.png" alt="Classe représentant une catégorie sociale" width="137" height="76" /><br />
Le composant doit gérer les messages comportant plusieurs catégories (Ex: &#8220;Salut, comment ça va?&#8221; = OUVERTURE + SANTE) et attribuer un score (représentant une probabilité) pour chaque catégorie.</p>
<p>Voila pour le contexte.</p>
<h2>Besoins</h2>
<ol>
<li>Constituer un jeu représentatif AVEC le client (corpus de test). Cela implique de pouvoir stocker des messages et la sortie attendue</li>
<li>Mettre au point un indicateur précis et conforme à notre perception des résultats pour <em>chaque composant</em>*.</li>
<li>Lancer l&#8217;exécution du composant de catégorisation sur tout le corpus de test et calculer pour chaque exécution notre indicateur.</li>
<li>Produire un rapport proposant plusieurs niveaux de lecture : une synthèse (agrégation de tous les scores) et le détail de chaque exécution.</li>
<li>Automatiser au maximum l&#8217;évaluation et la production des rapports (point 3 et 4).</li>
</ol>
<p><em>*L&#8217;ensemble du projet comporte une dizaine de composants à évaluer</em></p>
<p>À partir des points 3., 4. et 5. on pense rapidement aux tests unitaires,  JUnit et la génération de rapports HTML &#8230; Seulement, pour l&#8217;avoir employé dans un précédent projet à des fin d&#8217;évaluation, il s&#8217;avère encore complexe d&#8217;utiliser JUnit dans le cadre d&#8217;exécution suivant :</p>
<blockquote><p>Ecrire 1 test qui s&#8217;exécutera N fois avec des données différentes</p></blockquote>
<h2>TestNG : le framework de tests next generation</h2>
<p><a href="http://testng.org" target="_blank">TestNG</a> est un framework de tests sembable à JUnit, qui est né pour palier à certaines limites de ce dernier. Parmis les fonctionnalités intéressantes de TestNG, nous avons trouvé :</p>
<ul>
<li>Possibilité d&#8217;organiser les tests en groupes et de leur donner un nom &#8220;lisible&#8221; (autre que le nom de la méthode). Ex: &#8220;Catégorisation sociale&#8221;</li>
<li>Possibilité d&#8217;employer des méthodes avec paramètres</li>
<li>l&#8217;annotation @DataProvider qui permet de créer très facilement des composants qui vont &#8220;alimenter&#8221; les tests en données d&#8217;entrée.</li>
<li>La fourniture d&#8217;une API pour la création de rapports (nous détaillerons dans la partie reporting)</li>
<li>Intégré à Maven, soit via le plugin par défaut (maven-surefire-plugin) ou soit via le maven-antrun-plugin (requérant la création d&#8217;un petit <a href=http://testng.org/doc/ant.html target="_blank">script Ant pour lancer TestNG</a>)</li>
<li>très bien intégré à Eclipse via un excellent plug-in</li>
</ul>
<p>Avec toutes ces fonctionnalités nous possédons presque l&#8217;outillage nécessaire pour réaliser l&#8217;évaluation de notre composant de classification.</p>
<h2>Gestion de l&#8217;indicateur</h2>
<h3>F-Mesure</h3>
<p>Nous avons choisi la formule <a href="http://fr.wikipedia.org/wiki/Pr%C3%A9cision_et_rappel#F-mesure" target="_blank">F-Mesure</a> car elle reflète bien l&#8217;écart entre le résultat produit et le résultat attendu en intégrant les notions de <em>précision</em> (P) et <em>rappel</em> (R).</p>
<p><img class="aligncenter size-full wp-image-566" src="http://blog.onyme.com/wp-content/uploads/2010/12/f-measure.png" alt="2*( (P*R) / (P+R) )" width="222" height="120" />Le résultat est un nombre entre 0 et 1, résultat qu&#8217;il est donc facile de convertir un pourcentages.</p>
<h3>Intégration de la  F-Mesure dans les tests TestNG</h3>
<p>Bien qu&#8217;étant souple et extensible, TestNG est un framework de tests unitaires. A l&#8217;instar de JUnit il fonctionne avec des <em>Assertions</em>. Or une assertion est soit vraie, soit fausse. Mais ne peut en aucun cas être à 50% vraie&#8230;</p>
<p>L&#8217;astuce que nous employons est de considérer qu&#8217;une F-Mesure &lt; à 1 fait échouer l&#8217;assertion évaluant l&#8217;égalité entre le résultat attendu et le résultat produit, et surcharger le modèle java des <em>AssertionError</em> pour pouvoir enregistrer notre score afin de l&#8217;afficher dans le rapport :</p>
<pre name="code" class="java">package evaluator;

/**
* An assertion error that hold a score
* @author tvibes
*/
public class AssertionScoreError extends AssertionError {

	private double score = 0.0;

	public AssertionScoreError(Object detailMessage, double score) {
		super("" +  detailMessage);
		if (detailMessage instanceof Throwable)
			initCause((Throwable) detailMessage);

		this.score = score;
	}

	public double getScore() { return this.score; }
}</pre>
<p>Il ne reste qu&#8217;a créer une méthode <em>assertScore()</em> qui va nous permettre de lever nos <em>AssertionScoreError</em> :</p>
<pre name="code" class="java">package evaluator;

/**
 * @author tvibes
 */
public class ExtendedAssert {

	public static void fail(double score){
		fail(null, score);
	}
	public static void fail(String message, double score){
		throw new AssertionScoreError(message == null ? "" : message, score);
	}
	static public void assertScore(String message, double score){
		if(score&lt;1)
			fail(message, score);
	}
}</pre>
<h3>Les méthodes @DataProvider : &#8220;alimenter&#8221; nos méthodes de tests en données.</h3>
<p><a href="http://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/" target="_BLANK">Plus simple à manipuler que l&#8217;équivalent JUnit @Parameters</a>, c&#8217;est véritablement la fonctionnalité qu&#8217;il nous fallait pour pouvoir jouer notre test de composant sur un corpus de test. Le <em>Data Provider</em> est une méthode <del datetime="2010-12-22T07:54:04+00:00">statique</del> qui doit retourner Object[][] (<a href="http://testng.org/doc/documentation-main.html#parameters-dataproviders" target="_blank">voir documentation</a>)</p>
<pre name="code" class="java">package evaluator.unit.testng;

import static evaluator.ExtendedAssert.assertScore;

import java.util.ArrayList;
import java.util.List;
import org.testng.annotations.Test;
import evaluator.dataproviders.SocialDataProvider;
import evaluator.scoring.IScoringService;
import ac.search.SocialSearcher;
import ac.output.SocialInteraction;

/**
* @author tvibes
*/
@Test(suiteName="Tests unitaires", testName="Classification")
public class ClassificationTest {

	IScoringService&lt;List&lt;SocialInteraction&gt;&gt; scoringService = null;

	public ClassificationTest(){
		scoringService = new evaluator.scoring.FMeasureSocialInteractionService();
	}

	/**
	* Test method for "message classification"
	* @param testMessage
	*         A test message
	* @param classes
	*         A list with the expected business objects (SocialInteraction)
	*/
	@Test(dataProvider="createSocialMessage")
	public void testClassificationNG(String testMessage, List&lt;SocialInteraction&gt; classes){
		SocialSearcher searcher = new SocialSearcher();
		List&lt;SocialInteraction&gt; current = searcher.getSocialResults(testMessage);
		double score = scoringService.calculate(current, classes);
		assertScore("Résultat: " + current.toString(), score);
	}

	@DataProvider(name="createSocialMessage")
	public static Object[][] createSocialMessage(){
		Object[][] corpus = new Object[][]{
			{"Bonjour", new SocialInteraction(SocialInteraction.OUVERTURE, 100)},
			{"Au revoir", new SocialInteraction(SocialInteraction.FERMETURE, 100)},
		};
	}
}</pre>
<p>Dans cet exemple, la méthode <em>data provider</em> fourni un corpus contenant 2 phrases avec le résultat attendu.<br />
Il est possible d&#8217;externaliser la méthode dans une classe &#8220;dédiée&#8221; grâce à l&#8217;attribut <em>dataProviderClass</em> de l&#8217;annotation @Test. Pour notre projet, cette classe dédiée charge un corpus de tests (280 messages) depuis une base de données et TestNG appelle la méthode testClassificationNG autant de fois que nécessaire.<br />
Nous avons développé un service qui calcule le score (à l&#8217;aide de la formule F-Mesure) que l&#8217;on invoque ici.<br />
Notre méthode spécifique <em>assertScore()</em> permet donc de lever une AssertionScoreError si le score est &lt; à 1 (on est jamais trop exigeant <img src='http://blog.onyme.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).</p>
<h2>Gestion des corpus de tests</h2>
<p>Pour des questions pratiques, nous stockons le corpus de test dans une base de données dont voici le modèle physique :</p>
<div id="attachment_559" class="wp-caption aligncenter" style="width: 560px"><img class="size-full wp-image-559" src="http://blog.onyme.com/wp-content/uploads/2010/12/corpus-mpd.png" alt="Modèle physique pour le stockage du corpus de test" width="550" height="346" /><p class="wp-caption-text">Modèle physique pour le stockage du corpus de test</p></div>
<p>La table <strong>DATA</strong> est la plus importante : c&#8217;est elle qui contient les verbatims ainsi que les résultats attendus. Les résultats attendus (colonne <em>expected</em>) sont des objets que le module TAL est censés produire.</p>
<p>Pour l&#8217;accès au corpus de tests, nous ajoutons quelques librairies bien utiles :</p>
<ul>
<li><a href="http://xstream.codehaus.org/" target="_blank">Xstream</a> : Librairie permettant de sérialiser un objet au format XML. Ainsi nous stockons n&#8217;importe quel objet dans notre table DATA, et le XML est plus souple que le binaire.</li>
<li>simple-jndi : Conteneur JNDI léger (42 Ko) et idéal pour les tests car il ne tire aucune dépendance et ne nécessite <span style="text-decoration: underline;">aucune</span> ligne de code pour charger le conteneur et une <em>DataSource</em></li>
<li>jTDS : Connecteur JDBC open-source pour Microsoft SQL Server (Le SGBDR étant imposé par le client pour le projet global nous avons conservé ce système pour notre base de corpus de tests)</li>
</ul>
<h2>Reporting</h2>
<h3>ReportNG</h3>
<p>Un des points noirs pour notre projet dans les briques rassemblées jusqu&#8217;ici est la génération de rapport par TestNG : les rapports sont vraiment moches (J&#8217;espère que Cédric Beust me pardonnera, si un jour il lit ce billet). Heureusement, l&#8217;extensibilité du framework (existence d&#8217;une API de reporting) a fait que des développeurs ont mis au point des modules de génération de rapports beaucoup plus esthétiques. C&#8217;est le cas de <a href=http://dandyer.co.uk/ target="_blank">Dan Dyer</a> qui propose le plug-in <a href="http://reportng.uncommons.org/" target="_blank">ReportNG</a></p>
<p>ReportNG est disponible dans le repository Maven ou sur Github.</p>
<p>A la base ReportNG prévoit la possibilité de surcharger la feuille de style. C&#8217;est bien, mais insuffisant pour nous : Nous avons besoin de modifier les pages pour y faire apparaître nos indicateurs. ReportNG utilise le moteur de template Velocity.</p>
<ul>
<li><strong>les +</strong>: Je n&#8217;avais jamais utilisé Velocity, mais il s&#8217;avère être un excellent choix car il est vraiment simple à appréhender. Par ailleurs, il convient bien avec le modèle d&#8217;objets de TestNG.</li>
<li><strong>les -</strong>: ReportNG embarque ses templates dans le Jar et ne prévoit pas de moyen de sépcifier d&#8217;autres templates. De plus, la classe chargée de la génération du rapport (classe <em>HTMLReporter</em> qui implémente <a href="http://testng.org/javadocs/org/testng/IReporter.html" target="_blank">org.testng.IReporter</a>) défini tous ces attributs et méthodes en <em>private</em> ce qui rend plus difficile la surcharge.</li>
</ul>
<div id="attachment_576" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.onyme.com/wp-content/uploads/2010/12/capture-synthese-300x174.png"><img class="size-medium wp-image-576" title="capture-synthese" src="http://blog.onyme.com/wp-content/uploads/2010/12/capture-synthese.png" alt="Capture d'écran de l'écran de synthèse" width="300" height="174" /></a><p class="wp-caption-text">Exemple de rapport - l'évaluation de nombreux composants est présentée</p></div>
<p>Grâce à quelques <em>helpers</em> que nous déclarons dans le contexte Velocity, nous pouvons mettre en forme notre rapport de synthèse qui agrège les scores de l&#8217;ensemble des tests. Les différents résultats sont &#8220;colorés&#8221; de manière à identifier rapidement les séries de tests qui donnent de bons résultats ou ceux qui en donnent de mauvais et sur lesquels nous allons devoir travailler! (exemple: vert = score > à 80%; rouge sombre = score < à 20%)</p>
<h3>maven-site-plugin</h3>
<p>Ce plug-in pour Maven permet d&#8217;ajouter des pages de documentation ou d&#8217;analyse à nos rapports. Je ne vais pas détailler cette partie, la <a href="http://maven.apache.org/plugins/maven-site-plugin/" target="_blank">documentation du plug-in</a> permet de rapidement comprendre comment générer un &#8220;maven site&#8221; et y intégrer les rapports produits par ReportNG.</p>
<h2>Conclusion</h2>
<p>Dans notre précédent billet, nous tentions de démontrer à quel point l&#8217;évaluation continue des résultats est importante dans un projet R&amp;D.</p>
<p>Avec TestNG, nous disposons de l&#8217;outil permettant de concrétiser cette démarche d&#8217;évaluation sans avoir passé trop de temps sur la mise au point. Il s&#8217;intègre bien à Maven et nous pourrions aller jusqu&#8217;à déclencher l&#8217;évaluation à chaque <i>commit</i> dans les composants de traitement, sur notre serveur Hudson et regénérer les rapports.</p>
<p>Par ailleurs, cet ensemble pourra être réutilisé dans nos autres projets. Il ne nous suffira plus que :</p>
<ul>
<li>de constituer les corpus de tests</li>
<li>coder que les services d&#8217;évaluation.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.onyme.com/la-rd-pilotee-par-les-tests-avec-testng/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La R&amp;D pilotée par les tests</title>
		<link>http://blog.onyme.com/la-rd-pilotee-par-les-tests/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=la-rd-pilotee-par-les-tests</link>
		<comments>http://blog.onyme.com/la-rd-pilotee-par-les-tests/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 17:28:53 +0000</pubDate>
		<dc:creator>Thibaud VIBES</dc:creator>
				<category><![CDATA[TAL]]></category>
		<category><![CDATA[Tests]]></category>

		<guid isPermaLink="false">http://blog.onyme.com/?p=512</guid>
		<description><![CDATA[L'activité de Recherche et Développement consiste à mettre au point un produit ou un service qui répond à une problématique nouvelle. Ce produit (ou service) pourra être dit "innovant".

Onyme propose des "prestations" de R&#38;D, plus particulièrement dans le domaine du Traitement Automatisé des Langues. Nos clients viennent nous voir avec des données (textes) et une problématique à résoudre et nous élaborons avec eux un plan de R&#38;D. Ce plan inclue systématiquement une évaluation continue de la R&#38;D.

Dans ce billet nous vous présenterons notre démarche R&#38;D pilotée par les tests. Un second billet viendra par la suite illustrer cette démarche avec un cas client et des exemples de codes.]]></description>
				<content:encoded><![CDATA[<h2>Introduction</h2>
<p>L&#8217;activité de Recherche et Développement consiste à mettre au point un produit ou un service qui répond à une problématique nouvelle. Ce produit (ou service) pourra être dit &#8220;innovant&#8221;.</p>
<p>Onyme propose des &#8220;prestations&#8221; de R&amp;D, plus particulièrement dans le domaine du Traitement Automatisé des Langues. Nos clients viennent nous voir avec des données (textes) et une problématique à résoudre et nous élaborons avec eux un plan de R&amp;D. Ce plan inclue systématiquement une évaluation continue de la R&amp;D.</p>
<p>Dans ce billet nous vous présenterons notre démarche R&amp;D pilotée par les tests. Un second billet viendra par la suite illustrer cette démarche avec un cas client et des exemples de codes.</p>
<h2>Dans R&amp;D il y a Recherche</h2>
<p>Le principe de la recherche implique nécessairement une notion d&#8217;incertitude et le prestataire (Onyme) ne peut s&#8217;engager sur des résultats. Cela relève du bon sens mais aussi du cadre fiscal si le client déclare ses dépenses de R&amp;D en vue d&#8217;un crédit d&#8217;impôt (CIR). En effet, nos clients ne pourraient en aucun cas déclarer nos prestations en Crédit Impôts Recherche, si nous sommes certains d&#8217;atteindre les objectifs demandés et que nous nous engageons contractuellement dessus.<br />
Seuls l&#8217;obligation de moyens peut-être contractualisée.</p>
<p>A l&#8217;inverse, ce n&#8217;est pas parce que la prestation ne définit pas clairement des objectifs qu&#8217;il s&#8217;agit de R&amp;D : toute prestation que nous facturons fait apparaître la part de R&amp;D. Le client peut donc reporter cette part dans ses dépenses &#8220;éligibles CIR&#8221; puisque <a title="Onyme obtient l'agrément CIR" href="http://blog.onyme.com/onyme-agrement-cir-prestataire-de-recherche/">nous avons obtenu l&#8217;agrément</a>. Cela peut faire l&#8217;objet de contrôles, et s&#8217;il s&#8217;avère que nous surévaluons la part de recherche dans dans le projet, nous pourrions nous voir retirer l&#8217;agrément. Nous mettrions alors nos clients en difficulté qui pour l&#8217;Etat auraient &#8220;surestimés&#8221; leur dépenses de R&amp;D éligibles au CIR. Le risque étant de devoir rembourser le crédit d&#8217;impôts, voir de payer une amende.</p>
<h2>Présentation de la démarche</h2>
<p>S&#8217;il n&#8217;est pas permis de s&#8217;engager sur un niveau de qualité des traitements, il est en revanche permis (et conseillé) de s&#8217;engager sur une stratégie d&#8217;évaluation de ces résultats.<br />
Pourquoi? Parce qu&#8217;il n&#8217;est pas question de laisser le client dans un tunnel pendant toute la durée du projet, pour lui indiquer au final :</p>
<blockquote><p>finalement nous n&#8217;avons rien trouvé, voici notre rapport de recherche et nos conclusions &#8230;</p></blockquote>
<p><em>(traduction: vous n&#8217;avez perdu que 60% de la somme grâce aux réductions fiscales, et vous avez quand même un beau rapport de 200 pages)</em></p>
<p>Chez Onyme, nous incluons contractuellement cette stratégie d&#8217;évaluation dans la démarche projet.<br />
La définition intervient généralement en début de projet (voir en avant-vente) et conduit à la production d&#8217;un document cadre : le protocole d&#8217;évaluation. Il rappelle :</p>
<ul>
<li> le périmètre du projet, c&#8217;est à dire la problématique à résoudre. A partir ce périmètre nous pouvons décrire précisement les données  et les traitements à mettre au point.</li>
<li> les niveaux de qualités attendus par le client (la cible à atteindre). Ce n&#8217;est pas parce qu&#8217;Onyme ne peut s&#8217;engager sur ces niveaux que le client n&#8217;a pas le droit d&#8217;avoir d&#8217;exigence / une idée précise de ce qu&#8217;il souhaite obtenir.</li>
<li> les indicateurs de mesure de qualité. On parle aussi de &#8220;performance&#8221;.</li>
<li> les modalités du reporting : fréquence des rapports d&#8217;évaluation, format, destinataires, &#8230;</li>
<li> les jeux de données employés pour réaliser les mesures.</li>
</ul>
<p>L&#8217;idéal étant de pouvoir automatiser l&#8217;évaluation du système et la génération des rapports&#8230;</p>
<h2>Difficultés et enjeux de l&#8217;évaluation</h2>
<blockquote><p>The essential problem of NLP evaluation is that the evaluator has to advance between Scylla and Charybdis<br />
Karen Sparck Jones, 1994, Towards Better NLP System Evaluation</p></blockquote>
<p><em> (source: <a href="http://www.aclweb.org/anthology-new/H/H94/H94-1018.pdf">http://www.aclweb.org/anthology-new/H/H94/H94-1018.pdf</a>)</em></p>
<p>Traduction: Dans le domaine du TAL, définir un bon un outil de mesure de la qualité du traitement est aussi complexe que la mise au point du traitement lui même, car cela revient (dans l&#8217;idéal) à résoudre la problématique en elle même. Dans cette citation de Karen Sparck Jones (merci à Benoît), le problème est alors comparé en terme de difficulté à celui d&#8217;échapper aux monstres <a href="http://fr.wikipedia.org/wiki/Charybde_et_Scylla" target="_blank">Charybde et Scylla</a>.</p>
<p>L&#8217;évaluation doit, d&#8217;autre part, reposer sur un jeu de données. Celui-ci doit avoir les caractéristiques suivantes :</p>
<ul>
<li> Représentatif des futures données à traiter</li>
<li> Stable dans le temps pour pouvoir comparer 2 rapports d&#8217;évaluation</li>
<li> Couvrant tous les aspects du problème</li>
</ul>
<p>Le principal enjeu est d&#8217;impliquer le client afin de construire un jeu réaliste, car c&#8217;est lui qui maîtrise le mieux les données à traiter.</p>
<p>La consitution du jeu de données initial ainsi que la solution d&#8217;évaluation automatique peu paraître fastidieuse au départ. Heureusement, avec Internet on ne part jamais vraiment de 0. Il existe de plus en plus de site qui partagent des données qui peuvent correspondre à la problématique de départ (au moins en partie). Un exemple avec : <a href="http://www.freebase.com/">http://www.freebase.com/</a><br />
Il est aussi possible de faire appel à l&#8217; &#8220;altruisme&#8221; et l&#8217;esprit communautaire des gens. En ce moment, le laboratoire LIDILEM (université Stendhal &#8211; Grenoble 3) propose de &#8220;faire don de vos SMS à la science&#8221; afin de constituer un corpus de 30 000 SMS (rendez vous sur <a href="http://www.alpes4science.org/">http://www.alpes4science.org/</a>)</p>
<h2>Conclusion</h2>
<p>Dans cet article nous enfonçons quelques portes ouvertes, mais ceci dans un seul but: montrer que l&#8217;évaluation continue doit faire partie intégrante du projet de R&amp;D.<br />
C&#8217;est un point crucial car sous-traiter sa R&amp;D est une affaire de confiance.</p>
<p>Une fois opérationnelle, la solution d&#8217;évaluation continue apporte une vision globale sur les performances du système développé, permet d&#8217;évaluer les impacts de toutes modifications, de mesurer les progrès effectués&#8230; Au final elle permet de prendre consciencieusement LA décision vraiment importante : doit-on poursuivre l&#8217;investissement de R&amp;D?</p>
<p>Dans un prochain article, nous vous présenterons concrètement des outils, du code pour produire une solution d&#8217;évaluation qui rassure le client.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.onyme.com/la-rd-pilotee-par-les-tests/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
