Кращий практичний алгоритм подібності речень


18

У мене є два речення, S1 і S2, обидва з яких мають кількість слів (як правило) нижче 15.

Назвіть найбільш практично корисні та успішні алгоритми (машинне навчання), які, можливо, легко здійснити (нейронна мережа справна, якщо архітектура не така складна, як Google Inception тощо).

Я шукаю алгоритм, який буде добре працювати, не вкладаючи в нього занадто багато часу. Чи є алгоритми, які ви знайшли успішними та простими у використанні?

Це може, але не повинно підпадати під категорію кластеризації. Моє походження від машинного навчання, тому будь-які пропозиції вітаються :)


Що ти реалізував? Я також стикаюся з тим, що мені доведеться придумати рішення для "k" статей, що містяться в корпусі, який постійно оновлює.
Ділепа

Відповіді:


16

На відповідь косину для векторного простору можна відповісти: http://blog.christianperone.com/2013/09/machine-learning-cosine-s Sličnost-for-vector-space-models-part- iii/

Або ви могли обчислити власний вектор кожного речення. Але проблема полягає в тому, що схожість?

"Це дерево", "Це не дерево"

Якщо ви хочете перевірити смислове значення речення, вам знадобиться набір даних wordvector. За допомогою набору даних wordvector ви зможете перевірити зв’язок між словами. Приклад: (Король - Чоловік + жінка = Королева)

Siraj Raval має хороший ноутбук python для створення наборів даних wordvector: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE


8

Один із підходів, який ви можете спробувати, - це усереднення векторів слів, породжених алгоритмами вбудовування слова (word2vec, рукавичка тощо). Ці алгоритми створюють вектор для кожного слова, а косинусна схожість серед них являє семантичну схожість між словами. У випадку середніх векторів серед речень. Хорошим початковим пунктом для того, щоб дізнатися більше про ці методи, є цей документ: Наскільки добре вбудований вирок означає значення . У ньому обговорюються деякі способи вбудовування речень. Я також пропоную розглянути питання про непідконтрольне впровадженню речення за допомогою композиційних функцій n-Gram, за якими автори стверджують, що їхній підхід переміг у найсучасніших методах. Крім того, вони надають код та деякі інструкції щодо використання в цьому рефінансі github .


3

bert-as-service ( https://github.com/hanxiao/bert-as-service#building-a-qa-semantic-search-engine-in-3-minutes ) пропонує саме таке рішення.

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


2

Ви повинні перевірити https://github.com/seatgeek/fuzzywuzzy#usage . fuzzywuzzy - дивовижна бібліотека для відповідності рядків / тексту, яка дає число від 0 до 100 на основі того, наскільки схожі два речення. Він використовує відстань Левенштейна для обчислення різниць між послідовностями у простому у використанні пакеті. Крім того, ознайомтеся з цим повідомленням у блозі, щоб отримати детальне пояснення того, як fuzzywuzzy виконує цю роботу. Цей блог також написаний нечітким автором


1

Цей блог має рішення для короткої подібності тексту. Вони в основному використовують модель нейронної мережі BERT, щоб знайти схожість між реченнями. https://medium.com/@vimald8959/sentence-categorisation-short-text-s подобниity-61bb88fae15e


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

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