2017-11-15 25 views
0

print(model.docvecs['recipe__11'])을 사용하여 doc2vec의 주어진 태그에 대한 문서 벡터를 얻는 것을 알고 있습니다.gensim에서 doc2vec의 문서 벡터를 얻는 방법

내 문서 벡터 중 하나 요리법 (태그 recipe__로 시작), 신문 (태그 news__로 시작) 또는 성분 (태그 ingre__ 시작)

가 지금은 조리법의 모든 문서 벡터를 검색 할 수 있습니다. 내 요리법 문서의 패턴은 recipe__<some number>입니다 (예 : recipe__23, recipe__34). 패턴 (예 : recipe__으로 시작하는 태그)을 사용하여 여러 문서 벡터를 얻을 수 있는지 알고 싶습니다.

도와주세요!

답변

1

패턴 검색은 없지만 model.docvecs.offset2doctag에있는 알려진 모든 (문자열) doc- 태그 목록에 액세스 할 수 있습니다. 그런 다음 해당 목록을 반복하여 모든 일치 항목을 찾고 각각을 개별적으로 검색 할 수 있습니다. 당신이 다음 offset2doctag의 태그의 위치가 doctag_syn0에서 해당 벡터의 정확히 인덱스가됩니다, 독점적으로 문자열 문서-태그를 사용한 경우에도

는 모든 문서-벡터는, 큰 배열 model.docvecs.doctag_syn0에 있고. 물론

recipes_mask = [tag.startswith('recipe_') for tag in model.dacvecs.offset2doctag] 
recipes_vectors = model.docvecs.doctag_syn0[recipes_mask] 

,이 배열 - 중 - 벡터 더 이상 같은 위치에 조리법이 없습니다 : 그것은 당신처럼, 새로운 배열로 벡터의 부분 집합을 잡기 위해 '마스크 인덱싱을'NumPy와 사용할 수 있도록 할 그래서 원래의 'recipe__11'벡터가 어디에 있는지 알기 위해서는 특별한 단계가 필요합니다. recipes_vectors.

+0

대단히 감사합니다. :) 레시피 문서를 얻은 후 벡터는'most.similar'와 같은 명령을 사용할 수 없습니다 (현재 원래 위치에 있지 않음)? –

+1

수정. 위의 예제는 단지'Doc2Vec' 또는'Word2Vec' 또는'KeyedVectors' 객체가 아니라 ('most_similar()'유틸리티 메소드를 가짐) 원시 벡터를 제공합니다. 당신은 아마 그 방법을 모방하거나, 하위 집합을 생성 된'KeyedVectors'로 강제 할 수 있습니다. 그러나 당신은 모든 문서 형식에 대해'most_similar()'를하고, 더 많은 수의 최상위 결과를 얻고, 한 종류의 벡터에 대해 * then * 필터를 수행하고자 할 수 있습니다. – gojomo

+0

좋은 생각입니다. 모든 doc-vecs에 '가장 유사한'것을 수행하고 그 결과를 필터링합니다. 고마워요 :) –