Dice Tech Jobs — репозиторий Dice.com для создания «концептуальной поисковой системы», созданный Саймоном Хьюзом (специалист по данным Dice). Этот репозиторий содержит код Python для обучения модели Word2Vec Томаса Миколова на наборе документов. Результаты этого процесса затем можно внедрить в solr (или другую поисковую систему) с использованием файлов синонимов в сочетании с некоторыми плагинами solr для обеспечения функций концептуального поиска в поисковой системе. Вывод также может быть использован в других поисковых системах, при условии, что они поддерживают файлы синонимов. Концептуальный поиск также известен как семантический поиск и учится сопоставлять понятия в предметной области, а не ключевые слова, чтобы улучшить запоминание.
Пожалуйста, также ознакомьтесь с моим репозиторием «Векторы в поиске», который расширяет эту работу. Он также содержит ссылки на слайды и видео из этого выступления.
Сценарии включают в себя код для предварительной обработки и токенизации документов, извлечения общих терминов и фраз на основе частоты появления документов, обучения модели word2vec с использованием реализации gensim и кластеризации полученных векторов слов с использованием библиотек кластеризации sci-kit Learn. Скрипты Python выводят несколько файлов синонимов solr, которые можно использовать для включения функции концептуального поиска в solr в сочетании с некоторыми настраиваемыми плагинами solr для кубиков.
См. https://github.com/DiceTechJobs/SolrPlugins для плагинов solr для использования изученных векторов и файлов синонимов в поисковой системе Apache Solr.
См. https://github.com/DiceTechJobs/SolrConfigExamples, где приведены примеры записей конфигурации solr для настройки концептуального поиска в solr, включая настройку плагинов.
Сценарии представлены в виде блокнотов Jupyter Python, которые нужно запускать по порядку (1,2,3 и любой из 4), а также в виде отдельных сценариев командной строки (см. ниже), если вы не хотите использовать Jupyter. Скрипты Python более понятны, имеют общие файлы конфигурации со всеми необходимыми настройками и предназначены для запуска из оболочки, поэтому их, вероятно, проще начать с . Эти блокноты и сценарии будут предварительно обрабатывать документы и обучать модель Word2Vec. В папке ./Settings содержатся примеры файлов конфигурации для каждого скрипта с описанием каждого параметра в комментариях. Чтобы вызвать сценарии командной строки, передайте соответствующий файл конфигурации в качестве единственного параметра, например
python pre_process_documents.py ./Settings/pre_process_documents.cfg
Сценарии командной строки следует запускать в следующем порядке:
pre_process_documents.py — это необходимо для удаления некоторых символов пунктуации (запятых, дефисов и т. д.), анализа HTML, если необходимо, и разделения предложений в документе. Если вы хотите пропустить этот шаг и перейти к шагу 2 или 3, предоставьте набор файлов для шагов 2 и 3 с удалением всех знаков препинания, которые вы хотите удалить, и с каждым новым предложением на отдельной строке.
Extract_keywords.py — (необязательно) Если у вас нет хорошего и обширного набора ключевых фраз из вашего домена (например, 5000 лучших поисковых ключевых слов и фраз, фразы являются важной частью) или вы хотите расширить охват за пределами этого списка, запустите этот сценарий для извлечения всех ключевых слов и фраз, превышающих указанный порог частоты документов.
train_word2vec_model.py — обучает и сохраняет модель Word2Vec в предварительно обработанных документах из версии 1. Использует набор ключевых слов и фраз, таких как те, которые выводятся из версии 2. Обратите внимание — эта модель очень быстрая, но для ее работы требуется компилятор C. доступен и предустановлен для использования скрытой версии C, в противном случае используется гораздо более медленная реализация Python. Если это недоступно, вы получите предупреждение во время выполнения при первом обучении модели.
Этот шаг содержит несколько файлов в зависимости от желаемого решения (см. мой доклад):
Векторный вывод - СКОРО! См. Jupyter Notebook 4.a.
генерировать_topn_synonyms_file.py — генерирует n лучших синонимов для каждого целевого ключевого слова или фразы. При этом создаются 2 файла: файл с полезными данными и файл без них. Самый простой вариант использования — использовать файл без полезных данных. Более высокую производительность можно повысить, используя файл полезных данных для взвешивания синонимов по сходству. Это можно сделать во время запроса с помощью парсера queryboost. Обратите внимание: для этого вам необходимо токенизировать запятые и пробелы во время запроса, поскольку мы заменяем пробелы запятыми, чтобы обойти проблему синонимов из нескольких слов. В качестве альтернативы (и рекомендуется) использовать расширение синонимов во время индексации вместе с анализатором запросов PayloadEdismax, классом PayloadAwareDefaultSimilarity (используйте сходство по умолчанию или используйте сходство схемы для настройки каждого поля) и убедитесь, что fieldType для этих полей содержит термин «полезная нагрузка». или «вектор».
generate_cluster_synonyms_file.py — генерирует k кластеров из векторов слов, созданных на предыдущих шагах. Их можно встроить непосредственно в solr через файл синонимов — никаких специальных плагинов не требуется. Я бы рекомендовал создать несколько различных кластеров синонимов разного размера и настроить их как отдельные поля с более высокими весами полей, применяемыми к небольшим кластерам (т. е. сгенерированными с большим значением k).
Построен с использованием Python 2.7.10. Непроверено с Python 3
Реализация Word2Vec — это отличный пакет gensim. Содержит быстрые реализации LSA, LDA, Word2Vec и некоторых других алгоритмов машинного обучения.
https://radimrehurek.com/gensim/models/word2vec.html
Это отличный пакет для тематического моделирования и изучения семантических представлений документов и слов.
Google выпустил набор предварительно обученных векторов слов, обученных на 100 миллиардах слов корпуса новостей Google. Для тех из вас, кто сосредоточен не на специализированной области, а на очень широком наборе документов, например, компании, создающие поисковую систему новостей (например, Reuters, Bloomberg, правительственные агентства и т. д.), вы можете просто использовать эту предварительно обученную модель. вместо. Затем вы можете пропустить первые три шага и сразу перейти к использованию одного из приведенных выше сценариев шага 4, которые берут предварительно обученную модель и вычисляют выходные файлы синонимов, и это все, что вам нужно. В этом посте описывается, где взять предварительно обученные векторы: https://groups.google.com/forum/#!topic/gensim/_XLEbmoqVCg. Затем вы можете использовать функцию model.load gensim Word2Vec:
model = Word2Vec . load ( MODEL_FILE )
Если вы используете облако Solr, Zookeeper не любит, чтобы файлы конфигурации превышали размер 1 МБ. Таким образом, если полученные файлы синонимов превышают этот размер, вам придется либо 1) изменить настройки Zookeeper по умолчанию, 2) разделить файл синонимов на несколько файлов и последовательно применить фильтры синонимов, либо 3) загрузить синонимы из базы данных с помощью плагин (например, https://github.com/shopping24/solr-jdbc-synonyms)
Специалисты по НЛП из Стэнфорда разработали конкурирующий с Word2Vec алгоритм обучения векторов слов с такой же точностью. Если вы хотите поэкспериментировать с этим, этот пакет Python позволит вам это сделать: https://github.com/hans/glove.py. Однако я этого не пробовал, поэтому не могу за это ручаться.
Первоначальные сценарии ожидают папку, содержащую необработанные файлы *.txt или html. Если у вас есть контент в формате html, внутри скриптов есть логика для анализа html, но красивый суп может быть немного ненадежным, поэтому вам лучше сначала их предварительно проанализировать, прежде чем проталкивать через конвейер. Обратите внимание, что специального формата файла не существует, и это, по-видимому, проблема, с которой сталкивается большинство людей при попытке запустить этот сценарий. Если при загрузке файлов происходит ошибка, я бы предложил использовать скрипт Python, а не блокнот, и открыть отладчик, чтобы посмотреть, что происходит. Кроме того, убедитесь, что вы установили config.file_mask в соответствии с файлами, которые хотите загрузить, в https://github.com/DiceTechJobs/ConceptualSearch/blob/master/Settings/pre_process_documents.cfg. По умолчанию это .*.txt (это регулярное выражение, а не файловый объект), поэтому вам нужно будет изменить это, если ваши файлы не являются файлами .txt.
Пожалуйста, публикуйте любые вопросы, ошибки или пожелания в списке проблем и добавляйте @mention - @simonhughes22, чтобы я своевременно получал электронное письмо с вашими вопросами. Несколько человек написали мне напрямую с вопросами об этом репозитории. Хотя я не против отвечать на электронные письма, вместо этого отправьте сообщение на GitHub и @упомяните меня. Таким образом, все остальные смогут увидеть вопрос и мой ответ для дальнейшего использования.
Недавно я выступал с докладом о векторном поиске, код приведен ниже. Это естественное продолжение моей работы по концептуальному поиску.
Пожалуйста, ознакомьтесь с нашими плагинами Solr: