임베딩에서 가장 가까운 일치 항목을 검색하는 방법

Imbeding Eseo Gajang Gakkaun Ilchi Hangmog Eul Geomsaeghaneun Bangbeob



임베딩에서 가장 가까운 일치를 검색한다는 것은 서로 가장 가까운 의미를 가진 임베딩을 찾는 것을 의미합니다. 임베딩은 특정 작업에 대한 입력으로 언어 모델에 공급되는 문장의 벡터 표현입니다. 여기서는 유사한 임베딩을 찾는 데 사용할 수 있는 방법과 기술에 대해 설명합니다.

통사론

유사성 측면의 차이점을 기반으로 임베딩 간의 차이점을 찾는 데 활용할 수 있는 많은 기술과 도구가 있습니다. 다음은 임베딩 유사성을 찾는 데 사용할 방법 및 관련 구문입니다.







언급된 점에서 우리는 임베딩에 대한 유사성 일치를 찾는 데 사용할 수 있는 모델을 알고 있습니다. 이제 이러한 각 모델을 활용하고 각 모델에 대한 개별 예제를 구현하는 방법을 배웁니다.



예 1: 단어 임베딩을 통한 가장 근접한 일치 임베딩

유사성 일치를 위한 단어 임베딩을 구현하기 전에 단어 임베딩에 대해 알아야 합니다. 워드 임베딩은 텍스트를 벡터(숫자 값) 형태로 변환하는 프로세스입니다. Google 시스템은 숫자 형태의 입력만 인식하기 때문입니다.



원-핫 인코딩을 포함하여 이 작업을 수행하는 몇 가지 다른 방법이 있지만 임베딩이라는 단어를 활용합니다. 이러한 방식으로 임베딩은 텍스트에서 신경망 모델(예: word2vec 또는 Glove)에 의해 학습됩니다. 단어는 고차원 벡터 공간에 매핑됩니다. 문맥상 유사한 모든 단어는 가장 가까운 지점에 매핑됩니다. 이러한 방식으로 임베딩은 텍스트의 서로 다른 단어 간의 관계와 유추를 캡처할 수 있습니다.





문장에 삽입할 단어를 만들어 봅시다. 임베딩이라는 단어를 생성하기 위해 Python은 'gensim' 프레임워크를 제공합니다. Gensim은 임베딩 생성에 도움이 되는 'word2vec' 모델의 사용을 허용하는 라이브러리 패키지입니다. 임베딩을 구현하려면 먼저 Python 컴파일러에 gensim을 설치해야 합니다. 그런 다음 gensim에서 'word2vec' 모델을 가져옵니다.

'word2vec' 모델은 두 개의 입력 인수만 사용하는 알고리즘의 일종으로 첫 번째 인수는 임베딩을 생성하려는 텍스트 또는 문장이 필요하고 두 번째 인수는 최소 횟수를 지정하는 최소 횟수를 지정합니다. 단어는 나타나거나 보이기 위해 필요합니다.



'word2vec' 모델을 가져온 후 'text'를 지정합니다. 텍스트를 지정하면 텍스트와 함께 전달하고 최소 개수를 '1'로 설정하여 이 'word2vec' 모델을 훈련합니다. 이제 우리는 이 훈련된 'word2vec.wv.most_similar('consume')' 모델을 호출하고 이 예에서 'consume'인 가장 가까운 임베딩을 확인하려는 단어를 공급합니다. 임베딩 결과를 확인하기 위해 모델의 출력을 인쇄합니다.

~에서 국가로서 모델 수입 워드투벡
텍스트 = [ [ '토끼' , '가지다' , '이' ] ]
모델 = 워드투벡 ( 텍스트 , min_count = 1 )
similar_embedding = 모델. wv . 가장 비슷한 ( '토끼' )
인쇄 ( similar_embedding )

이 예에서는 'word2vec' 모델을 사용하여 텍스트에 대한 단어 임베딩을 생성하여 컨텍스트 측면에서 유사성을 확인하고 유사한 임베딩을 확인하는 코드의 출력인 이전에 첨부된 스니펫에서 볼 수 있습니다. '소비'라는 단어.

예제 2: BERT 모델을 통한 가장 가까운 검색 포함

단어 간의 문맥 관계를 이해하고 학습할 수 있으므로 텍스트 간의 유사도를 계산하는 데 활용할 수 있는 사전 훈련된 자연어 처리 모델이 있습니다. BERT는 'sentence_transformers'의 사전 훈련된 언어 모델 중 하나이며 텍스트 간의 유사성을 학습할 수 있습니다. 텍스트 간의 유사성을 찾으려면 먼저 이 모델을 텍스트 또는 문장에 맞게 미세 조정해야 합니다.

이 작업이 완료되면 이 모델을 사용하여 임베딩을 학습할 수 있습니다. 그런 다음 '코사인 유사성' 함수를 사용하여 텍스트 간의 유사성을 계산할 수 있습니다. 우리는 'google colab'인 온라인 Python 플랫폼에서 이 예제를 구현합니다. 모델을 미세 조정하기 위해 (BERT) 모델을 로드합니다. 이를 위해 먼저 'SentenceTransformers'를 설치하고 가져옵니다. 그런 다음 SentenceTransformer를 사용하여 사전 훈련된 모델에서 모델을 로드합니다. 모델을 로드하기 위해 SentenceTransformer와 BERT 모델을 모두 '$SentenceTransformer('bert-base-nli-mean-tokens')'로 호출합니다. 여기에서 입력 매개변수에 미리 훈련된 BERT 모델의 이름을 지정하고 그런 다음 'BERTmodel' 변수에 저장합니다.

이 모델을 로드한 후 이제 각각 하나의 문장으로 구성된 4개의 텍스트를 지정하여 이들 사이의 유사성을 확인합니다. 예를 들어 텍스트를 지정하면 이제 이 텍스트에 대한 임베딩을 생성합니다. '인코딩' 기능을 사용하여 각 텍스트에 대한 임베딩을 개별적으로 생성합니다.

우리는 BERT 모델의 접두사를 “BERTmodel.encoding()”으로 인코딩 함수를 호출합니다. 그런 다음 '512'로 고정한 '텍스트'와 '최대 길이'를 이 함수의 매개 변수에 전달합니다. 각 텍스트에서 이 인코딩 함수를 호출하고 텍스트를 임베딩으로 변환합니다.

이제 이러한 각 임베딩을 활용하고 코사인 유사성 함수로 대체하여 이러한 임베딩 간의 유사성을 찾습니다. 코사인 유사도 함수는 텍스트/문서의 분류 및 클러스터링을 위한 모든 자연어 처리 작업에서 널리 사용됩니다.

이러한 임베딩 간의 유사성을 찾기 위해 코사인 유사도 함수를 사용하여 임베딩된 문장의 값을 인덱스 '0'으로, 다른 임베딩된 문장의 값을 '1 to 3' 인덱스로 대입하여 문장 0과 다른 3개의 유사성을 확인합니다. 문장. 코사인 유사성 함수 출력 값의 범위는 -1에서 1까지입니다. 여기서 1은 두 임베딩이 유사함을 나타내고 -1은 두 임베딩이 유사하지 않음을 나타냅니다. 사전 학습된 BERT 모델을 사용하여 예제에서 방금 생성한 4개의 문장 임베딩을 사용하여 코사인 유사성 함수를 구현하는 방법을 보여주는 코드 스니펫을 첨부했습니다.

!pip install sentence_transformers
문장 = [
'4년 전에는 병이 가득 차 있었고 .',
'개는 새장에서 탈출하는 꿈을 꾸고 친구가 가는 길을 보았습니다.',
'그 사람은 여러 달 동안 해파리와 놀고 있었습니다.',
'그는 옷장에서 달팽이를 발견했습니다.']
sentence_transformers에서 SentenceTransformer 가져오기
Bertmodel = SentenceTransformer('bert-base-nli-mean-tokens')
sentence_embeddings = Bertmodel.encode(문장)
sentence_embeddings.shape
sklearn.metrics.pairwise import cosine_similarity에서
# 계산 = 문장 0에 대한 코사인 유사성:
cosine_similarity(
[sentence_embeddings[0]],
sentence_embeddings[1:])

출력의 배열은 다른 세 문장에 대한 '문장 0'의 유사성 값을 표시합니다. 1, 2, 3.

결론

임베딩 간의 유사성을 찾는 방법에 대해 논의했습니다. 우리는 'word2vec' gensim 모델과 사전 훈련된 BERT 모델을 사용하여 임베딩의 가장 가까운 일치를 검색하는 두 가지 다른 예를 보여주었습니다.