Как измерить сходство между словами или очень коротким текстом - PullRequest
0 голосов
/ 26 марта 2020

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

Я пытался использовать вложения word2ve c (из статьи Миколова), но самые близкие слова или более контекстно связанные, чем семантически связанные ("джинсы" связаны с " обувь ", а не" брюки ", как ожидалось).

Я пытался использовать кодировку Берта (https://mccormickml.com/2019/05/14/BERT-word-embeddings-tutorial/#32 -understanding-the-output ) с использованием последних слоев, но он сталкивается с теми же проблемами .

Я пробовал поиск elasti c, но он не находит семантического сходства. (Задача должна быть решена по-французски, но, возможно, решение по-английски sh - хороший первый шаг)

Ответы [ 3 ]

0 голосов
/ 30 марта 2020

Вы можете попробовать вложение документа , построенное поверх word2ve c

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

Насколько велик ваш корпус? Если вам нужно просто выполнить некоторую классификацию, лучше обучить векторы на большом наборе данных, таком как корпус Новостей Google.

0 голосов
/ 01 апреля 2020

Для вычисления сходства между короткими текстами, которые содержат 2 или 3 слова, вы можете использовать word2ve c с получением среднего вектора предложения. например, если у вас есть текст (станок) и вы хотите представить его в одном векторе, используя word2ve c, вам нужно получить вектор «machine» и вектор if «tool», а затем объединить их в один вектор: получить средний вектор, который должен сложить два вектора и разделить на 2 (количество слов). это даст вам векторное представление для предложения, которое является более чем одним словом. Вы также можете использовать что-то вроде doc2vec, которое разработано поверх word2vec и его цель - получить вектор для предложения или абзаца.

0 голосов
/ 26 марта 2020

Обратите внимание, что разные наборы слов-векторов могут различаться в зависимости от того, насколько хорошо они отражают желаемое сходство 'semanti c'. (В частности, обучение с более коротким window может подчеркивать сходство между словами, которые являются взаимозаменяемыми заменами друг другу, в отличие от просто используемых в похожих доменах, как могут подчеркивать большие значения window. См. этот ответ для получения более подробной информации.)

Возможно, вы также захотите взглянуть на «Расстояние до Word Mover», чтобы сравнить короткие тексты, содержащие различные сочетания несколько похожих слов. (Это довольно дорого, но должно быть практично для ваших коротких текстов. Он доступен в библиотеке Python gensim как wmdistance() в KeyedVectors экземплярах.)

Если у вас есть данные обучения, где указаны ваши c используются фразы из нескольких слов, во многих естественных языковых тонко изменяемых контекстах, вы можете рассмотреть возможность объединения всех таких фраз в отдельные токены (например, machine_tool или biological_tomatoes) и обучение ваших собственный домен-указатель c слово-векторов.

...