EMNLP 2017 | Université de Stuttgart: assistant fonction: outil de recherche NL pour API

EMNLP 2017 Démonstrations du système fonction Assistant: Outils pour l'API NL Fonction Assistant: un outil pour NL Interrogation d'API Université de Stuttgart Universität Stuttgart

Résumé Dans cet article, nous décrivons une fonction d'assistance, ce qui est une légère boîte à outils en Python pour l'utilisation des requêtes en langage naturel et explorer la bibliothèque de code source. La boîte à outils est conçu pour aider l'API cible les utilisateurs finaux à travers requête en langage naturel et à trouver rapidement des informations sur la description de la fonction. Pour un fond donné et le texte API de requête, l'outil utilise l'analyse sémantique Richardson et Kuhn (2017), et de trouver la fonction candidate du texte en effectuant une traduction est connue pour représenter dans l'API. Dans l'API exemple, la traduction apprendra à partir du code exemple dans le texte. Le kit inclut des fonctionnalités pour la construction de pipelines et de traduction du moteur de recherche tout programme de code source. Afin d'explorer cette dernière caractéristique, nous avons organisé sur Github 27 projets Python bien connus effectués sur de nouvelles expériences.

1 introduction

Lors du développement de nouvelles applications, les développeurs de logiciels utilisent souvent différents logithèque conversion tiers ou de l'API. La plupart du temps de développement se sont engagés à comprendre la structure de ces API, figure la position de la fonction cible, et de comprendre les caractéristiques structurelles du logiciel ou convention de nommage est comment cela fonctionne. Quand une grande API cible, trouver la fonctionnalité désirée peut être une tâche ardue et de longue haleine. Souvent, les développeurs utiliseront des ressources telles que Google ou StackOverflow trouver (souvent indirecte) réponse à la question.

Nous utilisons deux exemples de fonctions kit NLTK bien connus dans la figure 1 pour illustrer ces questions. Chaque fonction avec une courte chaîne de documentation correspondant à cette description dans chaque référence de fonction, qui fournit une description fonctionnelle de l'utilisateur du logiciel. Bien que la compréhension de l'analyse de la documentation et le code et les connaissances techniques doivent compter sur les graphiques, mais même avec cette connaissance, convention de nommage de fonction est tout à fait arbitraire. fonction Add_arc peut aussi être create_arc. Nous nous attendons à une autre convention de nommage de l'utilisateur final peut se fourvoyer lors de la recherche de cette fonction. Encore une fois, cette fonction peut différer de la description disponible dans l'utilisateur final décrit.

Exemple 1 La figure dépendance à la documentation de la fonction Python figure NLTK

En revanche, comprendre la nécessité de comprendre les détails d'une fonction particulière remove_by_address DependencyGraph utilisée pour réaliser. Néanmoins, la fonction correspond au fonctionnement normal d'un noeud est retiré du graphe de dépendance. Ici, sur la façon de supprimer spécifique à un des détails techniques d'adresse donnée peut confondre l'objectif global de cette fonction, il est difficile de trouver ou comprendre.

Dans une première approximation, la nécessité de l'API donnée de navigation pour connaître la relation de correspondance entre le texte et la description du code source de la figure. Par exemple, la figure 1 connaissent des expressions anglaises ajouter un arc peut être traduit (quelque peu arbitraire) add_arc, ou traduit l'adresse adresse indiquée. L'interprétation doit également savoir comment détecter certaines entités cibles ou des actions, telles que l'ajout d'un moyen d'arc en créant un arc dans ce cas. D'autres techniques doivent apprendre la correspondance, telles que les adresses et certaines dépendances entre la figure mises en uvre.

Dans nos précédents travaux (Richardson et Kuhn (2017), ci-après dénommé RK), nous avons des exemples de différents langages de programmation et le code source en langage naturel ensemble d'API pour apprendre ces types de correspondance. Nous chaque API donné (y compris le texte et la fonction exprimions) comme un corpus parallèle pour former un modèle d'analyse sémantique simple. En plus du type ci-dessus de l'apprentissage traduction de la correspondance, nous contribuons également à l'apprentissage en ajoutant des fonctions au niveau du document d'autres dialogue technique pour obtenir des améliorations.

Dans cet article, nous allons nous concentrer sur les outils que nous utilisons le modèle comme un ensemble d'API de requête. Étant donné une API cible, nous apprenons un modèle basé sur l'analyseur sémantique MT se traduira par le texte représenté sous forme de code API. Les utilisateurs finaux peuvent développer une API dans les coulisses de la requête en langage naturel, notre modèle sera transformé en fonction d'un candidat, il a déclaré que l'objectif est de trouver la fonctionnalité requise. Notre outil appelé fonctions auxiliaires utilisées de deux façons: comme un conduit de boîte noire pour la collection de modèles directement la construction de toute API. En outre, vous pouvez utiliser cet outil flexible API Python interne pour personnaliser et intégrer avec d'autres composants externes ou modèle.

Dans cet article, nous nous concentrons sur pour la première fois d'utiliser nos outils. Afin d'explorer la construction d'un modèle de la nouvelle série API, nous courons le pipeline de projet Python open source 27 (github.com/vinta/awesome-python) dans la liste des fameux projet impressionnant Python. Et les travaux antérieurs, nous avons effectué un test complet de ces ensembles de données, ces mesures expérimentales de notre modèle est fonction de génération de description de l'API invisible, dit imitateur requête de l'utilisateur.

Travaux connexes

API de requête en langage naturel a toujours été un objectif de génie logiciel, les problèmes généraux liés à la réutilisation des logiciels (Krueger, 1992). À ce jour, il y a un certain nombre de produits à l'échelle industrielle (par exemple, www.krugle.com, www.searchcode.com) dans ce domaine. À notre connaissance, la plupart des implémentations utilisent la mise en correspondance de faible profondeur à long terme et / ou l'extraction des technologies de l'information (Lv et al., 2015), nous avons utilisé différents des composants plus classiques et techniques des méthodes de la PNL. Comme nous l'avons montré dans cet article, et RK, l'adaptation à long terme et les technologies associées comme base concurrentielle parfois, mais presque toujours supérieure à notre méthode de traduction.

Récemment, il y a une préoccupation croissante code API Machine Learning représente l'apprentissage, en particulier dans l'utilisation des ressources telles que GitHub ou StackOverflow. Cependant, ce travail est souvent appris de plusieurs ensemble d'API (Gu et al., 2016), ce qui rend difficile d'évaluer un tel système et appliqué à une API de requête particulière. D'autres travaux ont porté sur l'étude généré plus à partir du code source de programmation langage naturel commentaires (Allamanis et al., 2015), est généralement étroitement axé sur un langage de programmation spécifique (par exemple, Java) ou un ensemble de l'API. À notre connaissance, aucune de ces méthodes comprennent l'aide d'une API de requête particulière et logiciels de support pour construire un pipeline personnalisé.

Techniquement, notre approche du travail lié à l'analyse sémantique, analyse sémantique pour comprendre l'application de saisie de texte en langage naturel généré à partir dudit fonctionnaire, notamment, des questions et des réponses. MT (Wong et Mooney, 2006) et de nombreuses méthodes analytiques existantes (Zettlemoyer et Collins, 2009) sont directement inspirés. Voir plus de RK pour le contact et les travaux connexes de discussion.

3 méthodes techniques

Dans cet article, nous nous concentrons sur la façon d'apprendre à partir du code source ou ensemble de fonctions API dans la description textuelle de la génération représentée. Nous nous référons à ces fonctions objectif est exprimé en tant que composante de l'API. Chaque composant est attribué un nom de fonction, paramètre liste et d'autres informations facultatives, telles que l'espace de nom. Étant donné un échantillon de l'exemple API du composant texte,

L'objectif est d'apprendre comment générer le texte correct pour chaque x, des composants bien construit zC. Lorsque considérée comme une analyse sémantique du problème, nous pouvons cibler chaque z considéré comme forme logique similaire. Dans cet article, nous allons nous concentrer sur le programme source et la fonction Python Python z, il se rapprochera de notre entrée de langage de programmation en langage naturel et la sortie est inconnue, comme le montre RK.

Lorsqu'il est utilisé dans une requête, notre modèle accepte une fonction de saisie de texte et d'essayer de générer la représentation requise. Techniquement, notre approche suit nos travaux précédents, comporte deux volets: modèle de traduction basée sur les mots un poids léger, simple, générer des composants de l'API candidat, ainsi qu'un modèle distingué, en utilisant des phrases supplémentaires et au niveau des documents rang des sorties de modèle de fonction de traduction. Tous ces modèles sont dans notre outil mis en uvre localement, nous décrivons chaque partie à son tour.

3.1 Mode Traduction

Compte tenu d'une séquence de texte d'entrée (ou de la requête) x = w1, ..., w | x |, le but est de générer une composante API de sortie z = ui, ..., u | z |, ce qui implique l'apprentissage d'une distribution conditionnelle p (z | x), nous poursuivons le bruit la méthode du canal,

Ainsi, a priori cohérente p (z) sur l'hypothèse que la composante de sortie, ce qui implique le calcul du modèle p (x | z), dans lequel le modèle de traduction basée sur les mots peut être exprimé sous la forme:

Lorsque la somme est comprise dans une plage de recueillies auprès de tous les nombreux-x z (mots).

Bien qu'il existe de nombreux modèles d'alignement de l'ordre supérieur (. 1993 Brown et al,) ont des paramètres de position supérieurs de différents moyens de base de modèles de mot d'expression, mais nous avons trouvé que la plupart des mots simples avant le modèle de traduction ou IBM Model 1. Le modèle de précision calculée en utilisant la formule suivante pour toutes les voies:

Parmi eux,

Défini pour tous les mots

A termes de composant sont données

Le nombre de distribution.

Alors que beaucoup la politique d'estimation des paramètres du modèle de formation existe sur la base du mot, nous avons également constaté que le programme le plus simple, de EM Brown et al. (1993) qui fonctionne le mieux. Dans RK, nous décrivons une stratégie de décodage de temps linéaire (à savoir, destiné à générer à partir d'un composant d'entrée), nous avons utilisé ici la quantité C. Nos outils également atteint notre type de stratégies conventionnelles de décodage de MT, ils sont plus appropriés pour la sémantique de l'API plus vastes et complexes de la langue.

3.2 Trier discrimination

La plupart suivent l'analyse sémantique (Zettlemoyer et Collins, 2009), nous avons utilisé un certain nombre de différenciation - composante modèle linéaire pour générer réarrangés à partir du modèle de traduction sous-jacente. Ce modèle définit une condition de distribution: un vecteur de paramètre pour

Et un ensemble de fonctions propres

,

.

Nos outils pour réaliser plusieurs méthodes de formation et d'optimisation différentes. Aux fins du présent article, nous utilisons le nombre maximum de conditions telles que l'élévation du gradient stochastique de l'algorithme en ligne dans l'objectif naturel de former notre modèle.

3.2.1 Caractéristiques

Pour un des composants d'entrée et de sortie texte donné x z,

La définition d'un ensemble de caractéristiques entre ces deux entrées. Par défaut, notre implémentation de conduite utilise trois types de fonctions, utilisez les mêmes fonctionnalités dans RK. La première catégorie comprend des fonctions de niveau de mots supplémentaires, tels que des composants / mot correspondant, qui se chevauchent, des informations de syntaxe assemblage. La seconde catégorie comprend des phrases et des caractéristiques phrase de niveau entre le texte et les éléments candidats, qui sont alignées symétriquement à partir du mot de niveau heuristique d'extraction.

Les autres caractéristiques comprennent la fonction au niveau du document. Cela inclut la relation entre les informations relatives à la hiérarchie des classes API sous-jacente, et cette hiérarchie des mots / phrases et des classes abstraites. De plus, nous utilisons un paramètre supplémentaire dans la description du texte du document Dans la description pour indiquer s'il y a chevauchement des candidats des composants de mots.

4 et en utilisant le

Toutes les fonctions ci-dessus sont mises en uvre dans le kit d'aide de la fonction. L'outil fait partie des versions de logiciels de soutien de nos travaux précédents Zubr. Pour améliorer l'efficacité, la fonctionnalité de base est Cython ( écrit, Cython est de compiler un ensemble du langage Python, aide l'intégration locale C / C ++.

L'outil est conçu pour être utilisé de deux façons: d'abord, comme une boîte noire pour construire un tuyaux de traduction personnalisé et moteur requête API. L'outil peut également utiliser notre API Python Cython et l'intégration avec d'autres composants. Nous nous concentrons sur la première fonction.

4.1 Conception bibliothèque et tuyauterie

Notre bibliothèque utilise l'injection de dépendance des principes de conception de la POO. Tous les composants de base sont tels que classe complètement séparé à réaliser, chaque classe a un certain nombre de valeurs de configuration connexes. Ces composants par classe d'interaction appelé Pipeline, divers composants de classe spécifiés par l'utilisateur et les dépendances sont liées ensemble et configuration globale construit à partir des composants. Des exemples d'objets partagés et les paramètres de configuration ultérieures déterminées par un tel global ou par injection, ces paramètres peuvent être modifiés dynamiquement tout au long de l'exploitation du pipeline.

En écrivant un script pour créer un tuyau de conduite, comme le montre la figure. Le fichier est un fichier Python ordinaire, avec deux variables nécessaires. Le premier paramètre spécifie la variable associée au pipeline différents paramètres de configuration avancés. Dans ce cas, il est prévu un --baseline de base, qui peut être déclenchée pour lancer une expérience de base, et aura une incidence sur le pipeline de traitement ultérieur.

Exemple 2 méthode de distribution de script figure pour la construction d'un modèle de traduction et d'interroger le serveur

La deuxième plus importante variable est appelée une tâche (tâches), qui précise l'ordre des sous-processus qui doit être effectuée. Cette fonction est un pointeur vers la liste de champs dans l'utilitaire de base sous-jacent Zubr Kit (avec chaque préfixe Zubr) ou des pointeurs définis par l'utilisateur. Ce particulier en utilisant un conduit de DocExtractor spécifié à partir du code source de l'utilisateur ensemble de données du référentiel commence à construire, puis construire le modèle SymmetricAlignment conversion symétrique, par l'intermédiaire de différentes étapes intermédiaires, la fonction FeatureExtractor aspirante, reranker discriminante Optimizer. Il se fait en construisant une interface de requête et les serveurs de requête et QueryInterface QueryServer, il peut alors être utilisé pour interroger l'entrée de l'API.

Comme décrit ci-dessus, chaque sous-processus a un certain nombre de paramètres de configuration associés, par exemple Pipeline conduit à l'objet attache de configuration globale. Pour le modèle de traduction, y compris, par exemple, mettre en place un type de modèle de traduction à utiliser, le nombre de modèles de formation des itérations à utiliser et ainsi de suite. Tous ces paramètres peuvent être spécifiés sur le terminal, peut être spécifié dans un profil distinct. En outre, l'utilisateur peut définir librement des fonctions personnalisées, telles que les données de processus, ou peut être utilisé pour modifier le pipeline de traitement par défaut mis en uvre ou de nouvelles fonctionnalités d'apprentissage de la machine.

4.2 serveur Web

La dernière étape est de créer un pipeline peut être utilisé pour interroger l'API d'entrée du serveur Web HTTP. En interne, le serveur pousse le modèle de traduction formé et réarrangements discriminantes qui accepte les requêtes des utilisateurs et essayer de les traduire en représentation de la fonction API. Ces candidats seront ensuite traduire comme une réponse possible à l'arrière de la requête à l'utilisateur. D'après les résultats, si la fonction objectif est introuvable, l'utilisateur peut changer ses / ses problèmes, ou par un lien vers le code source de la fonction pour voir la mise en uvre.

Requête capture d'écran exemple du serveur illustré à la figure 3. Ici, l'arrière-plan est des boîtes à outils API NLTK, la requête est la séquence d'apprentissage modèle de marqueur. Bien que pas explicitement mentionné, mais le rendement du modèle HMM tagger fonction de formation de HiddenMarkovModelTagger. La partie droite de la figure montre le chemin d'un lien hypertexte fonction de formation Github de la source d'origine.

3 exemple d'écran de fonction auxiliaire tiré du serveur Web

expérience 5

Notre DocExtractor actuelle obtenir le soutien du code source Python d'origine pour construire une collection d'ensembles de données parallèles. En interne, l'outil utilise la bibliothèque standard Python AST ast utilitaire lit le code source, et extrait la description de la fonction et ensemble. En outre, l'outil extrait la description de la classe, la description et les paramètres et les valeurs de retour sur la structure interne de la hiérarchie des classes API. Utilisez ensuite ces informations pour définir la dernière catégorie de fonction au niveau du document.

Tableau 1 jeux de données New English GitHub

Pour tester cela, nous avons établi un pipeline et mené des expériences pour le 27 projet Python populaire. Le but de ces expériences était de tester notre robustesse d'extraction, et voir comment nous utilisons notre modèle précédent configuration expérimentale invisible pour répondre aux questions de ces ressources.

5.1 Dataset

Le tableau 1 montre Articles exemplaires. Chaque ensemble de données de paire # conformes ou numéro parallèle, le signe # composante de sortie de la langue, # (NL) et la taille des mots mot représenté composants fonctionnels est quantifiée.

5.2 installation expérimentale

Chaque jeu de données est un ensemble de répartis au hasard en formation, les tests et le développement. Elle est fournie en utilisant 70% à 30% (ou 15% / 15%) de la segmentation. On peut être vu comme un ensemble de peut être invité à plugiciel utilisateur imiter le modèle de requête. En général, tous les modèles sont formés sur l'ensemble de la formation, et les paramètres sont adaptés au développement des ultra-ensembles.

Pour tester lors de la saisie de texte invisible, la sortie du composant de modèle génère une liste de candidats. Si la sortie de la fonction exprimée d'or correspondance exacte, alors que la sortie est correcte. Comme précédemment, nous avons mesuré la précision @ 1, la précision des dix (précision @ 10) et MRR.

Comme nos précédents travaux, l'utilisation de trois de base supplémentaires. Le premier est un simple sac de mots (l'arc) modèle, qui utilise les paires de phrase comme une option. Le second terme est les matchs de base, triée en fonction du nombre de matches candidats entre le mot d'entrée et les composants de mot. Le modèle sans Reranker Nous avons également comparé la traduction des résultats (modèle).

6 Résultats et discussion

Les résultats des tests sont présentés dans le tableau 2, conformément à nos résultats précédents. la performance BoW terme et supérieur à tous les autres matches du modèle de base, ce qui montre une fois encore que plus complexe qu'une API simple qui correspondent aux composantes de mot de requête. Par rapport au modèle de traduction d'utilisation seulement, le modèle Reranker conduisant à une amélioration tous les ensembles de données, ce qui indique que le niveau de document de phrase et d'améliorer la fonction de l'ensemble de données peut aider.

Nous notons que ces expériences sont synthétiques, comme ces exemples et les requêtes des utilisateurs réels s'il existe des similitudes peu claires. Cependant, en supposant que chaque plug-in collection est un véritable échantillon représentatif requis par la requête de l'utilisateur, on peut interpréter les résultats comme une indication de notre modèle de la façon de répondre aux demandes de renseignements. Si oui ou non ces exemples reflètent le doute réel, nous croyons qu'ils offrent encore un bon point de repère pour la construction du modèle. Tout le code et les données seront publiées, afin de construire de nouvelles expériences et des applications. les travaux futurs se concentrera sur les conduire à des requêtes plus naturelles (par exemple, par StackOverflow), et par Demo Web permanent Conduite utilisation de la recherche.

Tableau 2 Les résultats des tests de nos nouvelles données définies Github

7. Conclusions

Nous présentons l'assistant de fonction, un outil léger pour API de requête en langage naturel sans contrainte ensemble. Les utilisateurs peuvent fournir un projet de code source cible pour nos outils et construire à partir de serveurs Gratter ou customize pipeline de traitement de traduction et d'interrogation. En plus de cet outil, nous avons créé une nouvelle ressource pour l'apprentissage requête API pour construire à partir de 27 populaire formulaire de collecte de données de projet Github. Bien que notre méthode utilise des composants simples, mais nous espérons que nos outils et ressources deviendront un ouvrage de référence dans ce domaine, et, finalement, aider à résoudre la recherche de logiciels de tous les jours et les questions réutilisabilité.

Jusqu'à ce que finalement vous! Une connexion Wi-Fi ou d'un aéronef seront officiellement mis en service à la fin de l'année!
Précédent
Accueil MPV voitures électriques aussi l'exposition BYD chanson MAX EV Shanghai Motor Show
Prochain
Bosh: Chaleur et ensemble de la famille
J'ai entendu que vous aimez le nombre d'images? Le nombre total d'Intel vous permettent de remplir!
2019 District de Xicheng, « Coupe Miyoshi » les étudiants de l'ouverture de la ligue de basket-ball 72 équipes participantes 886 étudiants
« Week-end en classe AI » Vue d'ensemble du réseau de neurones (partie théorique) l'apprentissage de la machine « pit », vous rencontrerez
cri Look ...... entreprises technologiques de la Silicon Valley dont le salaire maximum de stage?
son coeur aujourd'hui | inversion! le vieillissement de la population n'est plus un problème, parce qu'il
« Rong Yao » vraiment « roi » il? Lufeng Rong Yao exposition automatique avant la vraie voiture
East Beijing Flower Market Street pour mener à bien les « femmes aspiraient pour le parti Louange Chine nouvelle » campagne
roues cool que vous trahis Long Branch Anou est toujours réelle exposition GT course automobile
Aujourd'hui, le son de base | Google adhérer à la philosophie, prêt à renoncer à des milliards de dollars dans l'offre de contrat militaire des États-Unis
Jingdong est l'intention d'entrer en Europe d'ici la fin de la route il n'y a aucune chance à l'étranger?
OFO politique dépôt de remboursement annoncé: le nombre de lignes a dépassé 8 millions fonction file d'attente