В Preemo мы создали модель, которая понимает и воспроизводит как английский, так и китайский языки, используя эффективную и быструю форму тонкой настройки для улучшения моделей и данных с открытым исходным кодом.

Новая модель, которую мы называем Alpaca LoRA 30B, может быть проинструктирована на английском и китайском языках и хорошо работает на обоих языках в задачах генерации кода и творческого письма.

Чтобы создать эту новую модель, мы доработали модель LLaMA с параметрами 30B от Meta, которая не имеет многоязычных возможностей, с 50 000 обучающих примеров с открытым исходным кодом на английском и китайском языках, сгенерированных GPT-4. Мы использовали метод тонкой настройки с эффективным использованием параметров, который называется LoRA.

Конечно, мы сделали все это с помощью платформы Preemo.

В этом посте мы объясним:

  • Примеры того, что может эта новая модель
  • Как мы обучали новую модель
  • Что вы можете вынести из этого результата

Пример вывода

Наша модель Alpaca LoRA 30B производит высококачественные дополнения на английском и китайском языках для генерации кода и творческого письма.

Вот примеры каждого.

Генерация кода

В качестве задачи генерации кода мы попросили нашу модель написать алгоритм.

Instruction:

Write a JavaScript function to calculate if 2023 is a prime number

Наша модель создала следующий код вместе с объяснением:

Here is a JavaScript function that checks if a given number is a prime number:

```javascript
function isPrime(num) {
  if (num < 2) {
    return false;
  }
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

console.log(isPrime(2023)); // true
```

This function checks if a number is a prime number by iterating through all the numbers from 2 to the square root of the given number. If the number is divisible by any of these numbers, then it is not a prime number. Otherwise, it is a prime number.

В качестве справки, вот результат производства Alpaca 7B. Alpaca 7B — хорошо известная модель, первая модель, настроенная с использованием LoRA. Вес у него меньше, чем у модели LLaMA, поэтому сравнение не 1:1. Мы используем этот пример только для того, чтобы показать разницу в формате вывода.

Alpaca 7B выдал следующий код:

function isPrime(n) {
  if (n <= 1) {
    return false;
  }
  for (let i = 2; i < n; i++) {
    if (n % i === 0) {
      return false;
    }
  }
  return true;
}

Как видите, вывод Alpaca 7B не содержит объяснений.

В следующем разделе мы опишем, как мы настроили нашу модель, чтобы получить объяснение.

Написание стихов на китайском

В качестве творческого письма на китайском языке мы попросили нашу модель, используя инструкции на китайском языке, написать стихотворение, восхваляющее искусственный интеллект.

Instruction:

写一首赞扬人工智能的现代诗

Наша модель произвела следующее стихотворение:

赞扬人工智能的现代诗

人工智能驱动未来,
智慧机器带领我们前行。
数据分析,机器学习,
让世界变得更加快捷。

智能家居,智能交通,
智能医疗,智能教育,
人工智能随时随地,
让我们的生活更加舒适。

机器翻译,语音识别,
自动驾驶,机器人工作,
人工智能改变了我们的生活,
让世界变得更加美好。

让我们欢迎人工智能,
让它带领我们前行,
让我们共同创造未来,
让世界变得更加美好。

Для удобства вот перевод инструкции и вывода выше:

// English translation for readers
Instruction:

Write a modern poem praising artificial intelligence
// English translation for readers

Praise for Artificial Intelligence Modern Poetry

Artificial intelligence drives the future, 
Intelligent machines lead us forward. 
Data analysis, machine learning, 
Make the world faster.

Smart homes, smart transportation, 
Smart healthcare, smart education, 
Artificial intelligence anytime, anywhere, 
Make our lives more comfortable.

Machine translation, speech recognition, 
Autonomous driving, robot work, 
Artificial intelligence has changed our lives, 
Making the world a better place.

Let us welcome artificial intelligence, 
Let it lead us forward, 
Let us create the future together, 
Making the world a better place.

Мы бы включили сюда сравнение, но новым аспектом нашей модели является то, что она может производить китайский язык.

Как мы это сделали

Как правило, конвейер тонкой настройки состоит из входной модели, тонко настроенной на новом наборе данных для создания выходной модели. Вот подробности нашего трубопровода.

Входная модель

Для создания класса входной модели требуются статические веса ​​модели, а также определение модели, также известное как архитектура модели. Чтобы создать класс входной модели, который мы называем LLaMA LoRA 30B , мы загрузили веса 30B из модели Meta LLaMA в архитектуру модели, адаптированную к LoRA, которая использует преобразователи HuggingFace и библиотеку bitsandbytes.

Набор данных

Наборы данных на английском и китайском языках, которые мы использовали для точной настройки, взяты из статьи Настройка инструкций с помощью GPT-4. Авторы статьи создали синтетические наборы данных на английском и китайском языках с использованием GPT-4. Затем они использовали два набора данных по отдельности для точной настройки модели. Мы объединили два набора данных в один.

Как вы можете видеть в наборах данных на Github, каждый пример отформатирован как: инструкция, вход и выход. Обратите внимание, что в наборе данных вопросы кодирования включают объяснения как часть вывода. Вот выдержка:

[	
  {
    "instruction": "Extract the positive integers from an array?",
    "input": "arr = [5,-2,8,-7,3,-1,0,5]",
    "output": "To extract the positive integers from the given array, you can use the filter() function which will return the values that evaluate to True based on the condition provided in the lambda function. \\n\\nHere's the Python code snippet:\\n\\n```\\narr = [5,-2,8,-7,3,-1,0,5]\\n\\nresult = list(filter(lambda x: x > 0, arr))\\n\\nprint(result)\\n```\\n\\nOutput: [5, 8, 3, 5]\\n\\nThe filter function iterates through each element in the array and checks if the element is greater than 0, which means it's a positive integer. If it's true, the element is included in the result list. Next, we display the result list which contains only the positive integers."
  },

  [...]

  {
    "instruction": "分析给定的法律文件并解释关键点。",
    "input": "",
    "output": "非常抱歉,你没有提供法律文件,所以我无法为你进行分析。 请提供具体的法律文件,我将尽力为你解释其中的关键点。"
  }
]

Вы можете увидеть влияние этих обучающих примеров на нашу доработанную модель.

Петля тонкой настройки с LoRA

Наш процесс тонкой настройки использует LoRA с использованием того же адаптера, что и alpaca-lora.

LoRA — более эффективный метод тонкой настройки. При традиционной тонкой настройке веса исходной модели размораживаются и обновляются. В LoRA вместо размораживания исходной модели добавляется новый слой весов, называемый весами адаптера.

Для количественной оценки прироста эффективности: модель Meta LLaMA имеет вес 30 млрд. Наш получившийся адаптер имел около 50 тысяч весов.

Выходная модель

Как объяснялось выше, мы изготовили набор статических грузов адаптера. Мы называем это Alpaca LoRA 30B.

Чтобы использовать эту выходную модель для вывода, все, что вам нужно сделать, это загрузить исходные веса LLaMA вместе с весами адаптера в ту же архитектуру модели. Затем вы можете начать генерировать текстовые дополнения.

Выводы

Если вы хотите решить проблемы, затрагивающие несколько языков, наша работа предлагает способ создания модели, которая говорит на нужных вам языках.

Этот быстрый эксперимент показывает, что вы можете создать модель с многоязычными возможностями, взяв базовую модель без этих возможностей и настроив ее с помощью набора данных на двух языках.

Наш эксперимент также предполагает, что параметры могут быть общими для разных языков. Интересный вопрос для изучения заключается в том, в какой степени объединение наборов данных из разных языков может помочь в дальнейшем обобщении модели.

Все эти эксперименты возможны сегодня с использованием моделей и данных с открытым исходным кодом — если у вас есть подходящая инфраструктура.

Использование преэмо

В Preemo мы создаем инфраструктуру, чтобы упростить проведение таких экспериментов.

Мы — команда, знакомая со всеми тонкостями тонкой настройки, и мы хотели бы пообщаться с людьми, которым мы можем помочь — независимо от того, начинаете ли вы работать с LLM или хотите запустить их в производство.

Просто пришлите мне сообщение: [email protected]

Об авторе

Марк Хуанг — ученый в области машинного обучения и соучредитель Preemo.
Бо Ян — инженер-программист в Preemo.
Джесс Лин — писатель, инженер и музыкант.