Dice Tech Jobs - Simon Hughes(Dice 데이터 과학자)가 작성한 '개념적 검색 엔진' 구축을 위한 Dice.com의 저장소입니다. 이 저장소에는 문서 세트에서 Thomas Mikolov의 Word2Vec 모델을 훈련하기 위한 Python 코드가 포함되어 있습니다. 이 프로세스의 출력은 검색 엔진 내에서 개념적 검색 기능을 제공하기 위해 일부 solr 플러그인과 결합된 동의어 파일을 사용하여 solr(또는 일부 다른 검색 엔진)에 포함될 수 있습니다. 동의어 파일을 지원하는 경우 다른 검색 엔진에서도 출력을 사용할 수 있습니다. 개념 검색은 의미 검색이라고도 하며, 회상률을 높이기 위해 키워드가 아닌 도메인의 개념 전체를 일치시키는 방법을 학습합니다.
이 작업을 확장한 '검색의 벡터' 저장소도 확인해 보세요. 여기에는 해당 강연의 슬라이드와 비디오에 대한 링크도 포함되어 있습니다.
스크립트에는 문서를 사전 처리 및 토큰화하고, 문서 빈도에 따라 공통 용어 및 구문을 추출하고, gensim 구현을 사용하여 word2vec 모델을 훈련하고, sci-kit learn의 클러스터링 라이브러리를 사용하여 결과 단어 벡터를 클러스터링하는 코드가 포함되어 있습니다. Python 스크립트는 일부 사용자 정의 주사위 solr 플러그인과 결합될 때 solr 내에서 개념적 검색 기능을 활성화하는 데 사용할 수 있는 여러 solr 동의어 파일을 출력합니다.
Apache Solr 검색 엔진 내에서 학습된 벡터 및 동의어 파일을 활용하기 위한 solr 플러그인은 https://github.com/DiceTechJobs/SolrPlugins를 참조하세요.
플러그인 설정을 포함하여 solr 내에서 개념 검색을 구성하기 위한 예제 solr 구성 항목은 https://github.com/DiceTechJobs/SolrConfigExamples를 참조하세요.
스크립트는 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 - (선택 사항) 도메인에 훌륭하고 광범위한 키워드 세트가 없거나(예: 상위 5,000개의 검색 키워드 및 구문, 중요한 부분인 구문) 이 목록 이상으로 적용 범위를 늘리려는 경우 다음을 실행하세요. 지정된 문서 빈도 임계값을 초과하는 모든 키워드와 구문을 추출하는 이 스크립트입니다.
train_word2vec_model.py - 1의 사전 처리된 문서에서 Word2Vec 모델을 학습하고 저장합니다. 2의 출력과 같은 일련의 키워드 및 구문을 사용합니다. 참고 사항 - 이 모델은 매우 빠르지만 C 컴파일러가 필요합니다. 내부적으로 C 버전을 사용할 수 있도록 사전 설치되어 있습니다. 그렇지 않으면 훨씬 느린 Python 구현이 사용됩니다. 이를 사용할 수 없는 경우 모델이 처음 학습될 때 런타임 경고가 표시됩니다.
이 단계에는 원하는 솔루션에 따라 여러 파일이 포함되어 있습니다(내 강연 참조).
벡터 출력 - 출시 예정! Jupyter Notebook 4.a를 참조하세요.
generate_topn_synonyms_file.py - 각 대상 키워드 또는 구문에 대한 상위 n개의 동의어를 생성합니다. 그러면 페이로드가 있는 파일과 페이로드가 없는 파일 등 2개의 파일이 생성됩니다. 가장 간단한 사용 사례는 페이로드 없이 파일을 사용하는 것입니다. 유사성에 따라 동의어에 가중치를 부여하는 페이로드 파일을 사용하면 더 나은 성능을 얻을 수 있습니다. 이는 쿼리 부스트 파서를 사용하여 쿼리 시 수행할 수 있습니다. 여러 단어로 구성된 동의어 문제를 해결하기 위해 공백을 쉼표로 대체하므로 이렇게 하려면 쿼리 시 쉼표와 공백을 토큰화해야 합니다. 대안으로(권장) PayloadEdismax 쿼리 파서, PayloadAwareDefaultSimilarity 클래스(기본 유사성으로 사용하거나 필드별로 구성하기 위해 스키마 유사성을 사용)와 함께 인덱스 시간에 동의어 확장을 사용하고 이러한 필드의 fieldType에 'payload'라는 용어가 포함되어 있는지 확인하세요. 또는 '벡터'.
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은 Google 뉴스 코퍼스의 1,000억 단어에 대해 훈련된 사전 훈련된 단어 벡터 세트를 출시했습니다. 뉴스 검색 엔진을 구축하는 회사(예: Reuters, Bloomberg, 정부 기관 등)와 같이 전문적인 도메인에 초점을 맞추지 않고 매우 광범위한 문서 세트에 중점을 두는 경우 이 사전 훈련된 모델을 사용할 수 있습니다. 대신에. 그런 다음 처음 3단계를 건너뛰고 위의 4단계 스크립트 중 하나를 사용하여 사전 학습된 모델을 사용하고 출력 동의어 파일을 계산하는 것으로 바로 이동할 수 있습니다. 이것이 필요한 전부입니다. 이 게시물에서는 사전 훈련된 벡터를 얻을 수 있는 위치를 설명합니다: https://groups.google.com/forum/#!topic/gensim/_XLEbmoqVCg. 그런 다음 gensim의 Word2Vec의 model.load 기능을 사용할 수 있습니다.
model = Word2Vec . load ( MODEL_FILE )
Solr 클라우드를 사용하는 경우 Zookeeper는 크기가 1M를 초과하는 구성 파일을 좋아하지 않습니다. 따라서 결과 동의어 파일이 이보다 큰 경우 1) 기본 사육사 설정을 변경하거나, 2) 동의어 파일을 여러 파일로 분할하고 동의어 필터를 순서대로 적용하거나, 3) 다음을 사용하여 데이터베이스에서 동의어를 로드해야 합니다. 플러그인(예: https://github.com/shopping24/solr-jdbc-synonyms)
Stanford의 NLP 보핀은 비슷한 정확도로 Word2Vec에 대한 경쟁 단어 벡터 학습 알고리즘을 개발했습니다. 이를 실험하고 싶다면 이 Python 패키지를 사용하면 그렇게 할 수 있습니다. https://github.com/hans/glove.py 그러나 아직 시도해 본 적이 없어서 현재로서는 보증할 수 없습니다.
초기 스크립트에는 원시 *.txt 또는 html 파일이 포함된 폴더가 필요합니다. HTML 콘텐츠가 있는 경우 스크립트 내부에 HTML을 구문 분석하는 논리가 있지만 아름다운 수프는 약간 불안정할 수 있으므로 파이프라인을 통해 푸시하기 전에 먼저 사전 구문 분석하는 것이 더 나을 수 있습니다. 이 스크립트를 실행하려고 할 때 대부분의 사람들이 겪는 문제인 것처럼 보이는 특별한 파일 형식은 없습니다. 파일을 로드하는 중에 오류가 발생하는 경우 노트북이 아닌 Python 스크립트를 사용하고 디버거를 열어 무슨 일이 일어나고 있는지 확인하는 것이 좋습니다. 또한 https://github.com/DiceTechJobs/ConceptualSearch/blob/master/Settings/pre_process_documents.cfg에서 로드하려는 파일과 일치하도록 config.file_mask를 설정했는지 확인하세요. 기본값은 .*.txt(파일 blob이 아닌 정규식)이므로 파일이 .txt 파일이 아닌 경우 이를 변경해야 합니다.
문제 목록에 질문, 버그 또는 기능 요청을 게시하고 @mention - @simonhughes22를 포함하면 적시에 질문이 포함된 이메일을 받을 수 있습니다. 이 저장소에 대해 질문이 있는 이메일을 직접 보내는 사람이 몇 명 있었습니다. 이메일에 응답해도 괜찮지 만 대신 GitHub 문제를 제출하고 저를 @멘션해 주세요. 이렇게 하면 다른 모든 사람이 나중에 참고할 수 있도록 질문과 내 답변을 볼 수 있습니다.
저는 최근에 벡터 검색(Vector Search)에 대해 강연했습니다. 코드는 아래와 같습니다. 이는 제가 했던 개념 검색 작업의 자연스러운 확장입니다.
Solr 플러그인을 확인해 보세요: