2

저는 기계 학습이 새로운데 파이썬으로 몇 가지 프로젝트를 수행했습니다. 나는 자동화 될 수 있다고 생각하는 아래 문제에 접근하는 방법에 대한 조언을 찾고있다.텍스트/퍼지 매칭을 자동화하는 가장 좋은 기계 학습 접근법

조직의 데이터 품질 팀의 사용자는 수동으로 입력 한 회사 이름 (주소 포함)의 목록을 가져 오는 일일 작업을 갖고 있으며 회사의 데이터베이스를 검색하여 일치하는 결과를 찾은 다음, 그의 판단을 사용하여 - 즉, 어렵고 빠른 규칙.

입력의 예는 다음과 같습니다

회사 명, 주소 입력란 1 국이의

, 사용자는 회사 이름을 사용하고 검색 도구로 들어갑니다. 그는 결과 목록을 제시하고 가장 일치하는 것을 선택하지만 어떤 일치도 선택하지 않을 수도 있습니다. 검색 도구는 집안에 내장되어 외부 API와 대화를하며 소스 코드에 액세스 할 수 있으므로 검색 도구를 수정하여 입력 결과, 결과 목록을 캡처하고 어떤 결과가 사용되었는지 확인하는 확인란을 추가 할 수 있습니다 , 아무도 선택되지 않았 음을 나타내는 확인란을 선택합니다. 그러므로 이것이 나의 분류 된 훈련 자료가 될 것입니다. 판단을 만들기 위해 결과에서 사용

열은 거의 동일합니다

스택 오버플로 같은 회사 이름을 감안할 때

회사 명, 주소 입력란 1, 나라

, 결과는 스택 오버플로 회사를 반환 할 수 있습니다 ., Stacking Overflowing Shelves Ltd. 등. 입력 된 데이터는 합리적으로 좋기 때문에 일반적으로 약 10 개의 결과가 나오며 사람에게는 어느 것이 골라야하는지 분명합니다.

필자는 충분한 훈련 데이터를 사용하여 검색어로 API를 직접 호출 한 다음 결과 목록에서 적절한 결과를 선택할 수 있다고 생각했습니다.

ML을 통해 달성 할 수있는 것입니까? 나는 데이터가 매번 다를 것이라는 사실에 고심하고있다. 이를 달성하기위한 최선의 방법에 대한 생각, 특히 모델의 데이터 구조 및 사용하는 분류 자의 종류 등을 환영합니다.

+0

이것은 텍스트 분류보다 퍼지 매칭과 비슷합니다. 엄청난 수의 레이블로 인해 ML 분류 결과가 좋지 않을 수 있습니다. 일치하는 모든 회사 이름이 될 수 있습니다. – aberger

+0

감사합니다. 설명을 업데이트했습니다.그 중 하나를 선택하여 퍼지 매치 결과를 제공하는 방법이 있는지 궁금합니다. 유사한 결과가있을 때 어떤 결과가 나오는지, 같은 회사에 대해 여러 결과가 나오는지를 결정하는 데 사용되는 약간의 논리가 있습니다. 예 : 그들은 다른 분야에서 의미가있는 회사의 지점에 본사를 가지고 있습니다. –

+0

이것도 바이너리 분류 문제로 인식 될 수 있습니다. 기업의 각 쌍에 대해 동일한 회사에 해당하는지 아닌지에 대한 대답을해야합니다. Levenshtein distance, tfidf 또는 ngrams matches를 기능으로 사용할 수 있습니다. 솔루션이 Levenshtein 거리에서 임계 값을 선택하는 것처럼 간단하거나 형태소 분석/중지 단어의 일부 조합을 적용하는 경우에도 ML 접근 방식을 사용하여 임계 값을 선택하고 분류 품질을 측정하는 것이 좋습니다. – Dienow

답변

4

ML 문제로 프레임하려면 유사한 기능을 학습 할 수 있습니다.

"Acme Corp"를 대상 클래스 "Acme"(분류 자)와 일치하는 것으로 분류하는 대신 "Acme Corp"이 "Acme"와 유사하지만 "ABC"와 유사하다는 것을 알 수있는 기능을 배우게됩니다 법인 ".

당신의 목표는 유사성 값을 출력하는 기능을 배우는 것이 아니라 잠재적 후보자를 순위 지정하기 때문에 "유사성 학습"이라고도합니다.

하지만 전체 ML 알고리즘을 사용하기 전에 먼저 거리 거리 메트릭, 예를 들어 Levenshtein 거리 메트릭 (매우 일반적이며 찾기 쉽습니다)을 사용하여 시작합니다. 데이터를 양수 및 음수로 변환하십시오 (긍정적 인 예 : Acme는 Acme Corp와 일치합니다). 가장 간단한 학습 기능은 점수를 최대화하는 거리 편집 임계 값을 찾는 것입니다. "remove Corp.", "remove Ltd"등과 같은 매개 변수를 추가하고 어떤 조합이 가장 잘 작동하는지 찾을 수 있습니다.

+0

안녕하세요 파스칼, 이건 내가 뒤쫓아 다니는 그런 종류의 소리처럼 들리지만, 당신이 어디서나 당신에게 좋은 예를 보았다고 생각하지 않습니까? 또한 유사성 학습을위한 훌륭한 라이브러리를 알고 있습니까? 고마워. –

+0

@ NickP 어쩌면 "진짜"ML을 전혀 필요로하지 않을 수도 있습니다. 먼저 Levenshtein 거리 메트릭 (매우 일반적이며 찾기 쉽습니다)과 같은 문자열 거리 메트릭을 사용하여 시작합니다. 데이터를 양수 및 음수로 변환하십시오 (긍정적 인 예 : Acme는 Acme Corp와 일치합니다). 가장 간단한 학습 기능은 점수를 최대화하는 거리 편집 임계 값을 찾는 것입니다. "remove Corp.", "remove Ltd"등과 같은 매개 변수를 추가하고 어떤 조합이 가장 잘 작동하는지 찾을 수 있습니다. 당신은 아마 여기서 전체 ML을 필요로하지 않습니다. –

+1

@NickP이 문제에 대해 ML을 사용하는 방법에 대한 설명은 [중복 제거 라이브러리 개요] (https://dedupe.readthedocs.io/en/latest/How-it-works.html)를 참조하십시오. – fgregg