텍스트 검색자 통합

텍스트 검색을 사용하면 코퍼스에서 의미론적으로 유사한 텍스트를 검색할 수 있습니다. 이 기능은 검색어를 쿼리의 시맨틱 의미를 나타내는 고차원 벡터에 삽입한 다음 ScaNN(확장 가능한 최근접 이웃)을 사용하여 사전 정의된 맞춤 색인에서 유사성 검색을 실행하여 작동합니다.

텍스트 분류 (예: Bert 자연어 분류기)와 달리 인식할 수 있는 항목 수를 늘리기 위해 전체 모델을 재학습할 필요는 없습니다. 색인을 다시 빌드하기만 하면 새 항목을 추가할 수 있습니다. 또한 이를 통해 더 큰 (10만 개 이상의 항목) 말뭉치를 사용할 수 있습니다.

태스크 라이브러리 TextSearcher API를 사용하여 맞춤 텍스트 검색기를 모바일 앱에 배포합니다.

TextSearcher API의 주요 기능

  • 단일 문자열을 입력으로 받아 임베딩 추출과 색인에서의 최근접 이웃 검색을 실행합니다.

  • 입력 텍스트에 대한 그래프 내 또는 그래프 외 Wordpiece 또는 Sentencepiece 토큰화를 비롯한 입력 텍스트 처리

기본 요건

TextSearcher API를 사용하기 전에 검색할 텍스트의 맞춤 코퍼스를 기반으로 색인을 빌드해야 합니다. 튜토리얼을 따르고 적용하여 Model Maker Searcher API를 사용하면 됩니다.

이를 위해서는 다음이 필요합니다.

  • Universal Sentence Encoder와 같은 TFLite 텍스트 임베더 모델 예를 들면 다음과 같습니다.
    • Colab에서 재학습된 모델로, 기기 내 추론에 최적화되어 있습니다. Pixel 6에서 텍스트 문자열을 쿼리하는 데는 6ms만 걸립니다.
    • 양자화된 버전은 위의 버전보다 작지만 각 삽입에 38ms가 걸립니다.
  • 텍스트 말뭉치에

이 단계를 마치면 TFLite 모델 메타데이터에 색인이 연결된 원래 텍스트 임베더 모델인 독립형 TFLite 검색기 모델 (예: mobilenet_v3_searcher.tflite)이 있어야 합니다.

Java에서 추론 실행

1단계: Gradle 종속 항목 및 기타 설정 가져오기

.tflite 검색기 모델 파일을 모델이 실행될 Android 모듈의 애셋 디렉터리에 복사합니다. 파일을 압축하지 않도록 지정하고 TensorFlow Lite 라이브러리를 모듈의 build.gradle 파일에 추가합니다.

android {
    // Other settings

    // Specify tflite index file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

2단계: 모델 사용

// Initialization
TextSearcherOptions options =
    TextSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
TextSearcher textSearcher =
    textSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = textSearcher.search(text);

TextSearcher를 구성하는 추가 옵션은 소스 코드 및 Javadoc을 참고하세요.

C++에서 추론 실행

// Initialization
TextSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<TextSearcher> text_searcher = TextSearcher::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
const SearchResult result = text_searcher->Search(input_text).value();

TextSearcher를 구성하는 추가 옵션은 소스 코드를 참고하세요.

Python에서 추론 실행

1단계: TensorFlow Lite 지원 Pypi 패키지를 설치합니다.

다음 명령어를 사용하여 TensorFlow Lite 지원 Pypi 패키지를 설치할 수 있습니다.

pip install tflite-support

2단계: 모델 사용

from tflite_support.task import text

# Initialization
text_searcher = text.TextSearcher.create_from_file(model_path)

# Run inference
result = text_searcher.search(text)

TextSearcher를 구성하는 추가 옵션은 소스 코드를 참고하세요.

결과 예시

Results:
 Rank#0:
  metadata: The sun was shining on that day.
  distance: 0.04618
 Rank#1:
  metadata: It was a sunny day.
  distance: 0.10856
 Rank#2:
  metadata: The weather was excellent.
  distance: 0.15223
 Rank#3:
  metadata: The cat is chasing after the mouse.
  distance: 0.34271
 Rank#4:
  metadata: He was very happy with his newly bought car.
  distance: 0.37703

자체 모델과 테스트 데이터를 사용하여 간단한 TextSearcher용 CLI 데모 도구를 사용해 보세요.