- 9
- 이니스프리
- 조회 수 408
안녕하세요?
크롤링한 어절 또는 문장의 유사성을 구하는 알고리즘에 대해 질문 드립니다.
예컨대 다음과 같은 두 개의 문장이 있다고 한다면
1. 내 문장은 어디서부터 고쳐야 할까?
2. 오해의 여지가 있는지 생각해보고 그 문을 하나하나 차단하여 단 하나의 의미를 갖게 하는 것. 그것이 비로 좋은 문장을 쓰는 궁극의 비법입니다
인간의 사고과정을 통해 두 개의 문장은 유사성이 있다고 볼 수 있겠죠.
반면 다음 문장은 1.과 유사성 내지 연관성이 상대적으로 적다고 볼 수 있겠죠.
2-1. 해커스 텝스 최신기출유형 실전모의고사를 구매해야 합니다.
그런데 이러한 알고리즘을 파이썬 등으로 어떻게 구현하는지에 대해서는 제가 초보라서 감이 잡히지 않네요 ㅠㅠ
이 문제를 해결하기 위하여 구글링하니 레벤슈타인 거리, N-gram 등이 검색되더군요.
일단 위 사이트의 스크립트를 활용하여 값의 대소를 비교하면 어느 정도 답을 구할 수 있었습니다.
제 짧은 생각으로는 아마도 N-gram을 이용하면 어느 정도 구현이 가능할 것 같기는 한데요.
제가 이 분야를 처음 접하는 것이라서 어떻게 접근하는 것이 최선인지 잘 모르겠는데요.
좋은 아이디어가 있으시다면 말씀해주시면 감사하겠습니다 ^^
그럼 즐거운 주말 되시고, 내일 더 추워진다는데 감기 조심하세요!
추천인 1
작성자
댓글 9
![profile image](/files/member_extra_info/profile_image/764/094/94764.jpg?t=1566847506)
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
오오~ 궁금했던 부분이 해결되지 않고 있었는데 상세한 답변을 해주셔서 정말 감사드립니다!!
근본적으로 제가 실력이 부족한 점이 크게 작용하겠지만
한글과 영문의 차이점, 특히 알타이 제어의 교착어적 성격이 분석을 어렵게 하는 것 같아요 ㅠㅠ
언어에 대한 근본적인 이해가 어느 정도 필요하더군요.
우선 말씀해주신대로 번역기를 돌리는 방법도 고려해봐야겠네요.
파파고 API를 사용해본 경험이 있는데 완벽하지는 않지만 SMT와 NMT를 잘 조합하면 괜찮은 결과를 얻었던 것으로 기억하네요.
링크를 달아주신 형태소 분석기가 흥미롭네요!
다만 제가 낮은 사양의 저전력 PC에서 돌릴 것을 목표로 하고 있었는데 소요시간을 고려하면 어느 정도 컴퓨팅 파워를 필요로 할 것 같네요.
그럼 Seia 님께서도 날씨가 쌀쌀한데 감기 조심하세요~
항상 감사드립니다!
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/764/094/94764.jpg?t=1566847506)
제가 처음에는 많이 오버해서 생각했네요 ㅜㅜㅠ
정확도 면에서 기존 CV 방식이나 단순 알고리즘과 달리 매우 유동적으로 기계 학습을 활용할 수 있어서 한 번 어떨까 했습니다.
학습에는 많은 리소스가 필요한 것이 사실이나 이미 만들어진 모델의 경우에는 금방 짧은 시간에 사용하실 수 있어 꺼내봤네요 ㅎㅎ
독감 조심하세요! 감사합니다~
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
제가 처음에 고려한 단순 언어학적 접근(?)으로는 부족한 것 같아요.
결국에는 Seia 님 말씀처럼 머신러닝이 필요하겠죠!
솔직히 제가 Tensorflow를 조금밖에 다뤄보지 못해서 이 분야에 대해서는 앞으로 더 공부를 해야될 것 같네요.
그러지 않아도 기존에 사용하던 VPS로는 컴퓨팅 파워의 한계를 느껴서 i3 + 16GB 수준의 미니PC를 구매할 예정이었거든요.
그럼 Seia 님께서도 즐거운 주말 되시고, 다시 한 번 감사드립니다!
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/764/094/94764.jpg?t=1566847506)
넵! 그런데 목적에 거의 맞는 글을 하나 더 찾아 알려드립니다~ 코사인 유사도라고 하는 방법이네요.
> http://docs.likejazz.com/cosine-sim/
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
오오~ 감사합니다!
유클리드 거리나 코사인 유사도라는 방법이 있군요~
k-hot vector라는 인코딩 방법이 한국어에도 얼마나 유용한지 테스트해봐야겠네요 ^^
그럼 좋은 오후 되세요!
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/764/094/94764.jpg?t=1566847506)
저도 조금만 더 자세히 살펴봤으면 도움이 될 여러가지를 알게 되어 감사히 생각합니다! 좋은 하루 되세요.
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![title : 황금 서버 (30일) title: 황금 서버 (30일)](https://studyforus.com/./files/iconshop/33055af84f02ddedb19db038cdae0d2f.gif)
![profile image](/files/member_extra_info/profile_image/569/001/1569.png?t=1527385219)
1. 문장의 유사성의 경우에는 위에서 Seia님이 말씀하신 것과 같이 translation을 하는 방식이나 N-gram 등의 방식을 활용하면 되겠지만, 연관성의 경우에는 해당 방식으로 하기가 어려울 것 같습니다.
2. 기계 학습으로 하시려면 CNN, DQN이 아닌 RNN으로 구현을 해야 합니다. 문장의 경우에는 앞어절에 어떤 내용이 오느냐에 따라서 의미가 달라지므로 해당 내용을 고려하기 위해서는 RNN으로 해야 합니다.
문장 번역이나 음성 인식 등이 RNN을 기반으로 해서 만들어진 모델이 많습니다.
또한 CNN의 경우에는 입력의 크기가 확정 되어 있기 때문에 길이가 일정하지 않은 문장이 들어가기에는 적절한 형태가 아닙니다.
추가로 데이터셋을 생성하기도 어려움이 있겠네요.. 이미지의 경우에는 약간의 노이즈를 추가하거나 약간 회전을 주는 등의 augmentation이 가능하지만 문장의 경우에는 해당 과정을 자동화하기가 어렵습니다. 물론 조사를 수정하는 등의 방식으로 할 수 있겠지만 이 경우에는 너무 패턴화된 방법이기 때문에 크게 의미가 없기도 하고요..
3.
딥러닝의 경우에는 연산이 많이 들기 때문에 저전력 프로세서에서는 하기 어렵습니다. 그래서 어떻게 하면 모델의 크기를 줄이면서 잘 동작하게 할 것인가에 대한 연구가 많이 이루어지고 있습니다. 교수님께서 우스겟소리로 한 이야기긴 하지만 휴대폰과 같은 곳에서도 Deep Learning이 충분히 돌아갈 수 있는(발열이 거의 없으면서 latency가 낮은) 칩 설계를 할 수 있으면 때돈을 벌 수 있다고 하셨습니다.
4.
약간 패턴화된 분석 방식이긴 하지만 "카카오톡 봇 서비스"에서 제공하는 질의 응답 방식을 응용해보시는 것도 괜찮을 것 같네요.
예를 들어 '내일 7시 날씨는 어때' 라는 문장을 넣고 "내일 7시"에 시간 라벨을 지정해주고 "날씨"에 상수 라벨을 지정해주면, 이와 비슷한 형식인 "금요일 오후 10시 날씨를 알려줘" 와 같은 문장을 인식할 수 있게 되고, 이 내용이 날씨를 물어보는 문장인 것을 알고 거기에 맞게 처리합니다.
다만 이렇게 하면 따로 처리를 해주지 않는 문장에 대해서는 동작하지 않게 되겠지만 좀 더 사람이 인식하는 방식과 가깝게 인식이 가능합니다.
그리고 패턴을 여러 개 등록하면 그 개수에 비례해서 실행 시간이 증가한다는 단점이 있겠습니다.
물론 카카오에서 패턴 매칭을 할 때 일일히 비교하는지 아니면 해당 과정도 딥러닝으로 처리하는지는 모르겠네요.
P.S. 표절 시스템에서 사용하는 방식을 활용하면 문장 유사성을 구할 수도 있겠네요.
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
상세히 답변해주셔서 감사합니다! 덕분에 많이 배웠네요~
1. 문장의 유사성 != 연관성 이군요 ㄷㄷ
2. RNN으로 구현해야 되는군요. 머신러닝과 관련해서는 구입한 책을 읽고 더 공부를 하겠습니다 ㅠㅠ
3. 원래 셀러론이나 펜티엄을 사용한 미니PC를 구매하려다가 조금 더 높은 사양인 i3-8109U(패스마크 점수: 6128점)를 사용한 PC를 구매하려고 했는데요. 말씀을 듣고보니 이 정도 컴퓨팅 파워에서는 딥 리닝은 어렵겠네요 ㅜㅜ
4. 카카오톡 봇 서비스와 표절 시스템 등에 대해서도 알아볼게요~
당장 제가 구현할 수 있는 수준이 아니라는 생각이 들지만 시간이 나는대로 공부해보겠습니다.
그럼 humit 님께서도 학업도 취업도 잘 풀리시길 기원합니다!
항상 감사드립니다 ^-^
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
기계 학습 분야로 오시는건가요? 환영합니다.
먼저 한글과 영문 사이에 차이점이 많이 있어서 한글에서의 유사성 검증은 쉽지 않고 아직까지 완전히 검증된 방법은 제가 알기로는 존재하지 않습니다만 대학원에서나 업계 분들이 참석하는 스터디에 다녀본 결과로는 유사한 툴이나 트릭을 쓰는 것이 대부분인 것 같습니다.
예를 들면 한국어 문장을 구하기 위해서 번역기를 돌리는 것이죠.
그리고 여러가지 창의적인 경우도 있습니다. 넥슨에서는 2015년도 컨퍼런스에서 잠깐 모습을 드러낸 창의적인 방법이 있었는데요. (넥슨은 욕설을 감지하기 위해서 사용하는 방법으로 사용했고 저도 해당 방법과 비슷하게 욕설 방지 프로젝트를 진행 중입니다)
한글의 경우에 아직 '형태소 분석기'라던지의 도구가 누군가에 의해서 자주 쓰이거나 하는 등 커뮤니티에서 확립되지 않았습니다. 대신 넥슨에서는 이를 이미지로 처리하기로 했습니다. 제가 보기에도 한글의 시초 단계인 '훈민정음'에서 자음은 기본 글자에서 가획이나 병서 등을 통해 새로운 글자로 확장하는 작업을 통해 새로운 글자를 만들어내듯이 이미지도 비슷한 글자들도 한 번에 구별해낼 수 있다고 봅니다.
예를 들면 ㄱ에서 ㄲ(된), ㅋ(거센)까지 말이죠. 사실 모두 비슷한 글자들이죠.
그래서 CNN DQN 알고리즘 등의 이미지 프로세싱 알고리즘을 사용해보시면 어떨까 합니다.
아니라면 트위터에서 제작한 토크나이저도 있긴 합니다.
> https://github.com/twitter/twitter-korean-text
한글 형태소 분석기들에 대한 레퍼런스 글들입니다. (구글에 검색하시면 볼 수 있는 글들입니다, 자료가 별로 없어요 ㅜㅜ arXiv가 도움이 많이 될 수도 있습니다...)
> https://iostream.tistory.com/144
> https://www.shineware.co.kr/products/komoran/ (komoran 형태소 분석기)
> https://bitbucket.org/eunjeon/mecab-ko-dic/src/master/ (mecab 형태소 분석기를 사용한 예)
넥슨 NDC 2015에 대한 영상 링크입니다 ^_^
> https://www.youtube.com/watch?v=K4nU7yXy7R8
아직까지도 한글 토크나이저가 확립이 되지 않은게 많이 아쉽네요 ㅜㅜ 힘내세요.. ㅜㅜ