Привіт, читачі! Після першої частини цієї статті я глибше занурився у дослідження нових випадків використання великих мов моделей (LLMs), особливо в новій галузі Data Engineering (інженерії даних).
Посилання на частину 1: https://medium.com/@2005669/utilizing-llms-for-data-engineers-a0f39ba28f85
Як Data Engineer (інженер з даних), я використовую LLMs для створення розумних додатків, орієнтованих на дані, та для побудови конвеєрів даних. Ось як я це роблю:
1. Документація коду
LLMs широко використовуються професіоналами для створення документації до коду. Це включає генерування docstring (докстрінгів), додавання коментарів, пояснення коду, щоб зробити його більш зрозумілим.
Після подання вищеописаного коду для створення медальйонної архітектури, LLM зафіксувала код для дотримання кращих стандартів програмування.
# Імпортуємо необхідні модулі для роботи з Spark і функціями вікна
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number
# Завантажуємо бронзовий DataFrame з файлу Parquet
# Це сирі дані, які були підготовлені для трансформації
bronze_df = spark.read.format("parquet").load("/parquet/bronze/")
# Визначаємо специфікацію вікна для призначення номерів рядків
# Дані будуть впорядковані за стовпцем "someColumn"
# Змініть "someColumn" на фактичне ім’я стовпця у вашому наборі даних
windowSpec = Window.orderBy("someColumn")
# Додаємо новий стовпець "index" до DataFrame, який призначає унікальний номер рядка для кожного запису
# Номери рядків генеруються на основі вказаного порядку вікна
silver_df = bronze_df.withColumn("index", row_number().over(windowSpec))
# Зберігаємо трансформований DataFrame як Delta таблицю в шарі "silver"
# Шар silver представляє чисту, збагачену та структуровану версію даних
silver_df.write.format("delta").mode("overwrite").save("/delta/silver/")
2. Рефакторинг коду
Переклад коду з однієї мови програмування на іншу називається рефакторингом. Через обмеження pandas, ми маємо переписувати той самий код у pyspark або sql. Щоб уникнути ручних повторюваних зусиль, ми використовуємо LLMs для рефакторингу.
3. Оптимізація коду
LLMs здатні аналізувати код та пропонувати вдосконалення для підвищення продуктивності, зменшення складності та дотримання кращих практик. Вони можуть виявляти неефективні патерни коду та пропонувати оптимізовані альтернативи для покращення швидкості виконання.
Вони оптимізують запит для більш швидкого виконання та поліпшення продуктивності.
Примітка: Для великих наборів даних або таблиць використовуйте партиціювання або шардінг. Розділення таблиці на менші логічні одиниці може зменшити обсяг даних, що скануються під час запитів. Наприклад, партиціюйте за категорією або за алфавітними діапазонами item_name
.
4. Вибір кластера
У Databricks ми часто маємо труднощі з вибором відповідного кластера, що оптимізує час та вартість. Оскільки Databricks є однією з найкращих преміум послуг на ринку, вони стягують значну плату за свої послуги.
LLMs можуть допомогти нам вибрати найкраще обчислювальне середовище з відповідними ядрами та RAM для конкретного завдання. Вони аналізують бізнес-розуміння і пропонують найкращі кластери серед сховища, пам'яті, обчислень, оптимізованих для продуктивності, багатофункціональних кластерів, безсерверних обчислень.
5. Генерація коду
LLMs можуть генерувати код для майже кожної проблеми. Вони здатні розуміти та генерувати фрагменти коду, функції та навіть цілі програми на основі описів природною мовою.
Приклад: GitHub copilot, OpenAI Codex
**6.
E-R Моделювання
Великі мовні моделі (LLMs) стали надзвичайно корисними інструментами для моделювання E-R (сущність-зв’язок). Вони можуть допомогти в концептуальному проєктуванні, створенні схем і документації для баз даних.
+----------------+ +----------------+
| Employees | | Departments |
+----------------+ +----------------+
| EmployeeID | | DepartmentID |
| FirstName | | DepartmentName |
| LastName | | Location |
| DepartmentID | +----------------+
| HireDate | |
+----------------+ |
|
|
+----------------+ |
| Projects | |
+----------------+ |
| ProjectID |<------------+
| ProjectName |
| DepartmentID |
| StartDate |
| EndDate |
+----------------+
|
|
|
+----------------+
| Assignments |
+----------------+
| AssignmentID |
| EmployeeID |
| ProjectID |
| Role |
+----------------+
7. Моделювання даних
LLMs широко використовуються для ідентифікації сутностей, створення схем, нормалізації та оптимізації моделювання даних (особливо в схемах зірки та сніжинки) у сфері Data Engineering (інженерії даних).
Ось сніжинка схема даних, заснована на вказаних таблицях:
+----------------+
| Departments |
+----------------+
| DepartmentID |
| DepartmentName |
| Location |
+----------------+
^
|
+----------------+ | +----------------+
| Employees | | | Projects |
+----------------+ | +----------------+
| EmployeeID |----------+---------->| ProjectID |
| FirstName | | ProjectName |
| LastName | | DepartmentID |
| DepartmentID | | StartDate |
| HireDate | | EndDate |
+----------------+ +----------------+
|
|
|
+----------------+
| Assignments |
+----------------+
| AssignmentID |
| EmployeeID |
| ProjectID |
| Role |
+----------------+
8. Швидкий EDA (Exploratory Data Analysis)
LLMs можуть розуміти контекст і виконувати обробку даних, якщо ми надамо точні бізнес-вимоги та розуміння. Вони надають швидкі інсайти та тенденції, що допомагає розробнику краще зрозуміти дані.
Запит: Демонструвати швидкий аналіз даних.
9. Генерація графіків
Остання версія GPT-4 від OpenAI може створювати графіки безпосередньо з ваших даних.
10. Проєктування архітектури
LLMs можуть розуміти проблему і бути корисними для створення високорівневого або низькорівневого проєкту системи. Хоча згенерована модель ще не дуже корисна, оскільки вона на початковій стадії, з часом вона навчиться з введених запитів і покращить якість створення зображень.
**11.
Створення Pipeline
Великі мовні моделі (LLMs), зокрема GPT-4, можуть генерувати створення data pipelines для рішень "від початку до кінця", які потребують додаткової перевірки з боку data engineer (інженера з даних), і, якщо все гаразд, можуть бути використані в Azure Data Factory.
{
"name": "CheckAndCopyPipeline",
"properties": {
"activities": [
{
"name": "GetFileMetadata",
"type": "GetMetadata",
"dependsOn": [],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"dataset": {
"referenceName": "SourceDataset",
"type": "DatasetReference"
},
"fieldList": [
"size"
]
}
},
{
"name": "CheckFileSize",
"type": "IfCondition",
"dependsOn": [
{
"activity": "GetFileMetadata",
"dependencyConditions": [
"Succeeded"
]
}
],
"userProperties": [],
"typeProperties": {
"expression": {
"value": "@greater(activity('GetFileMetadata').output.size, 30)",
"type": "Expression"
},
"ifTrueActivities": [
{
"name": "CopyFileToDestination",
"type": "Copy",
"dependsOn": [],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "BlobSink"
},
"translator": {
"type": "TabularTranslator",
"mappings": []
}
},
"inputs": [
{
"referenceName": "SourceDataset",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "DestinationDataset",
"type": "DatasetReference"
}
]
}
]
}
}
]
}
}
12. Генерація тестових випадків
Великі мовні моделі (LLMs) можуть бути надзвичайно ефективними для генерації тестових випадків і підтримки загального процесу тестування. Ось кілька способів, якими LLMs можуть допомогти у створенні тестових випадків та тестуванні:
- Генерація тестових випадків від початку до кінця
- Визначення крайових випадків
- Рефакторинг тестів для підвищення їх надійності та додавання складності
- Тестування функцій через юніт-тести (unit testing), інтеграційні тести (integration testing), чорні ящики (black-box testing), білі ящики (white-box testing)
13. Словник даних
LLMs тренуються на багатомільярдних параметрах і можуть розуміти контекст і схему таблиць. Тому створення словника даних стає більш організованим і точним.
14. Лінія даних (Data Lineage)
LLMs можуть значно покращити процес управління та розуміння лінії даних, автоматизуючи документацію, покращуючи доступність, забезпечуючи інтелектуальний пошук і відкриття, а також сприяючи кращій співпраці. Надаючи інсайти на природній мові та спрощуючи процес, вони допомагають організаціям забезпечити точне і всебічне управління лінією даних.
Source Systems ETL Process Data Warehouse Data Processing Data Storage Data Consumption
| | | | | |
v v v v v v
+----------------+ +---------------+ +-----------------------+ +------------------+ +---------------+ +---------------------+
| HR System | | Extract Data | | Staging Area | | Batch Processing | | Data Lake | | BI Tools |
| - Employees | | - Employees | | - Raw Employees | | - Daily Load | | - Raw Data | | - Reports |
| - Departments | | - Departments | | - Raw Departments | | Stream Processing| | - Processed Data| | - Dashboards |
+----------------+ +---------------+ +-----------------------+ | - Real-time Data | +---------------+ +---------------------+
| | | | |
v v | v |
+----------------+ +---------------+ +-----------------------+ | +---------------+ +---------------------+
| Project Mgmt.
| | Трансформація даних | | Трансформовані дані | | | Сховище даних | | Моделі Data Science |
| - Проекти | | - Очищені дані | | - Співробітники | | | - Структуровані дані | - Прогнозний аналіз|
+----------------+ +---------------+ | - Відділи | | | - Співробітники | +---------------------+
| | - Проекти | v | - Відділи |
v | - Призначення | +---------------+ | - Проекти |
+----------------+ +---------------+ +-----------------------+ | | Трекінг призначень | | - Призначення |
| Система відстеження | | Завантаження даних | +-----------------------+ | | - Призначення | +---------------------+
| - Призначення | | - Співробітники| |
+----------------+ | - Відділи| |
| - Проекти | |
+---------------+ |
|
v
+----------------+
| Кінцеві користувачі |
| - Бізнес-користувачі|
+----------------+
15. Асистенти з програмування
Я був повністю вражений Assistant від Databricks, коли писав pyspark notebook вперше, адже спосіб, яким він виправляє код у ядрі, значно підвищив продуктивність багатьох розробників. Пропозиції коду настільки точні, що це повністю усуває термін "відлагодження" (debugging).
Github Copilot:
Штучний інтелект напарник програміста (pair programmer), який допомагає писати код швидше та з меншими зусиллями, дозволяючи вам більше енергії зосереджувати на вирішенні проблем і співпраці.
З цими двома інструментами ви можете експоненційно збільшити свою продуктивність і заощадити час на відлагодженні (debugging).
16. Управління метаданими
LLMs все частіше використовуються для управління метаданими, пропонуючи потужні можливості для вилучення, організації та використання метаданих з різних джерел.
- Вилучення метаданих: LLMs можуть аналізувати неструктуровані дані, такі як відгуки клієнтів, контент у соціальних мережах та статті, щоб отримати цінні метадані, такі як сентимент, ключові слова та іменовані сутності.
- Управління документами: Інструменти, як ExMemo Assistant, використовують LLMs для автоматичного створення та оновлення метаданих файлів, покращуючи ефективність управління документами та редагування.
- Отримання контекстної інформації: LLMs можуть переглядати великі документи та витягувати контекстні деталі, допомагаючи вирішувати неоднозначності та покращувати точність пошуку.
- Покращений пошук та індексація: Організовуючи та вилучаючи метадані, LLMs оптимізують функції пошуку та індексації, забезпечуючи швидший доступ до релевантної інформації.
17. Зміни схеми під час проекту
Ідеальний спосіб вирішення цієї проблеми — вибрати schema drift у активності dataflow в Azure Data Factory, але іноді LLMs можуть бути корисними для вирішення проблем частих змін схеми під час поточних проектів.
- Автоматичне поширення схеми: LLMs можуть автономно обробляти еволюцію схеми через таблиці нижнього рівня. Це означає, що вони можуть автоматично виявляти зміни схеми і поширювати ці зміни на пов'язані таблиці, забезпечуючи узгодженість.
- Моніторинг змін схеми: LLMs можна використовувати для безперервного моніторингу змін схеми. Вони можуть виявляти зміни в схемі на upstream і запускати завдання для оновлення таблиць на downstream відповідно.
- Генерація коду для відображення схеми: LLMs можуть генерувати код для перетворення таблиць даних відповідно до бажаної схеми. Наприклад, маючи дві вихідні таблиці даних і цільову таблицю, LLM може генерувати код на Python для створення цільової таблиці, яка відповідає структурі зразкової таблиці.
- Відповідність схеми та сутностей: LLMs можна використовувати для завдань відповідності схеми та сутностей, що є важливими для інтеграції та управління даними. Рамки, як KcMF, використовують LLMs для виконання цих завдань без необхідності тонкого налаштування для конкретної предметної області.
18.
Моніторинг витрат та аналіз
Використання великих мовних моделей (LLMs) для моніторингу та аналізу витрат на хмарні сервіси, такі як Azure, може значно спростити управління витратами та оптимізувати розподіл ресурсів.
- Аналіз витрат: LLMs можуть аналізувати дані, що стосуються витрат, з таких звітів, як звіти з управління витратами Azure або API для білінгу, автоматично виявляючи тенденції, аномалії та піки витрат.
- Генерація сповіщень: LLMs можуть відслідковувати фактичні витрати щодо бюджетних лімітів, надсилаючи сповіщення або оповіщення, коли витрати перевищують встановлені ліміти або коли виявляються незвичні піки використання.
- Аналіз ефективності використання ресурсів: LLMs можуть виявляти недовикористовувані або бездіяльні ресурси, аналізуючи патерни використання. Наприклад, вони можуть позначати віртуальні машини, що перевантажені, або сховища з низькою активністю, пропонуючи потенційні оптимізації, такі як зміна розміру або деактивація ресурсів.
- Аналіз тенденцій та прогнозування: LLMs можуть аналізувати історичні дані про витрати та тенденції використання, щоб прогнозувати майбутні витрати, допомагаючи передбачити витрати на наступні місяці чи квартали на основі патернів використання.
Проблеми використання LLMs
Попри те, що великі мовні моделі (LLMs) пропонують значні переваги, є й кілька загроз і викликів, пов'язаних з їх використанням. Ці питання повинні бути ретельно розглянуті, щоб забезпечити етичне, безпечне та ефективне впровадження LLMs.
- Розкриття конфіденційної інформації: LLMs, натреновані на великих обсягах даних, можуть ненавмисно генерувати конфіденційну або приватну інформацію. Іноді вони можуть згадувати та розкривати особисті або конфіденційні деталі з даних, на яких вони були натреновані, що становить загрозу для приватності.
- Втрати даних: Коли LLMs використовуються в таких додатках, як чат-боти або пошукові інструменти, вони можуть ненавмисно витікати комерційну або конфіденційну інформацію через взаємодії з користувачами, що веде до вразливостей у безпеці. Тому, будь ласка, уникайте інжекції чутливої інформації в LLMs.
- "Джеймбрейки": "Джеймбрейк" (Jailbreaking) означає практику обходу або зняття обмежень, накладених на програмне забезпечення або апаратне забезпечення, для отримання несанкціонованого доступу до системи. Це може включати розблокування обмеженої інформації або ухилення від етичних норм. Ризики включають юридичні проблеми, уразливості в безпеці, низьку якість і зловживання.
- Відсутність захисних механізмів: Захисні механізми (guardrails) встановлюються для того, щоб запобігти створенню AI шкідливих, упереджених, неетичних або неналежних результатів, особливо при взаємодії з користувачами у відкритих ситуаціях. Організації повинні впроваджувати захисні механізми в LLMs, щоб уникнути витоків даних.
- Галюцинації: Коли модель генерує інформацію, яка є неправдою, неактуальною або вигаданою, але подає її як факт. Вона може галюцинувати щодо контексту, зв'язності або фактичності.
- Атаки інжекції запитів: Це тип уразливості безпеки, коли зловмисник маніпулює введеннями (або запитами), поданими до LLMs або AI системи, щоб змінити її поведінку ненавмисним чином.
- Застарілі моделі: Як відомо, LLMs тренуються на великому корпусі даних, який може містити мільярди параметрів залежно від моделі, однак вони не завжди тренуються на реальних даних в реальному часі, що призводить до неточних відповідей.
Дякую. Сподіваюся, вам сподобалося прочитати. Не забувайте поставити лайк і поділитися з друзями. Щасливого навчання!
Перекладено з: Utilising LLMs for Data Engineers Part 2