Альтернативи TF-IDF та косинусної подібності при порівнянні документів різного формату


12

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

1) Обробіть текст кожного списку завдань, щоб витягнути навички, які згадуються в лістингу

2) Для кожної кар'єри (наприклад, "Аналітик даних") об'єднайте оброблений текст списків завдань для цієї кар'єри в один документ

3) Обчисліть TF-IDF кожного навику в документах про кар’єру

Після цього я не впевнений, який метод я повинен використовувати для ранжирування кар'єри на основі списку навичок користувача. Найпопулярніший метод, який я бачив, - це також ставитись до навичок користувача як до документа, а потім обчислювати TF-IDF для документа на вміння та використовувати щось на зразок косинусної подібності для обчислення подібності між документом навички та кожним кар’єрний документ.

Це не здається ідеальним рішенням для мене, оскільки схожість косинуса найкраще використовувати при порівнянні двох документів одного формату. З цього приводу TF-IDF зовсім не здається відповідним показником, який застосовується до списку вмінь користувача. Наприклад, якщо користувач додає додаткові навички до свого списку, TF для кожного вміння знизиться. Насправді мені байдуже, яка частота цих навичок є у списку навичок користувача - мені просто важливо, щоб вони мали ці вміння (а можливо, наскільки добре вони знають ці вміння).

Схоже, кращим показником було б виконати наступне:

1) Для кожного навику, який має користувач, обчисліть TF-IDF цього вміння в документах про кар’єру

2) Для кожної кар'єри підсумовуйте результати TF-IDF за всі вміння користувача

3) Рангова кар'єра виходячи з вищевказаної суми

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


3
Ознайомтеся з Doc2vec, Gensim має реалізацію
Blue482

Відповіді:


1

Можливо, ви могли б використовувати вбудовування слів, щоб краще представити відстань між певними навичками. Наприклад, "Python" і "R" повинні бути ближче один до одного, ніж "Python" і "управління часом", оскільки вони обидві мови програмування.

Вся ідея полягає в тому, що слова, які з’являються в одному контексті, повинні бути ближчими.

Після того, як ви будете вбудовуватися, ви отримаєте набір навичок для кандидата та набір навичок різного розміру для завдань. Тоді ви можете використовувати відстань Землеподвижника для обчислення відстані між множинами. Ця міра відстані є досить повільною (квадратичний час), тому вона може не змінити масштаб, якщо у вас є багато завдань, які потрібно пройти.

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


1

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

Якщо ви створите "вектор запиту" з навичок, ви можете помножити вектор за допомогою термінальної матриці кар'єри (з усіма вагами tf-idf як значеннями). Отриманий вектор дасть вам рейтинг балів за документ про кар’єру, який ви можете використовувати для вибору кар'єри топ-k для набору "навичок запиту".

Наприклад, якщо ваш вектор запиту складається з нулів і одиниць і має розмір, і ваша матриця термінового документа має розмір, тоді призведе до вектора розміромз елементами, рівними сумі ваги TF-IDF кожного терміна запиту на документ про кар’єру. 1×| terms| М| terms| ×| documents| ˉ v M1×| documents|q¯1×|terms|M|terms|×|documents|v¯M1×|documents|

Цей метод ранжування є одним з найпростіших і існує багато варіацій. Запис TF-IDF у Вікіпедії також коротко описує цей метод ранжирування. Я також знайшов відповіді на запитання щодо відповідності документів.


Дивно, але звичайне середнє вбудовування слів часто таке ж добре, як і середнє зважене число вкладених робіт, виконане з вагами Tf-Idf.
воск


0

Ви можете спробувати використовувати "gensim". Я робив подібний проект з неструктурованими даними. Gensim дав кращі оцінки, ніж стандартний TFIDF. Він також біг швидше.

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