#machine-learning #nlp #gensim #fasttext
Вопрос:
Я пытаюсь создать модель НЛП, которая может находить похожие предложения. Например, он должен быть в состоянии сказать, что «Инженер-программист», «Разработчик программного обеспечения», «Разработчик программного обеспечения», «Программист» — это похожие предложения.
У меня есть набор данных со списком ролей, таких как руководители Cheif, инженер-программист, и вариации этих терминов будут неизвестны ( вне словарного запаса).
Я пытаюсь использовать FastText с Gensim, но изо всех сил. Есть ли у кого-нибудь рекомендации по чтению/ учебникам, которые могли бы мне помочь?
Комментарии:
1. Я голосую за то, чтобы закрыть этот вопрос, потому что он относится к форуму обмена стеками данных, поскольку он напрямую не связан с проблемой программирования . Пожалуйста, перенесите вопрос туда.
2. Я понимаю. Спасибо
Ответ №1:
Простого списка ролей может быть недостаточно для данных FastText (и аналогичных алгоритмов, подобных word2vec), которым необходимо видеть слова (или токены) в естественных контекстах ussage наряду с другими связанными словами, чтобы постепенно подталкивать их к интересным выравниваниям относительного сходства.
У вас есть только названия или другие описания ролей?
В той мере, в какой названия состоят из отдельных слов, которые в контексте их названия в основном означают то же самое, что и в обычных контекстах, и они очень короткие (по 2-3 слова в каждом), одним из возможных подходов является использование показателя «расстояние перемещения слов» (WMD).
Вам понадобятся хорошие векторы слов, обученные из других источников, с хорошими контекстами и совместимыми значениями слов, чтобы векторы для 'software'
, ‘ engineer'
и т. Д. По отдельности Были достаточно хорошими. Затем вы можете использовать .wmdistance()
метод в словесно-векторных классах Gensim для вычисления меры того, насколько во всех текстовых словах один набор слов отличается от другого набора слов.
Обновление: Обратите внимание, что для значений из ОМУ (и значений из косинусного сходства), как правило, вы не должны зацикливаться на их абсолютных значениях, только на том, как они влияют на относительные рейтинги. То есть, независимо от того, какое исходное значение wmd(['software', 'engineer'], ['electric', 'engineer'])
возвращает , будь то оно 0.01
или 100
нет, важным показателем является то, как это число сравнивается с другими попарными сравнениями, например, скажем wmd(['software', 'engineer'], ['software', 'developer'])
.
Комментарии:
1. У меня есть названия и описания. Однако название не используется в описании. Я попытался использовать метрику перемещения слов в наборе данных word2vec-google-news-300, и, похоже, она не очень точна. В нем говорится, что такие названия, как «инженер-программист» и «инженер-электрик», очень близки, в то время как это не так. Есть ли у вас какие-либо предложения о том, где я могу получить хорошие словесные векторы, обученные в других местах, с совместимыми значениями слов? Спасибо вам за вашу помощь!
2. В мире всех высказываний из 2-х слов
software engineer
amp;electric engineer
находятся довольно близко! Но также смотрите Обновление , которое я добавил к ответу о правильной интерпретации значений ОМУ или косинусоидального сходства. Да, также, для ОМУ, как и для других векторно-словесных проектов, вы действительно хотите использовать векторы-слова, относящиеся к вашему домену. (GoogleNews
Векторы взяты из новостных статей, и они немного устарели в возрасте от 8 лет, поэтому, несмотря на слова 3M, у них может не быть правильного нового жаргона, аббревиатур и смыслов слов, как требуется современным проектам в других областях.) …3. Если у вас достаточно данных, часто лучше всего обучать свои собственные словесные векторы на основе текстов, которые вы анализируете. Вы можете попробовать запустить заголовки и описания вместе для общей словесной модели. Вы можете попробовать включить названия как в их версии с несколькими токенами (
['senior', 'software', 'engineer']
), так и в искусственный составной токен (['senior_software_engineer']
)-таким образом, ваша модель получает представление как об отдельных словах, так и о полном названии, в той степени, в какой оно повторяется.4.С фиксированным набором заголовков (в исходных данных или после очистки) вы можете выбрать
fasttext
-supervised
режим, чтобы предсказать полный заголовок по текстовым описаниям. (Обратите внимание , что этот режим не реализован в Gensim.) Вы можете попробовать применить GensimDoc2Vec
с заголовками или словами заголовка в качестве тегов doc. В зависимости от вашего предполагаемого использования оценок сходства могут быть рассмотрены другие алгоритмы классификации текста или кластеризации текста или ранжирования текста. В некоторых случаях даже простое измерение расстояния между общими подстроками/редактированием может помочь связать опечатки/нестандартные формулировки со стандартными заголовками.5. Спасибо! В этом есть большой смысл. Я попробую эти методы и обновлю!