Exklusives Interview mit JetBrainer | Neugieriger Forscher: zwischen Industrie und Wissenschaft, Teil 2


einführen

Dies ist der zweite Teil eines Interviews mit Timofey Bryksin, Leiter des JetBrains  Software Engineering Machine Learning Methods Research Lab, in dem er seine Gedanken zur Zukunft von IDEs, LLM-Tools und der sich verändernden Rolle von Entwicklern teilt. Teil eins finden Sie hier .

Timofey Bryksin

Leiter des JetBrains Software Engineering Machine Learning Methods Research Laboratory



Q

Die neueste Veröffentlichung Ihres Labors konzentriert sich darauf, was Texteditoren in natürlicher Sprache von IDEs lernen können. Können Sie ein Beispiel nennen?


Dieser Artikel ist eher ein Aufruf an die Industrie als eine Berichterstattung über Ergebnisse. Wir haben viel Erfahrung in der Textbearbeitung und kennen daher die Grundlagen der Arbeit mit Texten. Die kognitive Belastung bei der Softwareentwicklung ist sehr hoch, da es beim Programmieren nicht nur ums Tippen, sondern auch um das Organisieren von Gedanken geht. IDEs sind sehr gut darin, diese kognitive Belastung durch Funktionen wie Syntaxhervorhebung oder die Verwendung von Formatierungskonventionen zu reduzieren, die eine konsistente Formatierung des Codes anderer Personen ermöglichen. IDEs verstehen die zugrunde liegende Struktur von Text und liefern Einblicke in Zusammenhänge, die sonst möglicherweise übersehen würden. Die Idee ist, dass dieses gesammelte Wissen außerhalb des Codes, in anderen Arten von Texteditoren, nützlich sein könnte. In natürlicher Sprache können Sie Strukturen sofort identifizieren und hervorheben oder Zusammenfassungen erstellen. Die genaue Methode bleibt eine offene Frage, aber wir denken, sie verdient weitere Überlegungen. Es gibt echte Fortschritte bei der Erforschung der kognitiven Belastung, die mit Aufgaben in natürlicher Sprache verbunden ist, und ähnliche Strategien, die wir in der Art und Weise sehen, wie IDEs mit Code umgehen, sind nützlich, wie z. B. Syntaxhervorhebung, Namenskonventionen und kontextbasierte Funktionen. 


Wir haben einige kleine Artikel in diesem Bereich veröffentlicht und glauben, dass diese Richtung einer weiteren Erforschung bedarf. Insbesondere bei großen Sprachmodellen ist es klar, dass wir jetzt die Entwicklertools und deren Verwendung überdenken müssen. GitHub Copilot X demonstriert beispielsweise eine Chat-Funktion, mit der Sie die IDE bitten können, Fehler in Ihrem Code zu finden. Möglicherweise wird in Zukunft auch eine Sprachschnittstelle hinzugefügt.


Q

Werden zukünftige IDEs die Sprachsteuerung unterstützen?


Vor zwei Jahren wurde ich operiert und konnte meinen Arm den ganzen Sommer über nicht mehr benutzen. Das Tippen mit nur einer Hand ist ermüdend, deshalb habe ich einige Sprach-zu-Text-Tools installiert. Auf diese Weise kann ich in Slack chatten oder einfach mit meiner Stimme tippen. Diese Werkzeuge können die Arbeit mehr oder weniger erleichtern und sind sehr praktisch. 


Aber sobald mein Arm geheilt war, tippte ich sofort wieder mit beiden Händen und hörte ganz auf, den Sprachassistenten zu benutzen. Weil sich das Tippen und die Zeichensetzung schneller und vertrauter anfühlen. Erinnern Sie sich noch daran, als intelligente Lautsprecher und Sprachassistenten zum ersten Mal auf den Markt kamen? Es wird gesagt, dass sie mit Menschen kommunizieren und ihre ultimativen Assistenten werden. Heutzutage werden die meisten dieser Geräte nur noch zum Melden des Wetters und zum Einstellen von Alarmen verwendet. Dennoch bietet die Spracheingabe ein gewisses Potenzial für IDEs, da bestimmte Befehle per Sprache an den Assistenten übermittelt werden können. „Hier den Fehler finden“, „Umgestalten“, „In eine separate Funktion extrahieren“ – diese Befehle sind der natürlichen Sprache sehr ähnlich. Das Versenden von Sprachnachrichten ist heutzutage allgemein üblich und für manche sogar die erste Wahl. Vielleicht hat die nächste Generation von Entwicklern ihre eigenen Ideen, und in ein paar Generationen könnte sogar die Tastatur obsolet sein. 


Q

Was wissen wir sonst noch über die IDE der Zukunft?


Ich glaube, dass wir angesichts dieser neuen Assistenten und Sprachmodelle unsere Arbeitsweise völlig neu bewerten werden. Wenn sich die Rolle des Entwicklers von der reinen Codierung hin zu komplexeren Aufgaben auf höherer Ebene wie Design, Anforderungsskizze, Komponentenentwicklung und Systemaufbau verlagert, werden wir gezwungen sein, unsere Tools neu zu erfinden.


Q

Welchen Einfluss werden große Sprachmodelle auf die Softwareentwicklungsbranche haben?


Die Verallgemeinerung typischer Erfahrungen ist für alltägliche Aufgaben gut, kann aber kein neues Wissen generieren. Daher ist es weniger wahrscheinlich, dass sich LLM auf Aufgaben auswirkt, die normalerweise intellektuelle Anstrengungen erfordern, und eher für routinemäßige, mechanische Aufgaben eingesetzt wird, die automatisiert werden (und werden sollten) . Allerdings würde das Schreiben einer Landingpage für eine Zoohandlung definitiv dem GPT-Modell übertragen werden. Allerdings erfordern Aufgaben wie die Schaffung intelligenter Systeme und die Entwicklung neuer Algorithmen immer noch innovatives Denken, wozu Modelle derzeit nicht in der Lage sind. Ein weiteres großes praktisches Problem ist die Strukturierung von Entwicklungsabläufen rund um LLM-Tools . JetBrains arbeitet aktiv an zukünftigen Entwicklungstools und der Erstellung von Prototypen und wird bald damit beginnen, Fortschritte zu teilen.


Q

Welche Tools nutzen Sie selbst?


Wir verlassen uns nicht auf spezielle Lösungen, da die meisten unserer Projekte in der Regel mit Prototypen enden und für die Entwicklung normale Versionskontroll- und Debugging-Systeme ausreichen. 


Wir benötigen jedoch spezielle Tools, um den Code und verschiedene Textausschnitte zu verarbeiten, Daten zu sammeln und zu analysieren und Datensätze zu erstellen. Deshalb haben wir unsere eigene Bibliothek entwickelt . Beispielsweise ist das Problem der Erstellung von Programmabhängigkeitsdiagrammen für Python-Code noch nicht gelöst und es gibt noch keine voll funktionsfähige Bibliothek. Dies ist hauptsächlich auf die Komplexität der Implementierung einer solchen statischen Funktionalität für dynamisch typisierte Sprachen zurückzuführen. Also müssen wir es selbst tun. 


Neben der Datenerfassung entwickeln wir seit mehreren Jahren die Open-Source-Bibliothek  KInference . Es löst die Herausforderung, neuronale Modelle, die normalerweise mit Python trainiert werden, in eine IDE zu integrieren und diese Modelle insbesondere in einer JVM-Umgebung (Java, Kotlin, Scala, egal) auszuführen. Es gibt mehrere Bibliotheken, die diesen Zweck erfüllen, aber keine erfüllt unsere Anforderungen an Geschwindigkeit, Speicher und Stabilität in einer plattformübergreifenden Umgebung. Deshalb haben wir unsere eigene schnelle und leichte Bibliothek entwickelt, um ONNX-Modellinferenz in reinem Kotlin durchzuführen . Die Implementierung ist sehr effizient und unsere Entwickler beschäftigen sich mit der Optimierung der Speicher- und CPU-Cache-Nutzung, um schnelle Berechnungen sicherzustellen. Dadurch können wir komplexe neuronale Modelle in jede JVM-basierte Sprache integrieren, was bedeutet, dass wir Plugins für unsere IDEs und andere Extras erstellen können. Einige Modelle der Grazie-  Plattform basieren beispielsweise auf dieser Bibliothek. Wir verbessern dieses Tool aktiv und erweitern seine Unterstützung auf andere neuronale Operatoren.


Q

Was ist das größte Modell, das Sie jemals trainiert haben?


Die größten Modelle, die wir zu Forschungszwecken trainierten, hatten etwa 200–300 Millionen Parameter . Wir konzentrieren uns jedoch auch auf Modelle, die lokal auf dem Computer des Benutzers ausgeführt werden können und lokale Daten verwenden. Dieser Ansatz beseitigt insbesondere Datenschutz- und DSGVO-Bedenken, da wir keine Daten extern senden, was uns viel Freiheit gibt. Wenn Daten an einen anderen Ort gesendet werden müssen, wird der Datenschutz zu einem wichtigen Thema.


Q

Welche Bibliotheken nutzen Sie, um die Leistung der Modelle in Ihrem Produkt zu optimieren?


Der Punkt ist nicht die Bibliothek, sondern der Ansatz . Während des Trainings versuchen wir, alle von der Community vorgeschlagenen Techniken anzuwenden: Destillation, Größenreduzierung usw. Danach wird ein großer Teil des Modells auf KInference ausgeführt, und die Ausführungseffizienz ist sehr hoch. Dies ist sowohl für die Beschleunigung als auch für die Komprimierung des Modells hilfreich.


Q

Warum ist Geschwindigkeit auch im Jahr 2023 noch wichtig? Machen Probleme mit begrenzter Rechenleistung noch Sinn?


Solange es sich nicht um sehr große Modelle handelt, ist das auf dem Server kein großes Problem mehr. Dies wird jedoch wichtig, wenn Sie Ihren Laptop auf Ihrem Schoß platzieren und die von ihm abgegebene Wärme den gesamten Raum aufheizen kann. Entwicklertools können sehr ressourcenintensiv sein, insbesondere wenn mit großen Codebasen gearbeitet wird. Nehmen Sie zum Beispiel erweiterte IDE-Funktionen wie Refactoring, die oft eine Indizierung des gesamten Projekts erfordern. Für ein in eine IDE integriertes Modell sollte die ideale Reaktionszeit im Bereich von mehreren zehn Millisekunden liegen und die Speichernutzung so gering wie möglich sein – nur wenige Megabyte. Natürlich können Sie ein ressourcenintensiveres Modell einführen, aber der Grund muss gut sein, beispielsweise wenn das Ziel darin besteht, eine Funktionalität zu erreichen, die Benutzer wirklich begeistert. Kurz gesagt, Sie müssen immer den Ressourcenverbrauch berücksichtigen.


Q

Wie wählen Sie zwischen Geschwindigkeit, Genauigkeit und Vollständigkeit?


涉及 IDE 内 AI 助手(例如,在有效项目中查找 bug 并在代码编辑器中建议修正的工具)时,我们通常倾向于准确性。需要两秒才能工作的准确率达 99.9% 的模型通常比立即运行但准确率仅为 95% 的模型更受青睐。这是因为,后者有二十分之一的概率提供不正确的建议,进而造成困扰。我们希望确保的是,这种辅助不会让开发者感到烦恼以至于他们宁愿冒险不使用。避免误报至关重要,否则开发者将不得不浪费时间来解决这些问题并弄清楚它们确实是误报,而这必然会带来负面情绪。 


速度和准确性之间的权衡有时可以通过辅助性工程调整或预计算来解决。此外,问题不必实时解决:分析编写的代码时,开发者稍晚一点获得建议是可以接受的。这些建议不必立即显示。 


当然,在某些情况下,检出每一个潜在问题非常重要。那么,开发者是否花费额外的时间来处理误报也就不那么重要了。举例来说,搜索安全漏洞时,这种情况经常发生。不过,这样的任务在我们的项目中并不常见。


Q

开发新功能时还需要考虑什么?


务必考虑助手如何集成到开发者的工作流中。我认为社区对这些问题的关注还不够。人们经常会提出新的方式和工具,但重点是了解这些工具如何适应典型开发者的工作。你每天都会听到这样的话:“我尝试了这个功能,它显示了三次奇怪的东西,然后我就把它关掉了。”


Q

这种情况下,什么方式才是正确的?


大多数工具需要用户采取相当大的主动性。他们必须记住工具首先是可用的(许多开发者往往会忘记),有意识地努力运行,然后查看最终产生的结果。在我看来,这些工具应该更加主动。但有一个问题:如果工具不断向用户提出建议,它就会扰乱用户的工作流。那么,问题是如何确保助手能够识别干预的时机。建议应该在开发者对上下文仍然记忆犹新的特定时间提出,但也不应该干扰开发者正在进行的任务。这些是 JetBrains 正在探索的重要问题。


Q

你对你们用于数据科学的编程语言满意吗?


完美的语言没有统一的定义,这完全取决于个人喜好和当前任务。人们倾向于使用具有适当工具的语言。Python 就是这样:它因强大的工具而广受欢迎。简易性也增加了它的吸引力。你不需要像 C++ 那样花很长时间去学习,也不需要了解内存的运作方式。当然,理解这些东西很重要,但 Python 可以让你以相对简单的学习曲线开始。我们使用 Python 进行模型训练,但我们也可以选择不同的路径,使用 Kotlin。 


因此,拥有一种适合每个人并被普遍采用的语言似乎不太现实 – 除非神经网络以某种方式发明了自己的语言并开始用它编写代码。但那就完全是另一回事了。


Q

你观察人们编写代码已经有一段时间了, 这些年来软件开发发生了怎样的变化?


主要趋势是任务自动化工具的发展


在企业开发中,人们倾向于使用复杂的解决方案,其中系统基础架构处理大量复杂逻辑。这样的系统难以开发,也难以理解。大约在 2000 年代中期,随着敏捷方式的兴起,人们的心态发生了转变,开始摆脱这些试图同时完成一切的单一结构。开发者开始倾向于将逻辑嵌入编写的代码中,而不是仅仅依赖于工具和库。 


同时,可以解决特定小任务而不是整个问题的工具的数量也有所增加。人们正在尝试将这些工具结合起来。有些用于开发,有些用于部署、测试、分析和版本控制等。 


另一个显著的转变是认识到人类参与的重要性。好在我们已经摆脱了依赖强大工具和需要极少人际互动的庞大官僚流程。现在很明显,系统是由人类创建的,工具需要人性化,优先考虑人们的便利,即使是以牺牲可预测性为代价。


Q

你能提供一些提高数据质量的建议吗?


数据质量是人们刚刚开始认识到的一个主要问题。“垃圾进,垃圾出”的原则众所周知。不过,良好的基准和可靠的数据集相当稀缺,特别是在我们相对年轻的领域。研究论文的作者通常必须创建自己的数据集。但在某些情况下,其他研究人员在论文发表后检查这些数据集,发现它们的质量并不高。作为我们领域多个顶级会议和期刊的审稿人,我经常注意到这方面没有得到足够的重视。许多论文被拒正是因为研究人员在数据收集阶段没有抓住要点,导致无论他们后来做了什么都无关紧要。


Q

自我监控如何帮助提高数据质量?


首先,必须检查显式和隐式重复。当模型遇到大量相同代码时,它往往会认为这就是应该的样子。为此,我们经常使用克隆检测工具,而不仅仅是筛选掉 GitHub 复刻。 


其次,对于许多任务来说,时间线是数据集非常重要的一部分。因为数据有时会从训练集溜进测试集,即使模型事先不应该看到它。因此,密切关注时间顺序至关重要,确保训练数据先于测试集。 


第三,您需要采用更广阔的视角,仔细检查特定于任务的任何偏见,寻找可能影响模型与现实场景之间联系的任何因素。例如,在最近的一个项目中,我们为提交消息中的自动补全编译了一个数据集。有一些数据集可用于此目的,但最广泛使用的数据集之一只保留了最初的 100 个字符,并排除了不以动词开头的消息。因此,此数据集中的所有消息均以动词开头,并遵循非常典型的结构。于是,任何其他类型的消息都会让这个模型感到意外。 


另一个例子:来自 GitHub 的代码。  虽然它对于研究目的来说肯定很有价值,但人们还是倾向于开源项目。谁说大公司内部的代码编写方式反映了 GitHub 上的情况?公司有其独特的方法、数据结构和库。此外,在 GitHub 目前托管的仓库中,有许多并不能很好地代表行业的普遍代码编写方式,其中包含家庭作业、教程、不维护的项目等内容。因此,通常看起来有很多代码,但仔细查看后,可能并没有看起来那么丰富。



至此,我们将结束对 Timofey Bryskin 的系列采访。请关注本系列的总结,我们将讨论学术研究与工业研究之间的差异,以及是什么造就了有趣的研究成果。我们的第一次采访中涵盖了 ML4SE 实验室所做的工作、选择和评估项目的方式以及招聘研究员时需要考虑的重要事项。Timofey,感谢分享。


本博文英文原作者:Robert Demmer


更多阅读推荐

新发布

JetBrains 全系列 IDE 2023.2 更新概览

RustRover: JetBrains 出品的独立 Rust IDE

JetBrains Aqua: 测试自动化 IDE

JetBrains Qodana: 代码质量平台

Fleet 公共预览版


调研报告

2022 开发人员生态系统现状

Python 开发者年度调查

代码审查工具报告


IDE 使用技巧

10个热门 IDE 主题推荐

IDE 中的“快速功能”

最被低估的快捷键

⏬ 戳「阅读原文」了解更多

本文分享自微信公众号 - JetBrains(JetBrainsChina)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

阿里云严重故障,全线产品受影响(已恢复) 俄罗斯操作系统 Aurora OS 5.0 全新 UI 亮相 汤不热 (Tumblr) 凉了 多家互联网公司急招鸿蒙程序员 .NET 8 正式 GA,最新 LTS 版本 UNIX 时间即将进入 17 亿纪元(已进入) 小米官宣 Xiaomi Vela 全面开源,底层内核为 NuttX Linux 上的 .NET 8 独立体积减少 50% FFmpeg 6.1 "Heaviside" 发布 微软推出全新“Windows App”
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/5494143/blog/10142142
Empfohlen
Rangfolge