두 단어의 유사성


15

두 단어 또는 문장의 유사성을 식별하는 데 도움이되는 Python 라이브러리를 찾고 있습니다.

오디오를 텍스트로 변환하여 영어 사전 또는 비 사전 단어를 생성합니다 (개인 또는 회사 이름 일 수 있음). 그런 다음 알려진 단어와 비교해야합니다.

예:

1) 텍스트 대 오디오 결과 : America Expansion에 전화 해 주셔서 감사합니다 . American Express 와 비교됩니다 .

두 문장 모두 비슷하지만 동일하지는 않습니다.

그들이 얼마나 많은 문자를 공유하는지 조사해야 할 것 같습니다. 어떤 아이디어라도 좋을 것입니다. Google 검색과 같은 기능인 '의미 있습니까'기능이 있습니다.

답변:


14

가장 가까운 것은 Jan이 레벤 슈타인의 거리 (일반적으로 편집 거리라고도 함) 대답을 언급 한 것과 같습니다 .

정보 이론 및 컴퓨터 과학에서 Levenshtein 거리는 두 시퀀스 간의 차이를 측정하기위한 문자열 메트릭입니다. 공식적으로, 두 단어 사이의 Levenshtein 거리는 한 단어를 다른 단어로 변경하는 데 필요한 최소 단일 문자 편집 (즉, 삽입, 삭제 또는 대체) 수입니다.

유사한 단어를 식별하기 위해 매우 일반적으로 사용되는 메트릭입니다. Nltk에는 이미 다음과 같은 방법으로 호출 할 수있는 편집 거리 메트릭에 대한 구현이 있습니다.

import nltk
nltk.edit_distance("humpty", "dumpty")

위의 코드는 1두 단어 사이에 하나의 문자 만 다르기 때문에를 반환 합니다.


1
Lavenshtien의 거리는 NLP가 당신이하려는 일이라면 사용할 수있는 최악의 알고리즘입니다. 2 개의 동의어에 다른 문자 집합이 있으면 이러한 경우 LD의 성능이 매우 떨어집니다.
그것은 함정이야

8

여기에 좋은 응답 외에도 difflib python 라이브러리에서 SequenceMatcher를 사용해 볼 수 있습니다.

https://docs.python.org/2/library/difflib.html

import difflib

a = 'Thanks for calling America Expansion'
b = 'Thanks for calling American Express'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d) 
### OUTPUT: 87.323943

이제 아래 코드를 고려하십시오.

a = 'Thanks for calling American Expansion'
b = 'Thanks for calling American Express'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d)
### OUTPUT: 88.88888

이제 d 값을 비교하여 유사성을 평가할 수 있습니다.


1
seq.ratio ()가 느리다고 생각되면 seq.quick_ratio ()
Nabin

6

사전이 너무 크지 않은 경우 일반적인 접근 방식은 Levenshtein 거리를 취하는 것입니다.이 거리는 기본적으로 한 단어에서 다른 단어로 변경 해야하는 횟수를 계산합니다. 변경 사항에는 캐릭터 변경, 캐릭터 제거 또는 캐릭터 추가가 포함됩니다. Wikipedia 의 예 :

lev (kitten, sitting) = 3

  • k itten-> s itten
  • sitt e n-> sitt i n
  • 앉아서-> 앉아서 g

다음 은 Wikibook에 대한 Python 구현입니다.

그러나 이러한 거리를 계산하는 알고리즘은 저렴하지 않습니다. 이 작업을 대규모로 수행해야하는 경우 한 번에 많은 단어와 일치하는 항목을 찾아야하는 경우 훨씬 빠르고 분배하기 쉬운 바이그램 벡터에서 코사인 유사성을 사용하는 방법이 있습니다. 그러나이 거리에 대한 근사치 일뿐입니다.


레프의 경우 (+1). 거리 측정법. nltk는 기성품 구현과 함께 제공됩니다. 코사인 유사성은 좋은 문자열 유사성 측정이 아닙니다 IMHO :)
Dawny33

나는 그것이 Levenshtein 거리보다 훨씬 더 나쁜 것에 동의하지만 당신은 수백만의 2 개 데이터 세트 사이에 퍼지 매칭을 필요로하는 경우가 실제로는 약간의 트릭을 더한 행렬 곱셈 필요에 적절한 시간에 그렇게 할 수
얀 반 데르 Vegt

1
@ Dawny33 나는 동의하지 않을 것이다. 코사인 유사성이 나를 위해 매우 빠르게 일했을뿐만 아니라 올바른 n 그램이 사용되었다는 것을 감안할 때 매우 정확하게 작동했습니다.
Mohit Motwani 's

3

오래되고 잘 알려진 비교 기술은 Soundex 알고리즘입니다. 아이디어 자체는 단어 자체가 아니라 발음 방식의 근사치를 비교하는 것입니다. 이것은 실제로 내가 모르는 결과의 품질을 어느 정도 향상시킵니다.

그러나 음성 텍스트 인식 엔진의 결과에 Soundex와 같은 것을 적용하는 것은 약간 이상합니다. 먼저 단어 발음에 대한 정보를 버리고 다시 추가하려고합니다. 이 두 단계를 결합하는 것이 좋습니다.

따라서 저는이 분야의 최신 기술이이를 수행하고 신경망을 기반으로하는 일종의 적응 적 분류가 될 것으로 기대합니다. Google은 신경망 을 이용한 음성 인식 에 대한 최근 연구 결과를 반환하지 않습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.