Александра Веркаутерен, старший инженер NLU, Faction XYZ.

Поскольку компания специализируется на понимании естественного языка, встраивание слов является одним из строительных блоков нашей технологии. Наши модели NLU должны быть способны правильно «понимать» то, что написано или сказано. Один из способов сделать это - использовать модель классификации намерений: когда пользователь вводит предложение, модель предсказывает намерение. Таким образом, точная классификация намерений имеет решающее значение для беспрепятственного взаимодействия. Хотя наши модели являются наиболее точными из известных нам для голландского и французского языков, иногда классификация идет неправильно, и иногда это может привести к забавным разговорам. Совсем недавно чат-бот, построенный на наших моделях NLU, не смог распознать остроумный сарказм пользователя и ответил следующим пассивно-агрессивным образом:

Пользователь: Спасибо, что не ответили, гений.
Бот: Добро пожаловать!

Предложение было ошибочно классифицировано как намерение «поблагодарить», на что бот очень вежливо ответил. Многие из выявленных нами ошибочных классификаций можно отнести к используемым нами вложениям слов и способам их создания.

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

«Вы узнаете слово по компании, которую оно составляет!», Джон Руперт Ферт - Краткий обзор лингвистической теории

Но достаточно ли этого? Можете ли вы понять полное значение слова, просто взглянув на его контекст? Что означает контекст? А где что-то не так? Разделяя здесь эти вопросы, я надеюсь, что изумительная сложность человеческого языка вызовет у вас такое же чувство изумления, как и у меня.

Включение контекста в слово.

Проще говоря, классические вложения слов word2vec представляют слова как среднее значение контекстов, в которых они могут появляться. «Контекст», в котором встречается слово, можно описать на разных уровнях. Вы можете говорить о синтаксическом контексте слова. Например, некоторые слова имеют другую часть речи - и, следовательно, также другое значение - в зависимости от синтаксического контекста, в котором они встречаются.

Я работаю очень много, потому что люблю свою работу .

Первое вхождение work - это глагол, обозначающий действие. С другой стороны, второе вхождение - это существительное, обозначающее действие. Хотя мы можем согласиться с тем, что оба слова похожи во многих отношениях - они являются омофонами и омонимами и имеют один и тот же корень работы - они различаются по значению. Тем не менее, у них будет единое векторное представление, которое суммирует оба этих слова и контексты, в которых они могут появляться.
Давайте посмотрим на другой пример:

Есть кофе на полу кухни.
Я хочу
кофе , пожалуйста.

Здесь оба появления слова coffee являются существительными, но их значение различается в зависимости от контекста, в котором они встречаются. В первом предложении кофе обозначает вещество, это неисчислимое существительное, а во втором предложении кофе обозначает чашку черного золота. Откуда нам знать? Синтаксический контекст. Наличие неопределенного определителя «а» указывает на то, что это появление кофе можно подсчитать, поэтому мы автоматически делаем вывод, что это должна быть чашка. Однако со всеми словами не проделать этот трюк. Песок никогда не будет считаться, независимо от того, какой определитель вы поставите перед ним. Итак, да, семантика является распределительной в том смысле, что значение слов может зависеть от контекста, в котором они встречаются, и что слова не могут встречаться в определенных контекстах, потому что их значение просто не допускает этого.

Также семантический контекст может «изменять» значение слова. Взгляните на следующий пример.

бас играл бас .

Оба экземпляра bass являются существительными, им предшествует один и тот же определитель, но они явно имеют разное значение. Здесь мы имеем дело с рыбой с музыкальными устремлениями. Откуда нам знать? Ну, можно играть только на басах, а на басах - нет. Обратите внимание: хотя синтаксический контекст (в частности, порядок слов и отношения субъект-объект) помогает нам интерпретировать каждое вхождение bass, в основном это семантика игры, взаимодействующая с семантикой басы, которые помогают нам понять смысл. В приведенном ниже примере мы меняем отношение субъект-объект и порядок слов, но мы по-прежнему получаем те же две интерпретации баса благодаря присутствию воспроизведенного:

бас играл бас . (подождите ... может быть, на басах все-таки можно сыграть ... Драма быть рыбой!)

Наконец, у нас есть прагматический контекст. Прагматика относится к использованию языка, и здесь играет роль человеческая природа. Люди используют язык для различных целей, не только для передачи идей и информации, но и для того, чтобы побудить других людей что-то делать. Люди используют разные варианты языка, чтобы показать свою принадлежность к социальным группам или соблюдать определенные социальные правила. Наиболее актуальной для нашего обсуждения здесь является роль register. В разных социальных контекстах мы используем разный язык. Различия могут заключаться в произношении (не знаю и не знаю), а также в словарном запасе, который мы используем. Мы можем попросить друга принести нам кофе (в чашке), но мы, скорее всего, попросим коллегу принести нам кофе, пожалуйста. Точно такой же синтаксис, та же семантика, даже то же намерение (я слишком ленив, чтобы получить кофе, поэтому я хочу, чтобы вы сделали это, не говоря вам явно, что делать, потому что я ценю наши отношения и социальные правила, по которым мы живем, предписывают, чтобы мы были вежливыми. поэтому используйте вопросы вместо императивов для поддержания хороших отношений). Хотя другой контекст. Не лингвистический, а прагматический.

Можно ли консервную банку, как консервную банку?

Одна из причин (их гораздо больше, вложения слов - это круто!), Почему вложения слов так популярны, заключается в том, что они позволяют нам вычислять сходство слов. Как упоминалось выше, похожие слова могут встречаться в аналогичных контекстах, поэтому, учитывая, что векторы слов представляют средний контекст, в котором может встречаться слово, мы ожидаем, что похожие слова будут иметь похожие векторы слов. Однако, как и контекст, сходство слов может относиться к ряду понятий.
Что конкретно означает для слов быть «похожими»? Слова могут быть схожими во многих отношениях: они могут иметь одинаковое написание (адрес и адрес) или одинаковое или похожее произношение (тоже и два). Слова могут быть похожи тем, что имеют один и тот же корень: canner, может и может иметь один и тот же корень can, но can нет, у него другой корень can. Не забывайте дышать и не запутайтесь.

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

Наконец, слова могут иметь одинаковое или похожее значение. Но опять же, что значит иметь подобное значение? Значение двух слов может быть схожим, поскольку они относятся к объектам одного и того же онтологического класса, например, яблоко и стейк, которые оба относятся к сущностям класса съедобных предметов. Яблоко и груша имеют еще более схожие значения, поскольку они оба относятся не только к сущностям в классе съедобных объектов, но также к сущностям в классе фруктов и еще более строго, класс семечковых. Однако большинство людей думают о синонимах или почти синонимах, когда говорят о похожих словах: словах, относящихся к одному и тому же объекту, действию или концепции. Вложения слов - нет. Они думают о нескольких типах сходства и смешивают их все вместе.

Выживание сильнейших.

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

Из-за сложности взаимосвязи слова и контекста векторное сходство не всегда будет отражать тот тип сходства, к которому мы стремимся. Например, одно из слов с вектором, наиболее похожим на вектор может, - не может (проверьте свои любимые векторы слов!). Я думаю, мы все можем согласиться с тем, что эти два слова не означают одно и то же, так почему же их векторы так похожи? На самом деле это довольно просто: один аспект контекста, в котором могут встречаться оба слова, имеет гораздо больший вес, чем другие аспекты, и это будет определять форму их векторов. В этом случае выигрывает синтаксический контекст. И может, и не может могут встречаться только в очень ограниченном наборе синтаксических контекстов. Будучи вспомогательными глаголами, они могут встречаться только в позиции, предшествующей другим вспомогательным глаголам или лексическим глаголам, или в начале предложения, если предложение является вопросом. Кроме того, их плохое семантическое содержание делает и может, и не совместимыми с очень большим разнообразием глаголов и существительных, поэтому семантический контекст, в котором они могут появляться, практически не определен. Как следствие, вектор этих слов будет в основном представлять их синтаксическое распределение, а с точки зрения вектора слов они будут очень похожи на слова с таким же синтаксическим распределением и плохим семантическим содержанием, такие как все другие вспомогательные глаголы. Наличие отрицания в не может не иметь достаточного веса, чтобы компенсировать синтаксическое сходство между может и не может. К счастью, есть способы удостовериться, что вполне уместное семантическое различие учтено, например, используя жестко запрограммированный экстрактор отрицания, который идентифицирует отрицательные элементы, такие как no , но также un- и anti -. С тех пор как мы начали использовать такой экстрактор отрицания, наши боты стали менее дерзкими.
Синтаксический контекст определяет векторное представление для всех функциональных слов, таких как определители, числа, предлоги и местоимения. Их семантическое содержание просто недостаточно сильное, чтобы его можно было понять в их векторном представлении, а их синтаксическое распределение настолько ограничено, что векторы слов будут в основном представлять синтаксический контекст, в котором они так часто встречаются.

Другой случай - когда прагматический контекст имеет наибольший вес. Если вы посмотрите слова, наиболее похожие на nope в предварительно обученных векторах слов fastText, вы заметите, что первая десятка содержит много коротких слов, которые часто используются в неформальной зарегистрироваться, например anyways, fwiw, yeah и hmmm. Опять же, у этих слов мало смыслового содержания. Они также синтаксически довольно независимы (они могут быть предложениями сами по себе). Это оставляет место прагматикам для определения их распределения, и это будет представлено в их векторах слов.

Имеет ли вообще какое-либо влияние семантический контекст? Конечно, есть! Особенно со словами, которые имеют сильное, специализированное, семантическое содержание, довольно свободное синтаксическое распределение и не имеют прагматических связей с каким-либо регистром. Так обстоит дело со многими существительными, глаголами и прилагательными. Слова, наиболее похожие на яростный, - это a.o. злой, разъяренный и разъяренный - синонимы. Однако чем более общее семантическое содержание слова и, следовательно, чем больше разнообразие семантических контекстов, в которых оно может встречаться, тем более «общим» будет семантическое представление в их словарных векторах. Возьмем, к примеру, make, у которого create входит в десятку лучших, но также есть give, give и get, которые, как и make, являются глаголами, имеющими несколько значений в зависимости от контекста, в котором они встречаются (Я сделал это! vs. I сделал омлет). Таким образом, очевидно, что среднее значение (что бы это ни значило) make аналогично среднему значению give. Очень часто семантическое сходство, представленное словесными векторами, будет скорее классовым сходством. Абрикос похож на сливы и груши, потому что они появляются во фруктовом контексте, а грипп похож на денге и корь, потому что они возникают в условиях лихорадки.

Несоответствие реальности возможности.

Так почему же синонимы редко всплывают при поиске похожих векторов? Они появятся не потому, что два слова могут встречаться в одном контексте. Синонимы часто отличаются друг от друга в том смысле, что одна из альтернатив очень часто используется с другим своим значением. Подумайте, например, о нашем любимом друге басу. Наиболее похожее слово - гитара, и в первой десятке нет никакой рыбы, вероятно, потому, что мы не так часто говорим о рыбе, как об инструменте. Другая причина заключается в том, что слова редко являются синонимами во всех контекстах: диалект и вариант могут использоваться как синонимы в лингвистике, но это единственный контекст, в котором это возможно. Вариант может встречаться во многих других контекстах, и эти контексты будут тянуть вектор слова в определенном направлении, от диалекта. Синонимы не всегда являются синонимами во всех вариантах языка. Verlof (отпуск или отпуск) является синонимом vakantie (праздник) на фламандском голландском языке, но не на голландском языке из Нидерландов. Наконец, в некоторых регистрах можно отдавать предпочтение синонимам. Бро является синонимом друга, но не тогда, когда вы разговариваете со своим начальником.
Таким образом, ясно, что использование векторов слов для поиска синонимов не очень хорошая идея. Однако есть несколько альтернативных подходов к созданию хорошего подсказчика синонимов. На этот раз вы можете использовать встроенный тезаурус и предсказать, какой из возможных синонимов с наибольшей вероятностью встретится в данном контексте, используя методы предсказания слов. В любом случае, эмпирическое правило заключается в том, что вам необходимо учитывать конкретный контекст, потому что, являются ли два слова синонимами или нет, часто зависит от контекста, в котором они встречаются.

Средний вывод.

Векторы слов представляют средний контекст слова. Все аспекты контекста: синтаксис, семантика и прагматика. Если один аспект имеет больший вес, чем другой, это будет видно в векторном представлении слова. Если слово встречается чаще в одном контексте, чем в другом, это будет видно в векторном представлении слова. Если слово встречается чаще с одним из своих значений, это будет видно в векторном представлении слова. Поэтому, если вы хотите использовать векторы слов для вычисления сходства, остерегайтесь сложности подобия.
Хотя векторы слов очень полезны во многих отношениях и позволили нам добиться большого прогресса в NLU, они основаны на довольно упрощенном подходе к языку (мы должны с чего-то начать…). В языке так много тонкостей, которые люди понимают интуитивно и манипулируют ими, даже не задумываясь об этом. Мы способны выводить множество значений, которые даже не выражаются лингвистически, только на основе контекста, в котором мы используем язык, или наших знаний и отношений с людьми, с которыми мы взаимодействуем, и многих других факторов. Так что давайте продолжим в том же духе и разберемся с недостатками векторов слов, потому что однажды я хочу домашнего робота. Есть идеи, как сделать это лучше? Связаться!

Первоначально опубликовано на www.faction.xyz 20 марта 2018 г.