Deep TabNine – autouzupełnienie kodu tak dobre, że programista ma coraz mniej pracy

Adam Golański , 23.07.2019 r.
programowanie

Wielu programistów zna wtyczkę TabNine, służącą do automatycznego uzupełniania całych wierszy kodu. Dostępna dla najpopularniejszych edytorów (w tym Atom, Vim, Sublime i Emacs), działająca dla praktycznie wszystkich języków programowania, teraz będzie jeszcze potężniejsza. Jej twórca postanowił „ożenić” automatyczne uzupełnianie z głębokim uczeniem, a efekt jest… no cóż, porażający. Każe się zastanowić, kiedy pojawią się wtyczki, które wyeliminują z rynku programistów – przynajmniej tych bez doktoratu z informatyki.

Od kilku lat bez przerwy mówi się o głębokim uczeniu. Sieci neuronowe zostały wykorzystane produkcyjnie zarówno do sterowania autonomicznymi autami jak i dodawania psich nosków i uszu do twarzy dziewcząt. Jednak narzędzia dla programistów nie spieszyły dotąd się do wykorzystania ich możliwości – mimo że głębokie uczenie w programowaniu obiecywało odciążenie programistów. A może właśnie dlatego się nie spieszyły?

Zmienia się to wraz z Deep TabNine, słynną wtyczką do autouzupełniania, którą połączono z inteligentnym silnikiem przeszukiwania tekstu GPT-2. Zbudowana w architekturze Transformer sieć neuronowa tego silnika powstała przede wszystkim z myślą o przetwarzaniu języka naturalnego. Na wejściu otrzymuje początek tekstu, np. zdanie powieści, by na wyjściu zwrócić kolejne słowa. Wytrenowano ją bowiem na milionach stron i dokumentów, z których wywnioskowała, jak ludzie łączą ze sobą koncepcje i słowa w ramach określonych tematów.

Okazuje się, że przy pewnym podejściu modelowanie kodu można sprowadzić do rozumienia języka angielskiego w nietypowy sposób. Jacob Jackson, twórca wtyczki, student czwartego roku informatyki z University of Waterloo w Kanadzie, wyszkolił sieć na około 2 mln plików z GitHuba. Podczas treningu celem było przewidzenie każdego tokenu na podstawie wcześniej występujących. Aby osiągnąć ten cel, sieć nauczyła się tak złożonych struktur jak np. inferencja typów w języka dynamicznych.

Teraz Deep TabNine, po zainstalowaniu w edytorze analizuje każdy wiersz kodu, sugerując możliwe sposoby uzupełnienia danej konstrukcji języka. Następnie programista może wybrać z listy propozycji uzupełnienie niedokończonej linii bez konieczności wpisywania wszystkiego. Wtyczka najwyraźniej jednak rozpoznaje kontekst kodu źródłowego – gdy np. operujemy na łańcuchach tekstowych, podpowie tylko funkcje, które do tego właśnie służą. Oczywiście wiele propozycji może być głupich, ale też oczywiście programista może je zignorować.

O tym jak wtyczka dokładnie działa, jej autor nie chce mówić, najwyraźniej przymierza się do komercjalizacji projektu. Podkreśla jednak, że jego rozwiązanie wymaga sporo mocy obliczeniowej, której typowy laptop ze swoim typowym GPU nie zapewni – nawet do 10 mld operacji zmiennoprzecinkowych na sekundę. Rozwiązaniem tego problemu ma być przetwarzanie w chmurze TabNine Cloud, do której można się już zapisać do testów beta.

Jako że jednak wielu programistów z troski o swoją prywatność nie zechce raczej udostępniać kodu do cudzej chmury, Jackson zamierza udostępnić lokalne rozwiązania. Pierwsze przeznaczone będzie dla indywidualnych deweloperów, z modelem ograniczonym w rozmiarach, który może działać na zwykłym laptopie ze znośnymi opóźnieniami.

Drugie adresowane jest do firm – tutaj pełna sieć neuronowa Deep TabNine uruchamiana jest na własnych serwerach przedsiębiorstwa, możliwe jest także wytrenowanie skrojonego na miarę modelu, uwzględniającego unikalne wzorce i style w kodzie.

DeepTab Nine został napisany w języku Rust i obsługuje języki takie jak Python, JavaScript, Java, C++, C, PHP, Go, C#, Ruby, Objective-C, Rust, Swift, TypeScript, Haskell, OCaml, Scala, Kotlin, Perl, SQL, HTML, CSS oraz polecenia powłoki bash.

Najnowsze oferty pracy:

Polecane wpisy na blogu IT: