Nano Hash - криптовалюты, майнинг, программирование

Многоязычный вектор предложений Берта улавливает используемый язык больше, чем значение - работает ли интернированный?

Играя с BERT, я загрузил Huggingface Multilingual Bert и ввел три предложения, сохранив их векторы предложений (встраивание [CLS]), затем перевел их через Google Translate, пропустил через модель и сохранил их векторы предложений.

Затем я сравнил результаты, используя косинусное сходство.

Я был удивлен, увидев, что каждый вектор предложений был довольно далек от вектора, созданного из предложения, переведенного из него (косинусное расстояние 0,15–0,27), в то время как разные предложения на одном языке действительно были довольно близки (косинусное расстояние 0,02–0,04).

Таким образом, вместо предложений с одинаковым значением (но на разных языках), сгруппированных вместе (в 768-мерном пространстве;)), разные предложения на одном языке становятся ближе.

Насколько я понимаю, весь смысл Multilingual Bert заключается в межъязыковом переносе обучения - например, обучение модели (скажем, FC net) на представлениях на одном языке и возможность использования этой модели на других языках.

Как это может работать, если предложения (на разных языках) с точным значением отображаются более обособленными, чем разные предложения на том же языке?

Мой код:

import torch

import transformers
from transformers import AutoModel,AutoTokenizer

bert_name="bert-base-multilingual-cased"
tokenizer = AutoTokenizer.from_pretrained(bert_name)
MBERT = AutoModel.from_pretrained(bert_name)

#Some silly sentences
eng1='A cat jumped from the trees and startled the tourists'
e=tokenizer.encode(eng1, add_special_tokens=True)
ans_eng1=MBERT(torch.tensor([e]))

eng2='A small snake whispered secrets to large cats'
t=tokenizer.tokenize(eng2)
e=tokenizer.encode(eng2, add_special_tokens=True)
ans_eng2=MBERT(torch.tensor([e]))

eng3='A tiger sprinted from the bushes and frightened the guests'
e=tokenizer.encode(eng3, add_special_tokens=True)
ans_eng3=MBERT(torch.tensor([e]))

# Translated to Hebrew with Google Translate
heb1='חתול קפץ מהעץ והבהיל את התיירים'
e=tokenizer.encode(heb1, add_special_tokens=True)
ans_heb1=MBERT(torch.tensor([e]))

heb2='נחש קטן לחש סודות לחתולים גדולים'
e=tokenizer.encode(heb2, add_special_tokens=True)
ans_heb2=MBERT(torch.tensor([e]))

heb3='נמר רץ מהשיחים והפחיד את האורחים'
e=tokenizer.encode(heb3, add_special_tokens=True)
ans_heb3=MBERT(torch.tensor([e]))


from scipy import spatial
import numpy as np

# Compare Sentence Embeddings

result = spatial.distance.cosine(ans_eng1[1].data.numpy(), ans_heb1[1].data.numpy())

print ('Eng1-Heb1 - Translated sentences',result)


result = spatial.distance.cosine(ans_eng2[1].data.numpy(), ans_heb2[1].data.numpy())

print ('Eng2-Heb2 - Translated sentences',result)

result = spatial.distance.cosine(ans_eng3[1].data.numpy(), ans_heb3[1].data.numpy())

print ('Eng3-Heb3 - Translated sentences',result)

print ("\n---\n")

result = spatial.distance.cosine(ans_heb1[1].data.numpy(), ans_heb2[1].data.numpy())

print ('Heb1-Heb2 - Different sentences',result)

result = spatial.distance.cosine(ans_eng1[1].data.numpy(), ans_eng2[1].data.numpy())

print ('Heb1-Heb3 - Similiar sentences',result)

print ("\n---\n")

result = spatial.distance.cosine(ans_eng1[1].data.numpy(), ans_eng2[1].data.numpy())

print ('Eng1-Eng2 - Different sentences',result)

result = spatial.distance.cosine(ans_eng1[1].data.numpy(), ans_eng3[1].data.numpy())

print ('Eng1-Eng3 - Similiar sentences',result)

#Output:
"""
Eng1-Heb1 - Translated sentences 0.2074061632156372
Eng2-Heb2 - Translated sentences 0.15557605028152466
Eng3-Heb3 - Translated sentences 0.275478720664978

---

Heb1-Heb2 - Different sentences 0.044616520404815674
Heb1-Heb3 - Similar sentences 0.027982771396636963

---

Eng1-Eng2 - Different sentences 0.027982771396636963
Eng1-Eng3 - Similar sentences 0.024596810340881348
"""

P.S.

По крайней мере, Heb1 был ближе к Heb3, чем к Heb2. То же самое наблюдалось и для английских эквивалентов, но в меньшей степени.


Ответы:


1

Токен [CLS] каким-то образом представляет входную последовательность, но как именно, сказать сложно. Язык, конечно, важная характеристика предложения, вероятно, больше, чем значение. BERT - это предварительно обученная модель, которая пытается смоделировать такие характеристики, как значение, структура, а также язык. Если вы хотите иметь модель, которая поможет вам определить, означают ли два предложения на разных языках одно и то же, я могу придумать два разных подхода:

  1. подход: вы можете обучить классификатор (SVM, логистическая регрессия или даже некоторые нейронные сети, такие как CNN) для этой задачи. Inputs: two [CLS]-Token, Output: Same meaning, or not same meaning. В качестве обучающих данных вы можете выбрать [CLS] -Token-пары предложений на разных языках, которые либо имеют одно и то же значение, либо нет. Чтобы получить значимые результаты, вам понадобится много таких пар предложений. К счастью, вы можете либо сгенерировать их с помощью Google Translate, либо использовать параллельные тексты, такие как Библия, которая существует на многих языках, и извлечь оттуда пары предложений.

  2. Подход: Настройте модель Берта именно на эту задачу: Как и в предыдущем подходе, вам потребуется много данных для обучения. Пример ввода модели BERT будет выглядеть так: A cat jumped from the trees and startled the tourists [SEP] חתול קפץ מהעץ והבהיל את התיירים

    Чтобы определить, имеют ли эти предложения одно и то же значение, вы должны добавить слой классификации поверх [CLS] -Token и выполнить точную настройку всей модели для этой задачи.

Примечание: я никогда не работал с многоязычной BERT-моделью, именно эти подходы приходят мне в голову для выполнения указанной задачи. Если вы попробуете эти подходы, мне будет интересно узнать, как они работают ????.

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

  • 2

    До сих пор не совсем понятно, что делает многоязычный BERT и почему он работает. Недавно вышли две статьи (первая от июня, вторая от ноября), которые немного поиграют с этим.

    Из документов кажется, что векторы имеют тенденцию группироваться в соответствии с языками (и даже языковыми семьями), поэтому классифицировать язык очень легко. Это кластеризация, показанная в документе:

    введите здесь описание изображения

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

    Кроме того, кажется, что тысячи параллельных предложений (например, на обоих языках) достаточно, чтобы изучить проекцию между языками. Обратите внимание, что они не использовали вектор [CLS], но они объединили векторы для отдельных подслов.

    08.01.2020
  • Очень интересно! Были ли опубликованы языковые средства? 09.01.2020
  • Я так не думаю, но сделать это самому не должно быть слишком сложно. 09.01.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..