2017-04-19 8 views
3

gensim과 함께 python을 사용하여 영어 wikipedia에서 word2vec 모델을 학습하고 싶습니다. 나는 그것에 대해 https://groups.google.com/forum/#!topic/gensim/MJWrDw_IvXw를 밀접하게 따랐다.위키 자료를 구문 분석 할 때 Gensim의 구두점 제거 등 사용 안함

그것은 저에게 효과적이지만 결과 word2vec 모델에 대해 마음에 들지 않는 것은 명명 된 요소가 분할되어 특정 응용 프로그램에서 모델을 사용할 수 없게 만듭니다. 필요한 모델은 명명 된 엔티티를 단일 벡터로 나타내야합니다.

왜 내가 spacy로 위키 피 디아 기사를 구문 분석하고 "north carolina"와 같은 "north carolina"와 같은 엔티티를 병합하여 word2vec가 단일 벡터로 표시 할 계획을 세웠습니다. 여태까지는 그런대로 잘됐다.

적응 구문 분석 내가 처음으로 사용하여 링크 된 토론에 추천 않은 전처리의 일부가되고 있습니다

... 
wiki = WikiCorpus(wiki_bz2_file, dictionary={}) 
for text in wiki.get_texts(): 
    article = " ".join(text) + "\n" 
    output.write(article) 
... 

이 문장은 단어, 숫자, 대문자를 중지 제거하고 각 기사를 저장 결과 출력 파일에서 별도의 행. 문제는 spacy의 NER가이 전처리 된 텍스트에서 실제로 작동하지 않는다는 것입니다. NER (구두점)에 대문자 및 대문자를 사용한다고 생각하기 때문입니다.

구두점 등을 제거하지 못하도록 gensim의 전처리를 "비활성화"할 수있는 사람이 누구인지 알고 있지만 압축 위키 백과 덤프에서 직접 텍스트에 대한 위키피디아 문서를 구문 분석합니까? 아니면 누군가가 이것을 수행하는 더 좋은 방법을 알고 있습니까? 미리 감사드립니다!

+0

업데이트 : Gensim의 WikiCorpus 클래스를 복사하여 필요한 곳에 직접 spaCy 작업을 추가했습니다. 지금 당장 이것은 gensim이 wikipedia 텍스트를 전처리하는 방식을 바꾸고 싶다면 갈 길 인 것 같습니다. – marlonfl

+0

그런데 이미이 방법을 구현하고이 문제를 해결했다면 여기서 접근 방법을 공유 할 수 있다면 좋을 것입니다. – sophros

답변

0

spacy가 문장의 수준에서 작동했다면 놀랄 일이 아닙니다. 이를 위해서는 문장 경계 (점, 물음표 등)를 사용하는 것이 좋습니다. 그래서 spacy NER (또는 파이프 라인 초기에 POS 태거조차도)가 실패 할 수도 있습니다.

gensim의 LSI에 대한 명명 된 엔티티를 나타내는 방법은 인공 식별자 (존재하지 않는 단어)를 추가하는 것이 좋습니다. 모델의 관점에서 보면 아무런 차이가 없으며 gensim의 사전 처리 작업을 다시 수행해야하는 부담을 줄일 수 있습니다.

model.wv.vocab 여기서 model = gensim.models.Word2Vec(...)을 참조하십시오.이 경우 모델을 두 번 훈련해야합니다. 또는 원본 텍스트에서 어휘 집합을 만들고 어휘에 이미 존재하지 않는 임의의 문자 집합을 선택하십시오.