Review: Tokenize (3)

4 minute read

  • property = 属性

  • frequency5000으로할경우 시간 14:25걸림.

  • pytorch 버전확인하고, torch 대응하는 cuda 버전 몇인지 확인하는방법.

  1. Ensure that at least PyTorch 1.4.0 is installed:
$ python -c "import torch; print(torch.__version__)"
>>> 1.8.0
  1. Find the CUDA version PyTorch was installed with:
$ python -c "import torch; print(torch.version.cuda)"
>>> 11.1
  • jupyter에서 file 입출력할때 주의: 셀 실행 후 바로 입출력 변화 안나타날땐 open(), write() 사용하고 close()했는지 확인한다.

  • f-string py3.6부터 나옴. 기존의 format()방식보다 빠르고 알아보기쉬움.


word2vec(1)

skip-gram model architecture 는 정확히 CBOW 모델과 반대의 작업을 수행한다. 타겟 단어가 지정된 소스 컨텍스트 단어를 예측. 일반적으로, input=feature, output=target=label. skip-gram은 반대. 즉, 모델은 타겟단어를 기반으로, 컨텍스트 윈도우 단어를 예측한다.

결론적으로 word2vec이란것은 CBOW, skip-gram포함하는 임베딩. 이 때, 임베딩이란 벡터로 표현하는것. 또한, 벡터란 숫자(수치)가 아닌것을 수치화 한것.

텍스트에서 추출한 skip-gram학습데이터셋을 가지고, 신경망 언어모델을 훈련한다. 이 언어모델은 이웃단어를 예측하는 모델이다.

  1. Revisiting the training process

2.Negative Sampling: output vocab에project 하는것은 비용,시간 엄청나게 많이듬.

해결방법중하나는, 타겟을 두개의 스텝으로나눈다.

  1. 고퀄리티 워드임베딩생성.(이때 다음단어예측은 상관하지않음)

  2. 고퀄리티 임베딩을 사용하여 언어모델을 훈련한다. (다음단어 예측을 한다)

스텝1에 주목. 모델의 태스크를 인접단어예측에서 인풋아웃풋 단어 받은후 이웃인지아닌지(0, 1) 알려주는 스코어(0, 1)를 출력으로 스위칭한다. 이렇게함으로써 신경망 기반 모델에서 로지스틱 회귀 모델로 변하게된다. 그래서 더빨라짐. 다만 이때 데이터셋의 구조를 바꿔야함.( 타겟 컬럼을 추가. (0,1값중하나) 근데 타겟 컬럼값이 모두 1이라면 가비지 임베딩을 생성하게됨.

  • word2vec(2): 가비지 임베딩을 생성되는 것을 방지하기 위해 아웃풋 단어에 이웃이 아닌 랜덤하게 뽑은 것들을 추가해준다.

  • word vector = word embedding. e.g. word embedding for the word “king”: [ 0.50451 , 0.68607 , .. , -0.59517 ]

  • word vector 더하고빼기: 파이썬 gensim


  • ESPF: For example, it identifies contributing factors in the interaction between Sildenafil and Isosorbide Mononitrate. = espf저자들이 말한 경로제공의 의미. 다시말해 비아그라와 iso..라는것을 같이쓰면 죽음 이란것을 두개 간의 기여 요소를 식별함 으로써 알수있다.

moltrans 저자 = espf 저자. espf: 해석가능한 하부구조 파티션 지문. 그것은 인풋을 적절한 사이즈의 조각으로 나누고, 그 파티션된 하부구조의 신호를 예측 결과물로 추적하는 경로를 제공한다.

espf동작원리는 spe랑 완벽하게 일치한다(openNMT-py기반이다). smiles등을 입력으로받고 출력을 서브시퀀스 어휘세트 및 빈도수로 한다. 이렇게 “tokenize”한걸가지고 새로운 시퀀스를 분해할수잇음.

espf저자들은 경험적으로 그것이 적절한 크기의 하부구조 (정렬된 파티션)을 출력한다는것을 알아냈다.


Expert-curated fingerprints such as PubChem (Boltonet al.(2008)), MACCS (Cereto-Massaguéet al.(2015)) for drugs and amino acid composition (Caoet al.(2013)) for proteinrepresent each sub-structure with a bit of a bit vector. However, the output vector usually assigns numerous granular sub-structures (~100 for PubChem) to even a small molecule,where many sub-structures are a subset of other ones, making it intractable to know which specific sub-structures lead to the outcome. 어떤 하부구조가 다른 어떤 분자의 하부구조에 해당한다고 하여도 그 하부구조는 높은확률로 다른 분자의 하부구조에 해당하기때문에 어떤 특정한 하부구조가 그 분자의 지문을 결과로서 나타내게 만든건지 알기 어렵다.


  • dataset: bindingdb or chembl? 전자: csv (smiles외에도다른것) 후자 txt(매 라인마다 smiles) 다른것없음)

  • 어차피 pandas.read_csv()하면 상관없이 리딩 가능하다.

  • 나는 전체 moltrans 필요없음. fcs만 필요.

  • moltrans example.ipynb에서 한세대당 teration 0-700인데 내가하면 0-3100까지. 이유가 뭔지 알 수 없다. config.py의 batch size바꾼것 때문일 수도 있다.

    • cuda out 에러 - (config에서) batch size 16 -> 4 참고
  • torch.autograd.variable은 PyTorch 0.4.0에서 Tensors와 Variables가 합쳐짐. MolTrans에서 아직 Variables 쓰니까 이걸 Tensor로 바꾸자.

  • 예: Variable(...) 모양에서 Variable과 ()를 제거한다.

  • cuda memory error시 참고, release RAM방법임.

Updated: