KaggleBreak / databreak-blog

DataBreak Official Blog
https://databreak.netlify.com/
MIT License
3 stars 0 forks source link

Towards Data Science - Deep learning for specific information extraction from unstructured texts 포스트 번역 #2

Closed Chogyuwon closed 5 years ago

Chogyuwon commented 5 years ago

Title & Topic

Deep learning for specific information extraction from unstructured texts

Upload schedule

시작 : 2019.04.15 업로드 계획 : 2019.04.26

Reference

https://towardsdatascience.com/deep-learning-for-specific-information-extraction-from-unstructured-texts-12c5b9dceada

Chogyuwon commented 5 years ago

기존에 번역진행하려고 했던 포스트의 내용이 너무 부실하여 변경했습니다.

choco9966 commented 5 years ago

이 글은 다양한 자연어 처리 및 자연어 이해 문제를 풀기 위해 기계 학습 및 딥러닝 기술의 적용 사례를 다루는 우리회사의 iki 프로젝트와 관련있는 일련의 기술 게시물 중 첫 번째 기사입니다. -> 여기에서 이상하게 iki 부분 링크가 안걸린 것 같아요.

하지만 어떤 경우에 당신은 주 구체적이고 작은 데이터셋에 대해 학습된 모델이 필요합니다[2] -> 가 뭔가 이상한거 같아요.

그 이유는 종종 이력서의 텍스트가 경험을 강조하고 어떤 구조를 부여하기 위해 문법을 무시하기 때문입니다 (주어가 아닌 술어로 문장을 시작하거나 때로는 적절한 문법 구조를 피하는 경우). -> 뒤에 .을 안찍고 )뒤에 .을 찍으셨는데 제가 알기로는 다. 하고 ) 뒤에는 .을 안찍는거로 알고 있는데 한번 확인 부탁드려요.

--- 아래는 job korea 맞춤법 검사기 돌렸을 때, 나온 결과에요. http://www.jobkorea.co.kr/service/user/tool/spellcheck

또한 원문 포스트는 2018.07.21 에 작성되었던 점을 감안하고 봐주세요~!

이 글은 다양한 자연어 처리 및 자연어 이해 문제를 풀기 위해 기계 학습 및 딥러닝 기술의 적용 사례를 다루는 우리회사의 iki 프로젝트와 관련있는 일련의 기술 게시물 중 첫 번째 기사입니다.

-> 이 글은 다양한 자연어 처리 및 자연어 이해 문제를 풀기 위해 기계 학습 및 딥러닝 기술의 적용 사례를 다루는 우리 회사의 iki 프로젝트와 관련 있는 일련의 기술 게시물 중 첫 번째 기사입니다.

심지어 사용자들이 이력서에 ‘양적 거래 알고리즘을 포로덕션 서버에 배포 ’ 와 같은 임의의 방식으로 작성한 경우에도 적용할 수 있도록 해야했습니다.

-> 심지어 사용자들이 이력서에 ‘양적 거래 알고리즘을 프로덕션 서버에 배포’와 같은 임의의 방식으로 작성한 때도 적용할 수 있도록 해야 했습니다. ('부분, 해야했습니다 띄어쓰기랑 포로덕션이 프로덕션 오타난것 같아서 수정하였습니다. 경우라는 표현은 일본식 표현이라 사용하지 않는다는데, 이건 규원님 편하신대로 하셔도 될 것 같아요)

이 포스트는 데모 페이지 가 있습니다. 우리의 모델의 성능을 당신의 이력서를 통해 확인해보세요. -> 이 포스트는 데모 페이지가 있습니다. 우리의 모델의 성능을 당신의 이력서를 통해 확인해보세요. (띄어쓰기)

이 모델은 일반적인 언어 구조에 대해서는 거의 지식을 갖고 있지 않으며 특수한 텍스트 feature 로만 동작합니다. -> 이 모델은 일반적인 언어 구조에 대해서는 거의 지식을 갖고 있지 않으며 특수한 텍스트 feature로만 동작합니다. (띄어쓰기)

Naive Sentiment Analysis tool 은 ‘좋음’, ‘나쁨’ 의 형용사 동의어와 문서 내의 일부 단어의 존재를 강조하는 경우에만 작동할 수 있습니다. -> Naive Sentiment Analysis tool은 ‘좋음’, ‘나쁨’의 형용사 동의어와 문서 내의 일부 단어의 존재를 강조하는 경우에만 작동할 수 있습니다. (띄어쓰기 tool은, '의 )

일반적으로 텍스트 코퍼스를 분석할 때 우리는 각 텍스트의 전체 어휘를 보고 있습니다. ~과 같은 텍스트를 벡터화 하는데 인기 있는 방법들은 벡터를 생성하기 위해 Stopwords 를 제외한 전체 문서의 어휘를 사용합니다. -> 일반적으로 텍스트 코퍼스를 분석할 때 우리는 각 텍스트의 전체 어휘를 보고 있습니다. ~과 같은 텍스트를 벡터화하는데 인기 있는 방법들은 벡터를 생성하기 위해 Stopwords를 제외한 전체 문서의 어휘를 사용합니다. (띄어쓰기)

추출 된 ‘전문기술’의 벡터와 연관시켜 각 이력서를 벡터화 할 수 있다면 훨씬 더 성공적인 산업 포지션 클러스터링을 수행할 수 있습니다. -> 추출된 ‘전문기술’의 벡터와 연관시켜 각 이력서를 벡터화할 수 있다면 훨씬 더 성공적인 산업 포지션 클러스터링을 수행할 수 있습니다. (띄어쓰기)

개체(Entity) 추출 작업은 텍스트 마이닝의 클래스 문제의 일부로 구조화되지 않은 비정형의 텍스트에서 일부 구조화 된 정보를 추출하는 작업입니다. 기존에 제안됐던 개체 추출 방법을 자세히 살펴보겠습니다. 이력서에서의 ‘전문기술’이 소위 명상구에 주로 존재하는한 이 ‘전문기술’을 추출하는 과정의 첫 번째 단계는 개체 인식을 하는 것입니다. 우리는 이를 위해 NLTK 라이브러리의 내장 메소드를 사용했습니다 (자세한 사항은 NLTK book, part7 - Extracting Information from Text 부분을 살펴보세요). 품사 태깅 방법은 명사구(Noun Phrases, NP) 를 추출하고 명사구와 문장의 다른 부분들 사이의 관계를 나타내는 트리를 만듭니다. NLTK 라이브러리에는 이러한 구문 분해를 수행하는 많은 툴들이 있습니다.

-> 개체(Entity) 추출 작업은 텍스트 마이닝의 클래스 문제의 일부로 구조화되지 않은 비정형의 텍스트에서 일부 구조화된{띄어쓰기} 정보를 추출하는 작업입니다. 기존에 제안됐던 개체 추출 방법을 자세히 살펴보겠습니다. 이력서에서의 ‘전문기술’이 소위 명사구에(?) 주로 존재하는 한 이 ‘전문기술’을 추출하는 과정의 첫 번째 단계는 개체 인식을 하는 것입니다. 우리는 이를 위해 NLTK 라이브러리의 내장 메소드를 사용했습니다 (자세한 사항은 NLTK book, part7 - Extracting Information from Text 부분을 살펴보세요). 품사 태깅 방법은 명사구(Noun Phrases, NP)를**{띄어쓰기} 추출하고 명사구와 문장의 다른 부분들 사이의 관계를 나타내는 트리를 만듭니다. NLTK 라이브러리에는 이러한 구문 분해를 수행하는 많은 툴들이 있습니다.

이 단계에서는 우리가 추출하고자 하는 대상인 ‘전문기술’과 더불어 다수의 대상이 아닌 일반적인 개체들 (장소, 사람, 물건, 조직 등) 이 포함될 수 있습니다. -> 이 단계에서는 우리가 추출하고자 하는 대상인 ‘전문기술’과 더불어 다수의 대상이 아닌 일반적인 개체들 (장소, 사람, 물건, 조직 등)이 포함될 수 있습니다.{띄어쓰기}

우리는 모델을 하드코딩된 ‘전문기술’들 세트에 맞추려고 시도하지 않았습니다. 우리 모델의 핵심 아이디어는 영어 이력서에서 ‘전문기술’의 의미를 배우고 보이지 않는 ‘전문기술’들을 추출하기 위해 모델을 사용하는 것입니다. -> 우리는 모델을 하드 코딩된 ‘전문기술’들 세트에 맞추려고 시도하지 않았습니다. 우리 모델의 핵심 아이디어는 영어 이력서에서 ‘전문기술’의 의미를 배우고 보이지 않는 ‘전문기술’들을 추출하기 위해 모델을 사용하는 것입니다.

‘전문기술’을 의미하는 단어는 숫자 또는 기타 특수 단어를 포함하는 경우가 많고, 첫 문자만 대문자이거나 전체 문자가 대문자로 쓰여진 경우가 있기 때문에 이에 대한 정보를 주기 위해 binary feature 를 추가 했습니다. (예를 들어 C#, Python3, SQL) -> 전문기술’을 의미하는 단어는 숫자 또는 기타 특수 단어를 포함하는 경우가 많고, 첫 문자만 대문자이거나 전체 문자가 대문자로 쓰여진 경우가 있기 때문에 이에 대한 정보를 주기 위해 binary feature를 추가했습니다. (예를 들어 C#, Python3, SQL) (띄어쓰기 2군데 / feature를 / 추가했습니다)

또한 자주 쓰이는 영어 접두사 및 접미사의 존재 여부를 설명하는 다른 binary feature 를 사용한 것은 테스트 셋에서 성능을 77.3 % 까지 개선시켰습니다. 추가적으로 품사 태깅에 대한 원-핫 벡터 인코딩을 모델의 feature 셋에 추가한 것은 우리의 결과를 84.6% 까지 빠르게 끌어올렸습니다. -> 또한, 자주 쓰이는 영어 접두사 및 접미사의 존재 여부를 설명하는 다른 binary feature를 사용한 것은 테스트 셋에서 성능을 77.3 % 까지 개선했습니다. 추가적으로 품사 태깅에 대한 원-핫 벡터 인코딩을 모델의 feature 셋에 추가한 것은 우리의 결과를 84.6%까지 빠르게 끌어올렸습니다. (또한에서 ,부분하고 개선시켰습니다라는 표현 말고는 전부 띄어쓰기 문제입니다.)

우리는 50 차원의 GloVe 모델 벡터를 사용하여 모델의 성능을 테스트셋에서 최대 89.1%의 정확도를 달성할 수 있었습니다. -> 우리는 50차원의 GloVe 모델 벡터를 사용하여 모델의 성능을 테스트셋에서 최대 89.1%의 정확도를 달성할 수 있었습니다. (띄어쓰기)

그리고 이력서에 사용되는 단어는 전문 용어이거나 이름인 경우가 많습니다. 때문에 앞서 말한 문제들을 해결하기 위해 우리는 자체 품사 태거를 만들어야 했습니다. -> 그리고 이력서에 사용되는 단어는 전문 용어이거나 이름인 경우가 많습니다. 그 때문에 앞서 말한 문제들을 해결하기 위해 우리는 자체 품사 태거를 만들어야 했습니다.

두 번째 입력 레이어에서는 가변 길이 벡터는 컨텍스트 구조 정보를 가져옵니다. 주어진 윈도우 사이즈 n 에 대해서 우리는 후보 구문의 오른쪽에 n 개의 이웃한 단어를 가져오고, 이들 단어의 벡터 표현은 가변 길이 벡터로 연결 되어 LSTM 레이어로 전달됩니다. 우리는 최적의 n = 3 이라는 것을 발견했습니다. -> 두 번째 입력 레이어에서는 가변 길이 벡터는 컨텍스트 구조 정보를 가져옵니다. 주어진 윈도우 사이즈 n 에(띄어쓰기) 대해서 우리는 후보 구문의 오른쪽에 n 개의 이웃한 단어를 가져오고, 이들 단어의 벡터 표현은 가변 길이 벡터로 연결되어(띄어쓰기) LSTM 레이어로 전달됩니다. 우리는 최적의 n = 3이라는 것을(띄어쓰기) 발견했습니다.

세 번째 입력 레이어는 고정 된 길이를 가지며 후보 구민 및 그 문맥에 대한 일반적인 정보를 벡터로 처리합니다. 좀 더 자세히 설명하면, 세 번째 입력 레이어에서 처리하는 정보는 단어 벡터들의 좌표상의 최대값과 최소 값들입니다. 이 값들은 다른 정보들 사이에서 전체 구문에서 많은 binary feature 들이 사용되었는지 아닌지를 나타내는 값들입니다. -> 세 번째 입력 레이어는 고정된 (띄어쓰기)길이를 가지며 후보 구민 및 그 문맥에 대한 일반적인 정보를 벡터로 처리합니다. 좀 더 자세히 설명하면, 세 번째 입력 레이어에서 처리하는 정보는 단어 벡터들의 좌표상의 최댓값과 최솟값들입니다. (띄어쓰기, 최댓값) 이 값들은 다른 정보들 사이에서 전체 구문에서 많은 binary feature 들이 사용되었는지 아닌지를 나타내는 값들입니다.

우리는 이 모델 아키텍쳐를 SkillsExtractor 라고 부르기로 했습니다. 아래를 보세요. -> 우리는 이 모델 아키텍처를 SkillsExtractor 라고 부르기로 했습니다. 아래를 보세요.

해당 아키텍쳐의 Keras 를 이용한 구현한 코드는 아래와 같습니다. -> 해당 아키텍처의(쳐->처) Keras를(띄어쓰기) 이용한 구현한 코드는 아래와 같습니다.

모델 훈련의 결과 중 최상의 결과는 Adam 옵티마이저를 사용, learning rate 를 0.0001 까지 낮춤을 통해서 얻을 수 있었습니다. 우리는 모델이 두 개의 클래스로 분류하도록 설계 했기 때문에 손실함수는 binary crossentropy 함수를 사용했습니다. -> 모델 훈련의 결과 중 최상의 결과는 Adam 옵티마이저를 사용, learning rate를(띄어쓰기) 0.0001까지(띄어쓰기) 낮춤을 통해서 얻을 수 있었습니다. 우리는 모델이 두 개의 클래스로 분류하도록 설계했기(띄어쓰기) 때문에 손실함수는 binary cross entropy(띄어쓰기) 함수를 사용했습니다.

또한 후보 구문의 feature 벡터에 대한 예측을 형성하면서 동시에 편리함을 위해 교차 검증 및 예측 기능을 사용하여 신경망의 훈련과 자동 정지를 수행하는 적합한 방법을 추가했습니다. -> 또한, 후보(콤마) 구문의 feature 벡터에 대한 예측을 형성하면서 동시에 편리함을 위해 교차 검증 및 예측 기능을 사용하여 신경망의 훈련과 자동 정지를 수행하는 적합한 방법을 추가했습니다.

pad_sequence 함수는 feature 시퀀스 리스트를 리스트 내에서 가장 긴 시퀀스와 같은 너비의 2d array 로 변환해줍니다.

-> pad_sequence 함수는 feature 시퀀스 리스트를 리스트 내에서 가장 긴 시퀀스와 같은 너비의 2d array로(띄어쓰기) 변환해줍니다.

따라서 임의이 길이의 벡터를 처리하는 RNN 은 여기에 편리하고 아주 자연스러운 해결책이 됩니다. 우리가 테스트 해본 결과 고정된 길이의 벡터와 다양한 길이의 벡터를 처리하기 위한 LSTM 레이어를 처리하기 위해 Dense 레이어를 사용하는 것이 최적임을 입증할 수 있었습니다. -> 따라서 임의의(오타) 길이의 벡터를 처리하는 RNN 은 여기에 편리하고 아주 자연스러운 해결책이 됩니다. 우리가 테스트해본(띄어쓰기) 결과 고정된 길이의 벡터와 다양한 길이의 벡터를 처리하기 위한 LSTM 레이어를 처리하기 위해 Dense 레이어를 사용하는 것이 최적임을 입증할 수 있었습니다.

LSTM 과 dense 의 다양한 조합으로 여러가지 아키텍쳐를 실험해보았습니다. 최종 아키텍처 구성 (레이어의 크기와 수) 은 학습 데이터의 최적 사용에 해당하는 cross-validation 테스트에서 최상의 결과를 보여줬습니다. 모델의 튜닝은 학습 데이터셋의 크기를 증가시키는 것과 함께 레이어의 크기와 숫자를 적절히 조정하는 것을 통해 수행할 수 있으며, 동일한 데이터셋으로 레이터 크기와 숫자를 조정하는 것은 모델의 오버피팅으로 이어질 수 있습니다. -> LSTM 과 dense의(띄어쓰기) 다양한 조합으로 여러 가지(띄어쓰기) 아키텍처(오타)를 실험해보았습니다. 최종 아키텍처 구성 (레이어의 크기와 수) 은 학습 데이터의 최적 사용에 해당하는 cross-validation 테스트에서 최상의 결과를 보여줬습니다. 모델의 튜닝은 학습 데이터셋의 크기를 증가시키는 것과 함께 레이어의 크기와 숫자를 적절히 조정하는 것을 통해 수행할 수 있으며, 동일한 데이터셋으로 레이어(오타) 크기와 숫자를 조정하는 것은 모델의 오버피팅으로 이어질 수 있습니다.

Chogyuwon commented 5 years ago

현우님 제가 띄어쓰기나 문법실수가 너무 많았네요... 급하게 하느라 맞춤법 검사를 전혀 안돌려서 그랬던 것 같습니다. 일부 띄어쓰기는 의도한 부분이 있기도 해서 그 부분 빼고 말씀해주신 부분들 반영 전부해서 수정했습니다. 감사합니다.

이슈 close 하겠습니다.