Як побудувати смисловий пошук даного домену


19

Є проблема, яку ми намагаємося вирішити, де ми хочемо зробити семантичний пошук на нашому наборі даних, тобто у нас є дані, що стосуються домену (приклад: пропозиції, що говорять про автомобілі)

Наші дані - це лише купа пропозицій, і ми хочемо дати фразу і повернути пропозиції, які є:

  1. Подібна до цієї фрази
  2. Має частину речення, схожу на фразу
  3. Речення, яке має контекстуально подібні значення


Дозвольте спробувати навести приклад. Припустимо, я шукаю фразу "Покупка досвіду", я повинен отримати такі пропозиції:

  • Я ніколи не думав, що покупка автомобіля може зайняти менше 30 хвилин, щоб підписати та купити.
  • Я знайшов автомобіль, який мені сподобався, і процес придбання був
    простим і легким

  • Я абсолютно ненавидів їздити по магазинах, але сьогодні я радий, що зробив


Я хочу зробити акцент на тому, що ми шукаємо контекстуальну схожість, а не просто грубу силу пошуку слів.

Якщо в реченні використовуються різні слова, то і його слід вміти знайти.

Те, що ми вже спробували:

  1. Відкритий семантичний пошук Проблема, з якою ми стикаємося тут, - це генерування онтології з даних, які ми маємо, або для цього пошук доступної онтології з різних областей, які нас цікавлять.

  2. Еластичний пошук (BM25 + Vectors (tf-idf)), ми спробували це там, де він дав кілька пропозицій, але точність була не такою великою. Точність була також поганою. Ми намагалися проти набору даних, підготовлених людиною, він мав змогу отримати лише 10% вироків.

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

  4. Ми спробували ELMO . Це було краще, але все ж нижча точність, ніж ми очікували, і для визначення значення косинуса, нижче якого ми не повинні розглядати речення, є когнітивне навантаження. Це стосується навіть пункту 3.

Будь-яка допомога буде вдячна. Заздалегідь дякую за допомогу


Добре написане запитання - чи можете ви додати ще 5 прикладів пошукових термінів? Чи завжди вони є одними-трьома словосполученнями чи можуть пошукові терміни бути довшими? Ви на правильному шляху
Adnan S

Привіт, Аднане, пошуковий термін завжди буде одно-три словосполученням. Наприклад: досвід покупки, комфорт водіння, система інфо-розваг, інтер'єри, пробіг, продуктивність, комфорт для сидіння, поведінка персоналу.
Jickson

Ця стаття може бути цікавою вашому випадку: elastic.co/blog/… (підказка: leverage word2vec)
Val

@Val Це насправді цікаво, що я збирався згадати ту саму статтю, яку ви згадали, а потім побачив ваш коментар. Я думаю, що цей метод наблизить вас до того, що ви хочете.
німа

ви можете заглянути в косинусну схожість. Як пояснено нижче, воно включає перетворення рядків у вектори, які можуть бути представлені у двовимірному просторі. Обчислюється кут косинусу цих двох векторів. Цей кут являє собою "схожість" між двома рядками. Ось приємна стаття про це medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Відповіді:


5

Я б настійно пропонував вам прочитати лекцію Трея Грінгера про те, як побудувати семантичну систему пошуку => https://www.youtube.com/watch?v=4fMZnunTRF8 . Він розповідає про анатомію семантичної пошукової системи та про кожну частину, яка використовується для з'єднання для остаточного рішення.

Чудовим прикладом контекстної подібності є пошукова система Бінга: введіть тут опис зображення

Оригінальний запит мав терміни {консервована сода}, а результати пошуку Bing можуть посилатися на {консервовану дієтичну соду}, {безалкогольні напої}, {невідкриту температуру кімнатної температури} або {газовані напої}. Як це зробив Bing ?:

Добре, що слова, що мають подібні значення, отримують подібні вектори, і тоді ці вектори можна спроектувати на двовимірний графік, який легко візуалізується. Ці вектори навчаються, забезпечуючи, щоб слова з подібним значенням були фізично поруч один з одним. Ви можете навчити власну векторну модель, навчаючи модель GloVeвведіть тут опис зображення

Чим ближче відстані векторів один до одного, тим краще. Тепер ви можете шукати найближчі запити сусідів на відстані їх векторів. Наприклад, для запиту {як не можна тваринам знищувати мій сад} найближчий сусід дає такі результати:

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

Ви можете дізнатися більше про це тут. У вашому випадку ви можете знайти поріг максимальної відстані, який вектор речення може бути від початкового пошукового запиту, щоб він вважався контекстуально подібним реченням.

Контекстуальну схожість також можна зробити, зменшивши розмір лексики, використовуючи щось на зразок LSI (Latent Semantic Indexing). Для цього в Python я б настійно рекомендую переглянути бібліотеку генізму для python: https://radimrehurek.com/gensim/about.html .


1

Можливо, вам буде цікаво розглянути Weaviate, щоб допомогти вам вирішити цю проблему. Це розумний графік, заснований на векторизації об'єктів даних .

Якщо у вас є доменна мова (наприклад, абревіатури), ви можете розширити Weaviate за допомогою спеціальних понять .

Можливо, ви зможете вирішити свою проблему за допомогою функцій семантичного пошуку (тобто Explore{}) або функцій автоматичної класифікації.

Дослідити функцію

Оскільки всі об’єкти даних векторизуються, ви можете здійснити семантичний пошук на зразок наступного (цей приклад походить з документів , ви можете спробувати тут за допомогою GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Якщо ви структуруєте свою графічну схему на основі -для прикладу - назви класу "Речення", подібний запит може виглядати приблизно так:

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

Примітка.
Ви також можете вивчити графік семантично в цілому.

Автоматична класифікація

Альтернативою може бути робота з контекстними або класифікаційними ознаками KNN .

У вашому випадку ви можете використовувати клас Sentence і відновити їх до класу під назвою Experience, який матиме властивість: buying(звичайно, є багато інших конфігурацій та стратегій, які ви можете вибрати).

PS:
Це відео дає трохи більше контексту, якщо вам подобається.


0

Наскільки я знаю, я не думаю, що існує якась теоретична модель побудови семантичної пошукової системи. Однак я вважаю, що семантична пошукова система повинна бути розроблена для задоволення конкретних вимог. Сказавши це, будь-яка семантична пошукова система, яка здатна успішно зрозуміти наміри користувача, а також контекст пошукового терміну, повинна працювати з обробкою природних мов (НЛП) та машинним навчанням як складовими.

Хоча пошукові системи працюють інакше, ніж інструменти пошуку, ви можете звернутися до інструментів пошуку підприємств, щоб отримати уявлення про семантичну модель пошуку, яка працює. Нові вікові платформи, такі як 3RDi Search, працюють на принципах семантичного пошуку і виявились ідеальним рішенням для неструктурованих даних, з якими мають працювати підприємства. Google, швидше за все, працює над моделлю для впровадження розширеної семантики в пошуковій системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.