Перевод терминов с помощью LLM (GPT и Vertex AI/Google Bard)

Перевод терминов с помощью LLM (GPT и Vertex AI/Google Bard)

Фото от Mojahid Mottakin на Unsplash

Могут ли LLM-модели, такие как ChatGPT, точнее переводить, чем люди? Какие варианты LLM у нас есть для работы? Узнайте больше о использовании генеративного ИИ для перевода на разные языки.

Фоновая информация

В момент написания этого поста я занимаюсь обработкой данных уже почти десять лет, а в локализации – два года. У меня есть опыт работы с различными формами искусственного интеллекта, включая, но не ограничиваясь, кластеризацией, классификацией и анализом настроений. Машинный перевод (MT) широко используется в локализации. Представьте себе, что вы вводите какой-то текст в Google Translate и просите его перевести на другой язык. Из моего опыта следует, что машинный перевод в целом верен в 80% случаев, но все равно требует проверки/исправления неправильных переводов человеком.

С появлением больших языковых моделей (LLM), таких как ChatGPT и Google Bard, мы, возможно, сможем достичь более точного перевода, предоставляя LLM дополнительный контекст (такой как определения и части речи).

Гипотеза

LLM работает на основе ввода в виде подсказки. Это означает, что чем больше информации и контекста вы можете предоставить в подсказке, тем лучше будет результат от LLM. Учитывая выборку английских терминов, их определений и частей речи, мы хотим узнать, могут ли LLM создавать более качественные результаты при переводе терминов на разные языки. Две LLM, которые мы будем использовать, это GPT (через Jupyter Notebook через OpenAI API) и Vertex AI (через функцию ML.GENERATE_TEXT в Google BigQuery). Вторая требует большего количества настроек, но может быть запущена непосредственно в вашей консоли запросов с использованием SQL.

Использование LLM для перевода

GPT

Мы начинаем с установки библиотеки OpenAI в нашем Jupyter Notebook

import sys !{sys.executable} -m pip install openai

Импортируем pandas для работы с DataFrame. Импортируем ранее установленную библиотеку openai и установим ваш API-ключ. Считываем данные в DataFrame. Если вы хотите следовать пошагово, данные, с которыми я буду работать, можно найти здесь.

import pandasimport openai openai.api_key = "YOUR_API_KEY" # считываем данные df = pd.read_csv('mydata/terms_sample.csv')

В списке укажите языки, на которые вы хотите перевести слово.

languages = ['Испанский (Испания)', 'Испанский (ЛатАм)', 'Немецкий', 'Итальянский', 'Японский', 'Китайский (Упрощенный)', 'Французский'

Создайте функцию, которая будет перебирать строки в вашем DataFrame и языки в вашем списке для последовательного перевода терминов. Подсказка будет введена в раздел “сообщения”. Мы будем использовать GPT 3.5 и установим температуру очень маленьким числом, чтобы получить точные/менее творческие ответы от LLM.

def translate_terms(row, target_language):    """Переводим термины"""        user_message = (        f"Переведите следующий английский термин на {target_language}: '" + row['Term'] +        "'.\n Вот определение термина для большего контекста: \n" + row['Definition'] +        "'.\n Вот часть речи термина для большего контекста: \n" + row['Part of speech'] +        ".\n Пожалуйста, переведите только термин, а не определение. Не вводите никакого дополнительного текста помимо переведенного термина."     )        response = openai.ChatCompletion.create(        model="gpt-3.5-turbo",        messages=[            {"role": "system", "content": "Вы - полезный помощник по переводу, который переводит термины на другие языки, предоставляя английский термин и определение."},            {"role": "user", "content": user_message},        ],        max_tokens=50,        n=1,        temperature=0.1    )        return response['choices'][0]['message']['content']

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

# Применяем функцию к DataFramefor в каждом языке в languages:    df[language+'_terms'] = df.apply(translate_terms, axis=1, args=(language,))
dataframe с переведенными терминами

Google Bard / text-bisonm / Vertex AI

Мы будем использовать функцию ML.GENERATE_TEXT в модели text-bison компании Google для перевода тех же терминов, что и раньше. Этот процесс требует немного больше ресурсов для настройки, но после его запуска мы сможем вызывать LLM непосредственно в нашем запросе SQL.

Настройка

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

  1. Убедитесь, что включена роль Vertex AI User для доступа к вашей учетной записи службы.
  2. Настройте удаленное подключение к облачному серверу, следуя инструкциям от Google Cloud.
  3. Создайте модель LLM с удаленным подключением к облачному серверу.
  4. Теперь вы можете запустить свою модель LLM, используя функцию ML.GENERATE_TEXT. Рекомендую изучить аргументы функции, чтобы понять, какие параметры необходимы.
  5. Загрузите свои данные в ваш проект с оплатой, чтобы их можно было запрашивать.

Код

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

DECLARE USER_MESSAGE_PREFIX STRING DEFAULT (  'You are a helpful translation assistant that translate terms into other languages given an english term and defintion.'|| '\n\n' ||  'Translate the following english term into French. Please do not translate the definition as well.'|| '\n\n' ||  'Term: ');DECLARE USER_MESSAGE_SUFFIX DEFAULT (  '\n\n' || 'Here is the definiton of the term for more context: '|| '\n\n');DECLARE USER_MESSAGE_SUFFIX2 DEFAULT (  '\n\n' || 'Here is the part of speech of the term for more context: '|| '\n\n');DECLARE USER_MESSAGE_SUFFIX3 DEFAULT (  '\n\n' || 'French translation of term:');DECLARE languages ARRAY<string>;SET languages = ['Spanish (Spain)', 'Spanish (LatAm)', 'German', 'Italian', 'Japanese', 'Chinese (S)', 'French'];SELECT  ml_generate_text_result['predictions'][0]['content'] AS generated_text,  ml_generate_text_result['predictions'][0]['safetyAttributes']    AS safety_attributes,  * EXCEPT (ml_generate_text_result)FROM  ML.GENERATE_TEXT(    MODEL `YOUR_BILLING_PROJECT.YOUR_DATASET.YOUR_LLM`,    (      SELECT        Term,        Definition,        USER_MESSAGE_PREFIX || SUBSTRING(TERM, 1, 8192) || USER_MESSAGE_SUFFIX || SUBSTRING(Definition, 1, 8192) || USER_MESSAGE_SUFFIX2 || SUBSTRING(Part_of_speech, 1, 8192) || USER_MESSAGE_SUFFIX3 AS prompt      FROM        `YOUR_BILLING_PROJECT.YOUR_DATASET.terms_sample`    ),    STRUCT(      0 AS temperature,      100 AS max_output_tokens    )  );

Интерпретация результатов

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

GPT переведенные термины
Vertex AI переведенные термины

Результаты можно найти здесь. Некоторые выводы, которые я сделал:

  • 47 из 84 (56%) переводов обоими моделями языковых моделей были точно одинаковыми. GPT часто добавлял точку (.) в конце слова. Удаление этих точек увеличивает процент совпадений до 63%.
  • Похоже, что японский и французский языки были наиболее несогласованными переводами между двумя моделями языковых моделей.
  • GPT понимал термин “make up” как make-up (то есть косметика), что вызывает опасения, потому что, кажется, он не использовал определение и часть речи этого термина перед выполнением перевода. Возможно, это связано с тем, что структура моего запроса не была оптимальной. Например, я мог бы предоставить определение перед термином, чтобы позволить модели языковой модели обработать эту информацию в первую очередь.
  • Термин “Heavy metal” (имя собственное) кажется, что GPT переводит буквально, особенно на немецком языке, где он переводится на термин, который не соответствует музыкальному жанру.

В конечном счете я бы сказал, что у обеих моделей языковых моделей есть свои преимущества и недостатки. GPT легко настраивается и запускается на Python, в то время как Vertex AI понимает запросы яснее и принимает во внимание весь контекст перед выполнением перевода. Я думаю, что можно сказать, что модели языковых моделей делают гораздо лучшую работу, чем обычный машинный перевод, потому что они способны обрабатывать дополнительный контекст в своих запросах. Дайте мне знать, что вы думаете. Могу ли я сделать что-то лучше?

Опубликовано на https://shafquatarefeen.com.