Как стать автором
Обновить

Комментарии 23

В мобильной версии одни inline$

к сожалению, это проблема самого Хабра, надо призвать админов
*fixed :) F5
/cc ntkj666

Спасибо за информативную статью. Хочу прокомментировать по поводу перевода термина embedding. Сам недавно столкнулся с этим в англоязычной статье и долго не мог понять что имеется ввиду. Так вот сам термин embedding чаще всего употребляется в отношении к каким нибудь устройствам встроенным в систему на физическом уровне — embedding device. А в данном случае подходит перевод 'вложение': вложение элемента (вершины графа или слова) в n-мерное пространство рациональных чисел.

спасибо за ваше замечание, действительно это проясняет смысл самого слова, но мое мнение, что в текущем употреблении это не совсем корректно: embedding бывает как из высокоразмерного пространства в низкоразмерное, так и наоборот, так что концепция «вложения» здесь не совсем уместна; мне кажется, что «сопоставление» неплохой перевод, но все уже привыкли к слову «эмбеддинг», поэтому я его и употребил в статье
Предлагаю считать, что русскоязычное общество уже выработало признаваемый сообществом перевод. Это термин «вложение». В английском термин «embedding» есть и в общематематическом значении и в NLP этот термин заимствовали из более общих математических понятий. И в математике, соответственно, есть устоявшийся перевод.
Ну раз консилиум известных ученых хабра решил :) Пойду реджектить статьи, кто не использует данный термин.
А если попробовать например слово проекция, или отображение, типа: проекция (или отображение) элемента на (в) n-мерное пространство рациональных чисел?
есть принятый перевод, эмбеддинг — это представление, топик закрыт

пс: кто думает иначе, можете и дальше витать в своих выдуманных мирах
Из того, что:
word embedding = векторное представление слова,
не следует, что:
embedding = представление.

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

Embedding в данном контексте переводится как «вложение», «погружение»

Словарная статья на Мультитран
Нужно переводить суть термина, а не заниматься пословным переводом.
Поэтому давайте для начала поймем, что ничего никуда в данном случае не «вкладывается» (т.е. это вам не вложенная в одну геометрическую фигуру другая геометрическая фигура). Если кто-то так и говорит, то это или профессиональный термин или жаргон. Причём, боюсь, скорее это жаргон переводчиков, а не термин математиков. В сфере CS данный термин не используется. Да и multitran не истина в последней инстанции, нормальной модерации там нет.
А что же происходит, если не «процесс вложения»?
Мы получаем векторное представление для наших именованных понятий.
Погружение? Мы тоже так по-русски не говорим.
В крайнем случае, можно использовать вариант «ищем (рас)положение векторов слов в (векторном) пространстве». Смысл действия именно такой.
Но, увы, «расположение» и «положение» — не термины, мы не можем их использовать без окружающих уточняющих слов в надежде на понимание. А «векторное представление» — это сложившийся термин в CS, хотя и использующееся в несколько ином значении («векторное представление полигона» — набор координат и/или векторов, использующийся для задания полигона в векторном пространстве).
Поэтому я считаю, что оба не правы. Сложившегося термина для данного понятия нет.
Но если выбрать термин, какой он будет?
Из пространства числовых идентификаторов объектов мы негеометрическим образом получаем координаты объектов в векторном пространстве.
Слово «вложение» имеет другой смысл и поэтому режет слух, т.к. ассоциируется с вложенным треугольником, т.е. геометрическими действиями внутри одного пространства.
Термин «представление» не до конца отражает суть явления, но внутреннего противоречия вроде бы не вызывает, т.к. используется для близких понятий — для результата негеометрического процесса отображения одного пространства в другое.
Если у кого-либо есть варианты лучше, то предлагайте. Почему понятия «проекция» и «отображение» тоже не очень хорошо подходят, теперь, думаю, понятно — во-первых, это снова термины, во-вторых, как термины, они подразумевают геометрические действия внутри метрических пространств, и как правило также уменьшение размерности, а не её увеличение.
Наше же «вложение» — по-факту скорее «векторное расширение»: приписывание векторных значений одномерным идентификаторам.
Слово «вложение» имеет другой смысл и поэтому режет слух, т.к. ассоциируется с вложенным треугольником, т.е. геометрическими действиями внутри одного пространства.

А почему не с вложением одного пространства большей размерности в пространство меньшей размерности, например? Или с инъективным отображением?

Всё верно, если вы говорите про математический термин «вложение». А вот слово (понятие) «вложение» — это скорее про «вложить письмо в конверт».
Если у кого-либо есть варианты лучше, то предлагайте. Почему понятия «проекция» и «отображение» тоже не очень хорошо подходят, теперь, думаю, понятно — во-первых, это снова термины, во-вторых, как термины, они подразумевают геометрические действия внутри метрических пространств, и как правило также уменьшение размерности, а не её увеличение.

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


Равно и как в, скажем, банальных функциях. Например, функция взятия целой части действительного числа (R -> Z), является отображением, но это не "геометрические действия внутри одного пространства".

Да, полностью согласен, понятие (не термин) «отображение» вполне можно было бы использовать как расширяющее значение при переводе слова «embedding», но понятие «embedding» — у'же, поэтому скорее всего придётся использовать вспомогательные слова при переводе.
Понятно, что и понятие «представление» имеет аналогичные проблемы, оно лишь чуть уже и лишь чуть более привычно для использования в CS (а в математике — наоборот).
Спасибо большое за статью

Смотрю код и пытаюсь понять
Зачем в классе mean_vectorizer функция fit
def fit(self, X):
return self

Разве не проще
Вместо
mean_vectorizer(w2v).fit(train_df['list_w']).transform(train_df['list_w'])
Сделать
mean_vectorizer(w2v).transform(train_df['list_w'])

Смотрю на глаз — код не прогонял
demonzheg лучше меня ответит на этот вопрос

Спасибо за статью. Только после прочтения об использовании word2vec и обучения моделей на статьях хабра осталось ощущение незавершенности: вот мы обручили модель с такой-то точностью, и всё. Интересно как это можно применить, или хотя бы понять-интерпретировать результат. Например топ- слов, влияющих на рейтинг статьи (хотя это можно и без ML сделать)

Спасибо за статью. У вас в код, где нейронку обучаете, попала ссылка на картинку.

](https://habrastorage.org/web/c92/477/565/c924775650e44c469e20c3eaa9705bfa.png)
исправил, спасибо

А сказать “заводной апельсин” мы не можем* — эти слова не сочетаются.
Есть такой роман и фильм, решил упомянуть так, за между прочим :)

На сколько я понимаю, получать эмбеддинги слов на двух выборках сразу — идея не самая честная. Необходимо проводить обработку только на обучающей выборке и валидироваться на незатронутой тестовой. Для слов которые не попадают в тренировочную выборку выставлять (out of vocabulary token). В противном случае наша модель тестируется на токенах которые она уже откуда то знает, а это не так, да и в дальнейшем полюбому понадобится…
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.