Bert Examples

Posted 2021. 4. 30. 08:55

1) huggingface bert를 많이 사용

huggingface.co/transformers/notebooks.html

 

🤗 Transformers Notebooks

You can find here a list of the official notebooks provided by Hugging Face. Also, we would like to list here interesting content created by the community. I...

huggingface.co

2) best practice: bert를 classification에 사용

colab.research.google.com/github/huggingface/notebooks/blob/master/examples/text_classification.ipynb

 

Text classification on GLUE

Run, share, and edit Python notebooks

colab.research.google.com

- 여러 class로 분류
- 일정량의 학습 데이터가 있으면
- 미리 학습된 bert model에 해당 분류기를 학습시켜서 사용

 

3) bert + kmeans

- 입력을 bert로 embedding 해서 사용

- 두가지 예 모두 Sentence-BERT 사용

 

영어 예

theaidigest.in/how-to-cluster-text-documents-using-bert/

 

How to cluster text documents using BERT - theaidigest.in

Cluster text documents using BERT embeddings and Kmeans. See how you can apply the K-means algorithm on the embedding to cluster documents.

theaidigest.in

한국어 예

github.com/BM-K/KoSentenceBERT#clustering

Write your message and submit

symbolic link가 깨져 있는 경우에는 다음과 같이 확인하면 됨



BROKEN_LINK=$(find /path/to -type l -xtype l | wc -l)


if [ $BROKEN_LINK -gt 0 ]; then


    echo -e "CHECK BROKEN_LINK:\t$/path/to"


    error


fi


ref : https://www.commandlinefu.com/commands/view/8260/find-broken-symlinks

Write your message and submit

프로젝트 중 알게된 edit distance 비교 방법이 있어서 정리해본다.

(사실 매번 Damerau–Levenshtein distance만 사용했었다...)



jaro similarity(jaro distance)


jaro distance는 두 단어간의 transpositions에 집중한 알고리즘이다.

(insertion, deletion, substitution은 고려하지 않음)


transposition은 간단히 위치 교환이라고 생각하면 된다.


아래와 같이 두 단어가 있을 때, transpositions은 총 2회 발생한다.

(a=> b, b => a)


word1  : a ---- b

word2 : b ---- a



jaro distance는 두 단어가 비슷할수록 1에 가까운 값을 가지고, 다를수록 0에 가까운 값을 가진다.

(두 단어가 같으면 1, 다르면 0이다)




s1, s2는 각 문자열을 의미하고

|s1|은 s1의 길이를 의미하고

m은 match된 문자 개수를 의미하고

t는 transposition이 필요한 개수의 절반을 의미한다.


ex)

CRATE, TRACE


s1의 길이는 5

s2의 길이는 5

m의 개수는 3

t는 transposition이 2번 필요한데, 그 절반이니 2/2 = 1


1/3 * ( 5/5 + 5/5 + (3-1)/3) = 0.62


추가로 matching이라고 판단하는 범위는 같은 위치이거나 혹은 아래 범위내에서만 매칭이라고 본다.

(아무래도 너무 멀리 있으면 안되서... 그런 것 같다)


jaro-winkler similarity(jaro-winkler distance)

jaro-winkler의 경우는 prefix matching에 대한 가중치를 추가한 것으로


이렇게 생겼다.

simj는 jaro distance를 의미하고
l은 prefix lengnth(최대 4)
p는 scaling factor인데 0.1이 기본값이고, 0.25가 최대값이다(0.25를 넘게 주면 similarity가 1을 넘을 수 있다).

distance를 구할 때는 dw = 1 - simw 이다.


참고

wiki : https://en.wikipedia.org/wiki/Jaro–Winkler_distance


잘 정리해놓은 블로그(한글) : http://qtqtlanakim.tistory.com/11


apache common code : http://commons.apache.org/proper/commons-text/jacoco/org.apache.commons.text.similarity/JaroWinklerDistance.java.html

Write your message and submit

noisy channel model and spell correction

Posted 2018. 5. 8. 11:30

잠깐 보고 정리해봅니다...

(기억력의 한계를 극복해보고자...)


ref : https://web.stanford.edu/~jurafsky/slp3/5.pdf

일단 noisy channel model은 "original word가 noisy channel에 의해 noisy word(distorted 됐다고 표현)가 되고, 이를 decoder를 통해 original word와 가장 비슷한 것을 추측"하는 모델인데...


스펠러와 연결지어 생각해보면...


1) misspelled word : noisy word(noisy channel을 통해 distorted된 word)

2) noise는 substitutions or other changes to the letters(original word에서 distorted된 상태가 된 원인)

3) channel은 correct word를 찾아내는 model로 보면 됨


호옥시, 잘못된 내용이면 알려주세요.

적극 수정하겠습니다!

Write your message and submit

git untrackedfiles off

Posted 2018. 2. 22. 10:03

git config --global status.showUntrackedFiles no

Write your message and submit

이차원 배열 포인터

Posted 2017. 1. 25. 10:45

이차원 배열 포인터를 지정해서 사용하는 방법


이렇게 하면, main에 선언된 *input의 포인터 사이즈가 MAX_EOJ_SIZE로 할당된다.

main에서는 input[x][y] 형식으로 사용할 수 있다.



#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define MAX_EOJ_COUNT 16

#define MAX_EOJ_SIZE 64



typedef struct data {

        char input[MAX_EOJ_COUNT][MAX_EOJ_SIZE];

} data_t;



int main() {

    data_t *data = malloc(sizeof(data_t));

    char (*input)[MAX_EOJ_SIZE] = data->input;

    int i;


    strcpy(input[0], "abc");

    strcpy(input[1], "def");


    for(i = 0; i < 2; i++) {

        printf("input[%d] : %s\n", i, input[i]);


    }


return 0;

}


참고 gdb로 확인


gdb) p &data->input

$5 = (char (*)[16][64]) 0x601010

(gdb) n

19    strcpy(input[0], "abc");

(gdb) p input

$6 = (char (*)[64]) 0x601010

(gdb) p &data->input[1]

$7 = (char (*)[64]) 0x601050

(gdb) p input[1]

$8 = '\000' <repeats 63 times>

(gdb) p &input[1]

$9 = (char (*)[64]) 0x601050

(gdb) q

'Computer > C' 카테고리의 다른 글

이차원 배열 포인터  (0) 2017.01.25
Write your message and submit

Perplexity in LM

Posted 2017. 1. 16. 18:15


뭔가 아는데, 설명을 못하는 상황이라서 개념 정리한 내용입니다.

지금 필요한 내용이 LM의 perplexity를 어떻게 계산할 것인지에 대한 내용이라 LM perplexity를 계산하는 관점에서 정리했습니다.


Perplexity란?

Perplexity

  • 수식

  • 설명

    • b : 보통 2를 사용(왜 2를 보통으로 사용하는지는 모르겠으나, 왠지 엔트로피를 구할 때 bits로 표현 가능한 정보량을 설명하는 것과 연관이 있을 것 같음)

    • N : 전체 test event 개수

    • q : 확률 모델, LM에서는 LM으로 구하는 확률을 의미

    • x : test event

  • 의미
    • q모델에서 test event를 표현하기 위해 필요한 평균 비트 수를 나타냄
  • 기타
    • cross entropy를 이용해서 구할 수도 있음
      • cross entropy는 두 확률 모델간의 entropy를 나타낸다고 볼 수 있음
      • 수식
      • 설명

        • H  : cross entropy

        • ~p : n / N (n은 x가 나타난 횟수를 의미)

        • q  : 확률 모델 

LM에 대한 Perplexity

    확률 모델을 LM에 맞춰 변경하면 됨

  • 설명

    • w1 ... wN : N-gram

    • H()       : entropy 계산

    • m()       : 확률 모델

참고


Write your message and submit

CNN case study

Posted 2016. 6. 14. 06:48

강의 : https://youtu.be/KbNbWTnlYXs


이번 스터디는 CNN에 대한 연구 사례이다.

각각의 방법들이 어떻게 network을 구성하는지를 알 수 있다.


사실, layer 구성이 왜 이렇게 하는지 잘 이해되지 않는다.

아래 유명한 분들이 어떤 network를 제안했는지가 있는데, 시간이 된다면 하나하나 봐야 겠다.


LeNet-5 [LeCun et al., 1998]


AlexNet [krizhevsky et al., 2012]


GoogLeNet [Szegedy et al., 2014]


ResNet [He et al., 2015]

=> 3.6 % top 5 error


Convolutional Neural Networks for Sentence Classification [Yoon kim, 2014]

: 내가 공부할 부분이다.


DeepMind's AlphaGo

'Computer > DeepLearning' 카테고리의 다른 글

CNN case study  (0) 2016.06.14
CNN : Max pooling 과 Full Network  (0) 2016.06.14
ConvNet의 Conv 레이어 만들기  (0) 2016.06.14
레고처럼 넷트웍 모듈을 마음껏 쌓아 보자  (0) 2016.06.09
Dropout & Ensemble  (0) 2016.06.09
Write your message and submit

CNN : Max pooling 과 Full Network

Posted 2016. 6. 14. 06:41

강의 : https://youtu.be/2-75C-yZaoA


pooling : sampling이라고 보면 된다. 그 sampling을 통해 추출된 데이터를 층층히 쌓아 사용한다.


max pooling은 각 filter size에서 가장 큰 값을 사용하는 것이다.


1 1 2 4

5 6 7 8

3 2 1 0

1 2 3 4


2 x 2 filters and stride 2 일때의 max polling 값


6 8

3 4


Fully Connected Layer(FC Layer) : (CONV RELU POOL) + ... 이런 layer를 연달아 연결한 형태로 볼 수 있다. <= 맞게 이해한 것인가?;;;


http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

여기를 보면 각각의 layer가 어떻게 작동하는지 이해할 수 있다고 한다.(나는 잘 모르겠다.)

'Computer > DeepLearning' 카테고리의 다른 글

CNN case study  (0) 2016.06.14
CNN : Max pooling 과 Full Network  (0) 2016.06.14
ConvNet의 Conv 레이어 만들기  (0) 2016.06.14
레고처럼 넷트웍 모듈을 마음껏 쌓아 보자  (0) 2016.06.09
Dropout & Ensemble  (0) 2016.06.09
Write your message and submit

ConvNet의 Conv 레이어 만들기

Posted 2016. 6. 14. 06:33

뒤로 갈수록 이해하기 어려워진다.

오늘 공부한 내용은 Convolutional Nerual Network에 대한 내용이다.


강의는 https://youtu.be/Em63mknbtWo 를 참고.


CNN은 고양이를 통한 실험에서 시작되었다고 한다.

고양이에게 이미지를 보여주고, 뉴런이 활성화되는 부분을 관찰하니, 이미지의 부분 부분 마다 활성화되는 곳이 달랐다는 것이다.(Hubel & Wiesel, 1959)


전체적인 그림은 하나의 이미지를 잘라서 아래처럼 구성하는 것이다.

CONV RELU CONV LERU POLL CONV RELU ... FC(fully connected nerual network) 


32 X 32 X 3의 이미지가 있다면, 이미지의 일부분만 처리하는데(filter)

이런 filter를 사용해서 하나의 숫자(one number)로 만든다. =wx + b를 사용해서(=ReLU(Wx + b)

ex) filter size : 5 X 5 X 3,  w1x1 + w2x2 + w3x3 + ... + w25x25 + b


이렇게 필터를 통해 하나의 숫자로 만드는 과정을 이미지에서 stride size에 따라 추출한다.

stride size = 1이라는 것은 N X N 사이즈에서 1씩 shift한다는 의미이다.


7 X 7 이미지에서 3 X 3 filter, stride 2로 뽑는다면 3 X 3이 나온다.


즉, (N -F ) / stride + 1


실제로 사용할 때는 0 padding을 써서 사방에 0을 추가한 뒤 같은 size를 얻도록 하여 사용한다.

=> filter 사용으로 이미지가 작아지는 것을 방지


이런 filter를 여러개 적용하는 것이 convolution layer가 되고, 이를 계산하면 activation maps(x, y, 6)이 이렇게 계산된다.


(CONV + RELU) + (CONV + RELU) + (CONV + RELU) + ...


이런 형태가 CNN이라고 한다.


* 이번 블로그는 주저리 주저리 적어놓은 글이되었다. 좀 더 내용을 이해한다면 수정해야겠다.

* 그리고, 글로만 설명하기에는 부족함을 느낀다. 그림을 그려야 하나 싶다.

'Computer > DeepLearning' 카테고리의 다른 글

CNN case study  (0) 2016.06.14
CNN : Max pooling 과 Full Network  (0) 2016.06.14
ConvNet의 Conv 레이어 만들기  (0) 2016.06.14
레고처럼 넷트웍 모듈을 마음껏 쌓아 보자  (0) 2016.06.09
Dropout & Ensemble  (0) 2016.06.09
Write your message and submit
« PREV : 1 : 2 : 3 : 4 : ··· : 7 : NEXT »