Program Club

두 구문의 의미 적 유사성을 알려주는 알고리즘이 있습니까?

proclub 2020. 11. 24. 20:24
반응형

두 구문의 의미 적 유사성을 알려주는 알고리즘이 있습니까?


입력 : 구문 1, 구문 2

출력 : 의미 적 유사성 값 (0과 1 사이) 또는이 두 구문이 동일한 내용을 말할 확률



이 문서를 확인하는 것이 좋습니다.

의미 체계 및 말뭉치 통계를 기반으로 한 문장 유사성 (PDF)

설명 된 알고리즘을 구현했습니다. 우리의 문맥은 매우 일반적이었고 (효과적으로 두 개의 영어 문장), 우리는 접근 방식이 너무 느리고 결과가 유망하지만 충분히 좋지 않다는 것을 발견했습니다 (또는 상당한 추가 노력 없이는 그렇게 될 가능성이 있음).

당신은 많은 맥락을 제공하지 않기 때문에 반드시 이것을 추천 할 수는 없지만, 문제를 해결하는 방법을 이해하는 데 논문을 읽는 것이 유용 할 수 있습니다.

문안 인사,

매트.


이것에 대한 짧고 긴 대답이 있습니다.

짧은 대답 :

WordNet :: Similarity Perl 패키지를 사용하십시오 . Perl이 선택한 언어가 아닌 경우 Princeton WordNet 프로젝트 페이지확인 하거나 래퍼 라이브러리를 Google에서 확인하십시오 .

긴 대답 :

단어 유사성을 결정하는 것은 복잡한 문제이며이 분야에 대한 연구는 여전히 매우 뜨겁습니다. 유사성을 계산하려면 단어 의미대한 적절한 표현이 필요합니다 . 그러나 '의자'라는 의미의 표현은 무엇일까요? 사실, 무엇 이다 '의자'의 정확한 의미는? 이것에 대해 오래 열심히 생각하면 마음이 뒤틀리고 약간 화가 나고 마침내 진실을 찾기 위해 철학 또는 전산 언어학 연구 경력을 쌓을 것입니다. 철학자와 언어 학자 모두 말 그대로 수천 년 동안 답을 찾으려고 노력해 왔으며 끝이 보이지 않습니다.

따라서이 문제를 좀 더 심층적으로 탐구하는 데 관심이 있다면 Jurafsky와 Martin의 음성 및 언어 처리 20.7 장을 읽는 것이 좋습니다 .이 중 일부는 Google 도서를 통해 제공됩니다 . 단어 유사성에 대한 측정 값을 정의하기 위해 단어 동시 발생 통계를 사용하는 최신 배포 방법에 대한 매우 좋은 개요를 제공합니다. 그러나이를 구현하는 라이브러리를 찾을 가능성은 거의 없습니다.


Princeton University WordNet 프로젝트 를 확인하고 싶을 수도 있습니다 . 이에 대한 한 가지 가능한 접근 방식은 먼저 불용어 목록을 통해 각 구문을 실행하는 것입니다 ( "a", "to", "the"등과 같은 "일반적인"단어를 제거하기 위해). 그런 다음의 나머지 단어 각각에 대해 각 구문에서 WordNet을 기반으로 한 거리 측정을 사용하여 다른 구문에있는 각 단어 간의 의미 론적 "유사성"을 계산할 수 있습니다. 거리 측정은 다음과 같을 수 있습니다 : word1에서 word2로 가져 오기 위해 WordNet에서 통과해야하는 호의 수.

미안합니다 이것은 꽤 높은 수준입니다. 나는 분명히 이것을 시도한 적이 없습니다. 잠깐 생각하세요.


나는 이것에 대한 잠재적 의미 인덱싱을 조사 할 것입니다. 나는 당신이 벡터 공간 검색 인덱스와 비슷한 것을 만들 수 있다고 믿지만 의미 적으로 관련된 용어는 서로 더 가깝습니다. 즉, 그들 사이의 각도가 더 작습니다. 자세히 알아 보면 여기에 게시하겠습니다.


여기에 오는 사람이라면 SEMILAR- http ://www.semanticsimilarity.org/를 살펴볼 것을 제안 합니다. 그들은 단어와 문장의 유사성을 계산하기 위해 많은 현대 연구 방법을 구현합니다. Java로 작성되었습니다.

SEMILAR API는 Wordnet, LSA (Latent Semantic Analysis), LDA (Latent Dirichlet Allocation), BLEU, Meteor, PMI (Pointwise Mutual Information), 종속성 기반 방법, 2 차 할당 기반 최적화 방법 등을 기반으로 다양한 유사성 방법을 제공합니다. 유사성 방법은 단어 대 단어, 문장 대 문장 또는 더 큰 텍스트와 같은 다른 세분성으로 작동합니다.


6 년 된 질문을 파헤쳐 서 미안하지만, 오늘이 게시물을 보았으므로 다른 사람이 비슷한 것을 찾고있는 경우를 대비하여 답변을 던질 것입니다.

cortical.io는 두 표현의 의미 적 유사성을 계산하는 프로세스를 개발 했으며 웹 사이트에 데모를 올렸습니다 . 기능에 대한 액세스를 제공하는 무료 API를 제공 하므로 알고리즘을 직접 구현하지 않고도 자신의 애플리케이션에서 사용할 수 있습니다.


한 가지 간단한 해결책은 문자 n- 그램 벡터의 내적을 사용하는 것입니다. 이는 순서 변경 (많은 편집 거리 메트릭이 아닌)보다 강력하며 형태소 분석과 관련된 많은 문제를 포착합니다. 또한 완전한 의미 이해의 AI 완전 문제를 방지합니다.

n-gram 벡터를 계산하려면 n 값 (예 : 3)을 선택하고 구문의 모든 3 단어 시퀀스를 벡터로 해시합니다. 벡터를 단위 길이로 정규화 한 다음 다른 벡터의 내적을 취하여 유사성을 감지합니다.

이 접근 방식은 J. Mitchell 및 M. Lapata, "의미 분포 모델 구성", Cognitive Science, vol. 34, 아니. 8, pp. 1388–1429, 2010 년 11 월., DOI 10.1111 / j.1551-6709.2010.01106.x


각 단어가 문장 안에 나타날 확률을 고려한 통계 기법을 살펴 보겠습니다. 이렇게하면 'and', 'or', 'the'와 같은 인기있는 단어에 덜 중요성을 부여하고 덜 비정상적으로 보이는 단어에 더 많은 중요성을 부여 할 수 있으므로 더 나은 차별 요소가됩니다. 예를 들어, 두 개의 문장이있는 경우 :

1) smith-waterman 알고리즘은 두 문자열 사이의 유사성 측정을 제공합니다. 2) 우리는 smith-waterman 알고리즘을 검토했고 그것이 우리 프로젝트에 충분하다는 것을 알았습니다.

두 문장이 "smith-waterman"이라는 단어와 "algorithms"라는 단어 ( 'and', 'or'등과 같이 일반적이지 않음)를 공유한다는 사실은 두 문장이 실제로 같은 주제에 대해 이야기하고 있습니다.

요약하면 다음을 살펴볼 것을 제안합니다. 1) 문자열 유사성 측정; 2) 통계 방법;

도움이 되었기를 바랍니다.


상위 n 개 유사 단어 및 구문 유사성을 계산하는 서비스를 제공하는 SimService를 사용해보십시오 .


이를 위해서는 알고리즘이 실제로 당신이 말하는 내용을 알고 있어야합니다. 단어를 비교하고 동의어를 찾는 등 기본적인 형태로 수행 할 수 있지만 정확한 결과에는 어떤 형태의 지능이 필요합니다.


http://mkusner.github.io/publications/WMD.pdf를 살펴보십시오 . 이 문서는 의미 적 유사성을 밝히려는 Word Mover distance라는 알고리즘을 설명합니다. 그것은 word2vec에 의해 지시 된 유사성 점수에 의존합니다. 이것을 GoogleNews-vectors-negative300과 통합하면 바람직한 결과를 얻을 수 있습니다.

참고 URL : https://stackoverflow.com/questions/62328/is-there-an-algorithm-that-tells-the-semantic-similarity-of-two-phrases

반응형