작성
·
167
0
1.for _ in range(4):
if random.random() < 0.5 or i >= len(text) - 3:
rand_id = random.randint(0, i-1)
else:
rand_id = random.randint(i+3, len(text)-1)
data.append((text[i], text[rand_id], 0))
1. range(4)를준 이유가 궁굼합니다.
2. 상위 코드 0.5 or i >=len(text) -3 조건을 이렇게 설정한 이유가 궁굼합니다.
3. 괜찮으시다면 혹시 상위 코드조금 자세하게 설명해주실수 있나요 ?
답변 1
0
안녕하세요, Justin입니다.
1. context_size가 2이기 때문입니다.
skipgram 시 중심 단어로부터 2칸 내 단어들과 비교하기 위해 range(4)로 설정하였습니다.
2. skipgram 시 주변 단어 중 일부를 무작위로 추출하여 데이터를 구성하기 때문에,
이를 구현하기 위해서 해당 코드로 설정하였습니다. 이외 다른 방법으로도 무작위 추출 성격만 띈다면 코드는 변경 가능합니다.
3. random.random을 통해 0~1 사이 실수를 추출하여 이가 0.5 미만이거나
전체 단어 길이 - 3 값이 현재 i 값보다 큰 경우 rand_id 즉 주변 단어 중 일부를 지칭하는 인덱스 값을 0과 i-1 값중 1개의 정수로 표현하여 인덱스를 지정하고, 다른 경우는 i+3과 전체 단어 길이에서 1값을 뺀 값 사이의 정수로 표현하여 인덱스를 지정합니다. word2vec skipgram 방식의 원리를 이해하시면 코드 이해에 도움이 될 것 같습니다.
추천영상 : https://www.youtube.com/watch?v=sY4YyacSsLc
감사합니다.