Closed LeeJeongHwi closed 1 week ago
@LeeJeongHwi 정휘님, 남겨주신 이슈에서 수정할 사항을 명확히 하고자 두가지 질문드립니다.
embedding_method
를 입력하면, 알아서 이 종류에 맞는 vectorizer path를 불러오도록 구성되어 있었습니다.
"embedding_method"=="tfidf"
../model/tfidf_sparse_embedding.bin
../model/tfidf.bin
"embedding_method"=="bm25"
../model/bm25.bin
ODQA/modules/sparseRetrieval.py
코드 중 어느 부분에서 vectorizer_path가 필요한건지 궁금합니다. # retrieval/sparse/src/sparse_retrieval.py
# 기존 vectorizer 로딩 코드 (예: TF-IDF; BM25도 유사한 방식으로 구성되어 있음)
def get_sparse_embedding_tfidf(self) -> NoReturn:
pickle_name = f"{self.embedding_method}_sparse_embedding.bin"
vectorizer_name = f"{self.embedding_method}.bin"
emb_path = os.path.join("../model", pickle_name)
vectorizer_path = os.path.join("../model", vectorizer_name)
if os.path.isfile(vectorizer_path) and os.path.isfile(emb_path):
logger.info("Loading TF-IDF pickle files.")
with open(vectorizer_path, "rb") as file:
self.tfidfv = pickle.load(file)
with open(emb_path, "rb") as file:
self.p_embedding = pickle.load(file)
{
"corpus_data_path": "/data/ephemeral/home/datasets/v0.0.1/wikipedia_documents.json",
"vectorizer_path": "/data/ephemeral/home/minji/retrieval/sparse/model/bm25.bin",
"embedding_method": "bm25",
"topk": 10,
"tokenizer_model_name": "klue/bert-base",
"eval_data_path": "/data/ephemeral/home/datasets/v0.0.1/train_dataset",
"eval_metric": ["hit", "mrr"]
}
@minjijeong98 남겨주신 질문에 대해서 답변 드리겠습니다.
답변1. config에서 경로를 직접 받아오는 편이 좋을 것 같습니다.
현재 inference 코드는 ODQA 폴더 내에 있는 inference.py 코드를 실행시키기때문에 ../
상대 경로를 사용할 시 inference.py가 있는 폴더를 기준으로 불러오게 됩니다. 그래서 질문에서 말씀하신대로 config에 있는 경로로 바로 받을 수 있도록 하는게 좋을 것 같습니다.
맨 아래 config 예시의 vectorizer_path에서 bm25.bin
부분만 제외하면 될 것 같습니다.
ex) vectorizer_path = os.path.join(args.vectorizer_path, vectorizer_name)
답변2. 현재 아직 PR을 올리지 않은 상태라 github에선 볼 수 없지만, 알고리즘은 다음과 같습니다.
sparseRetrieval.py
에서 선택된 method를 기반으로 SparseRetrieval
class에 대한 객체 생성SparseRetrieval.get_sparse_embedding_{method}
함수 실행SparseRetrieval.retrieve()
함수를 사용하여 dataframe을 받아옴이 과정에서 2번에 해당하는 부분에 vectorizer_path
가 필요합니다.
아하 상대경로로 되어 있어서 호출이 잘 안되는 문제를 말씀하신거군요~ 이해했습니다. 절대경로라고 적혀있어서 헷갈렸네요. 그 부분 수정한 뒤에 댓글 남기겠습니다
@LeeJeongHwi 정휘님 PR 남겼으니 확인 부탁드려요:)
Describe the bug
SparseRetrieval Class 내에
vectorizer_path
가 절대 경로로 설정되어 있어 inference 과정에서 vectorizer를 불러오기가 어려움inference과정에서 사용되는
ODQA/modules/sparseRetrieval.py
Possible Solution
vectorizer_path
추가하여 config에 맞는 vectorizer를 불러올 수 있도록 설정